[Perl] Raku : Grammaire et fichier Org
Laurent Rosenfeld
laurent.rosenfeld at googlemail.com
Dim 28 Juin 23:06:28 CEST 2020
Bonsoir,
pourrais-tu donner des exemples simples de données pour lesquels ton
programme marche (avec le résultat obtenu, si possible) et des exemples
pour lesquels ça ne marche pas ?
Bonne soirée,
Laurent.
Le dim. 28 juin 2020 à 18:15, Alain Barbason <alain at barbason.be> a écrit :
> 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>.made if $<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" x 10;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);
>
> _______________________________________________
> Perl mailing list
> Perl at mongueurs.net
> http://listes.mongueurs.net/mailman/listinfo/perl
> Attention, les archives sont publiques
-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <http://listes.mongueurs.net/archives/perl/attachments/20200628/ea25e9c0/attachment.html>
Plus d'informations sur la liste de diffusion Perl