[Perl] Raku : Grammaire et fichier Org

Alain Barbason alain at barbason.be
Lun 6 Juil 08:06:48 CEST 2020


Bonjour,

Désolé pour le retour tardif, mais je n'ai reçu le mail qu'aujourd'hui.

J'ai du mal expliquer mon exemple .

Dans le programme, j'ai une variable $mail où j'ai mis une série 
d'exemple, avec un split \n\n pour faire "comme ci" c'était des fichiers 
lu séparément.

Et chaque résultat est séparé par une ligne 
-------------------------------------

(c'est plus facile pour tester et à poster)

Tous fonctionnent sauf le dernier.


Alain.

Le 28/06/20 à 23:06, Laurent Rosenfeld a écrit :
> 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 
> <mailto: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 <http://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);
>
>     _______________________________________________
>     Perl mailing list
>     Perl at mongueurs.net <mailto:Perl at mongueurs.net>
>     http://listes.mongueurs.net/mailman/listinfo/perl
>     Attention, les archives sont publiques
>
>
> _______________________________________________
> 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/20200706/90c0b4ca/attachment-0001.html>


Plus d'informations sur la liste de diffusion Perl