| | 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" ); |