[Perl] Raku : Grammaire et fichier Org
Alain Barbason
alain at barbason.be
Dim 28 Juin 18:14:54 CEST 2020
Bonjour,
Pour mon programme d'interfaçage graphique de fichier Org
(https://github.com/alainbebe/org-mode-gtk.raku), j'aimerais lire les
fichiers Org à l'aide la grammaire de Raku.
Je suis parvenu à lire des fichiers en liste et/ou en récursif, mais
quand le fichier contient une nouvelle tâche avec une indentation en
moins, je coince.
Le code ci-dessous match chaque fichier (simulé dans $file), mais ,
dernier exemple, place en niveau 2 une tâche qui devrait être en niveau
1. Ce qui me paraît normal vu le code. J'ai essayé la ligne 12, mais ça
ne match pas.
Une idée ?
(posté déjà sur developpez.com)
AlainBB
#!/usr/bin/env perl6
use v6;
use Data::Dump;
use Grammar::Tracer;
my $level;
grammar OrgMode{
rule TOP{ ^<tasks> $}
rule tasks{ \n?<task>+ %%\n}
token task{ <content> <tasks>?{$level=""}}
# token task { <content> <tasks>? {$level=$level.substr(0, *-1)}}
token content{ ^^($level "*"+)" " .+? $${$level=$0.Str}}
}
class OM-actions{
method TOP($/) {
make$<tasks>.made;
}
method tasks($/) {
make$<task>».made ;
}
method task($/) {
my %task;
%task{"task"}=$<content>.made;
%task{"sub-task"}=$<tasks>.madeif $<tasks>.made;
make%task;
}
method content($/) {
make$/.Str ;
}
}
my $file =
"* juste un header 1
* juste deux header 1
* header 2
* juste 3 header 1
* header 2
* header 3
* juste un header 1 et un sub
** sub-header 1
* juste un header 1 et deux sub *
** sub-header 1
** sub-header 2
* juste un header 1 et un sub et un sub-sub
** sub-header 1
*** sub-sub-header 1
* 2 header 1 et un sub au milieu
** sub-header 1
* header 2"
;
say"\n" x10;
sub parse_file($file) {
say$file;
say"";
$level="";
# say OrgMode.parse($file);
say Dump OrgMode.parse($file,:actions(OM-actions)).made;
say"---------------------------------------------------------------------------------------";
}
parse_file($_) for split("\n\n",$file);
-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <http://listes.mongueurs.net/archives/perl/attachments/20200628/c84bfaac/attachment.html>
Plus d'informations sur la liste de diffusion Perl