Changeset 251 for lang/perl/Text-Nyarlax

Show
Ignore:
Timestamp:
09/21/07 18:11:37 (16 months ago)
Author:
nyarla
Message:

lang/perl/Text-Nyarlax: I implemented parse of a list elements ( UnorderedList?, OrderedList?, DefinitionList? ) on Text::Nyarlax::Parser::PRD.

Location:
lang/perl/Text-Nyarlax/trunk
Files:
1 added
1 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/Text-Nyarlax/trunk/lib/Text/Nyarlax/Parser/PRD.pm

    r140 r251  
    9595                        } 
    9696 
    97     Content             :   Section | Paragraph 
     97    Content             :   Section 
     98                        |   List[ marker => quotemeta( '*' ), name => 'UnorderedList', indent => 0 ] 
     99                        |   List[ marker => quotemeta( '#' ), name => 'OrderedList', indent => 0 ] 
     100                        |   DefinitionList[ indent => 0 ] 
     101                        |   Paragraph 
    98102 
    99103    Section             :   Heading Content(s?) 
     
    120124                                if ( $item{'Identifier(?)'}->[0] ); 
    121125 
     126                            $return = $elm; 
     127                        } 
     128 
     129    List                :   ListItem[ marker => $arg{'marker'}, indent => $arg{'indent'} ](s) 
     130                        { 
     131                            my $elm = element( $arg{'name'} ); 
     132                            $elm->push_content( @{ $item{'ListItem(s)'} } ); 
     133                            $return = $elm; 
     134                        } 
     135 
     136    ListItem            :   /[ \t]{$arg{'indent'}} $arg{'marker'} [ \t]*/x ListContent[ indent => $arg{'indent'} ] 
     137                            { 
     138                                my $elm = element( $item[0] ); 
     139                                $elm->push_content( @{ $item{'ListContent'} } ); 
     140                                $elm->join_content( text => "\n" ); 
     141                                $return = $elm; 
     142                            } 
     143 
     144    ListContent         :  ListConetntFirst[ indent => $arg{'indent'} ] ListChild[ indent => $arg{'indent'} ](s?) 
     145                        { 
     146                            $return = [ 
     147                                @{ $item{'ListConetntFirst'} }, 
     148                                @{ flatten($item{'ListChild(s?)'}) }, 
     149                            ]; 
     150                        } 
     151 
     152    ListConetntFirst    :   />>/ parse / [ \t]{$arg{'indent'}} [ \t]{2} << \n /x 
     153                            { $return = $item{'parse'} } 
     154                        |   InlineNode(s?) /\n/ 
     155                            { $return = $item{'InlineNode(s?)'} } 
     156     
     157 
     158    ListChild           :   List[ marker => quotemeta( '*' ), name => 'UnorderedList', indent => $arg{'indent'} + 2 ] 
     159                        |   List[ marker => quotemeta( '#' ), name => 'OrderedList', indent => $arg{'indent'} + 2 ] 
     160                        |   DefinitionList[ indent => $arg{'indent'} + 2 ] 
     161                        |   ListChildText[ indent => $arg{'indent'} ] 
     162 
     163    ListChildText       :   /[ \t]{$arg{'indent'}} [ \t]{2,}/x InlineNode(s) /\n/ 
     164                            { $return = [ @{ $item{'InlineNode(s)'} }, "" ] } 
     165 
     166    DefinitionList      :   DefinitionItem[ indent => $arg{'indent'} ](s) 
     167                        { 
     168                            my $elm = element( $item[0] ); 
     169                            $elm->push_content( @{ $item{'DefinitionItem(s)'} } ); 
     170                            $return = $elm; 
     171                        } 
     172 
     173    DefinitionItem      :   DefinitionTerm[ indent => $arg{'indent'} ] DefinitionDescription[ indent => $arg{'indent'} ](s?) 
     174                        { 
     175                            my $elm = element( $item[0] ); 
     176                            $elm->push_content( $item{'DefinitionTerm'}, @{ $item{'DefinitionDescription(s?)'} } ); 
     177                            $return = $elm; 
     178                        } 
     179 
     180    DefinitionTerm      :   /[ \t]{$arg{'indent'}} [?][ \t]*/x InlineNode(s?) /\n/ ListChildText[ indent => $arg{'indent'} ](s?) 
     181                        { 
     182                            my $elm = element( $item[0] ); 
     183                            $elm->push_content( @{ $item{'InlineNode(s?)'} }, @{ flatten($item{'ListChildText(s?)'}) } ); 
     184                            $elm->join_content( text => "\n" ); 
     185                            $return = $elm; 
     186                        } 
     187 
     188    DefinitionDescription:  /[ \t]{$arg{'indent'}} [:][ \t]*/x ListContent[ indent => $arg{'indent'} ] 
     189                        { 
     190                            my $elm = element( $item[0] ); 
     191                            $elm->push_content( @{ $item{'ListContent'} } ); 
     192                            $elm->join_content( text => "\n" ); 
    122193                            $return = $elm; 
    123194                        }