[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