page: block(s?) block: nonplainblock | plainblock plainblock: emptyline(?) plainline(s) { $return = [ '

', @item[2..$#item], '

' ] ; } plainline: ...!emptyline ...!nonplainblock line['','
'] nonplainblock: emptyline(?) (list | pre | hrule | header) header: h6 | h5 | h4 | h3 | h2 h2: '=' line['

','

'] { $return = $item[2] ; } h3: '==' line['

','

'] { $return = $item[2] ; } h4: '===' line['

','

'] { $return = $item[2] ; } h5: '====' line['
','
'] { $return = $item[2] ; } h6: '=====' line['
','
'] { $return = $item[2] ; } hrule: '----' newline(?) { $return = '
' ; } list: olist | ulist line: linepart(s) newline(?) { $return = [($arg[0]||''),@item[1..$#item-1],($arg[1]||''), $item[-1]] ; } unformattedline: unformattedlinepart(s) newline(?) { $return = [($arg[0]||''),@item[1..$#item-1],($arg[1]||''), $item[-1]] ; } unformattedlinepart: link | plaintextpart plaintextpart: image | urllink | /[ \t\w]+ |(?!\z).?/ plaintextline: plaintextpart(s) newline(?) { $return = [($arg[0]||''),@item[1..$#item-1],($arg[1]||''), $item[-1]] ; } newline: "\n" pre: preline(s) { $return = [ '
', @item[1..$#item], '
' ] ; } olist: ol_line(s) { $return = [ '
    ', @item[1..$#item], '
' ] ; } ulist: ul_line(s) { $return = [ '' ] ; } preline: ' ' plaintextline['',''] { $return = $item[2] ; } ol_line: /\+ +/ line['
  • ','
  • '] { $return = $item[2] ; } ul_line: /\* +/ line['
  • ','
  • '] { $return = $item[2] ; } emptyline: /[ \t]*/ newline(s) link: locallink | manlink linktext: /[\w '.,-]+/ #urltextlink: '{' linktext '}' '(' url ')' { $return = "$item{linktext}" } urllink: url { (my $url = $item[1]) =~ s!&!%26!g; $return = "$item[1]" } url: m!\bhttp:/\S*[\w/]! image: 'image:' url { $return = "" ; } locallink: '{' linktext '}' { (my $href=my $link=$item[2])=~s/ /+/g; $return = -s ::find_file($link) ? "$link" : "¿$link?" } manlink: m!(([\w:]+)\((\d)\w?\))! { $return = "$1" } strong: '*' (...!'*' linepart)(s) '*' { $return = [ '', $item[2], '' ] ; } emphasized: '//' (...!'//' linepart)(s) '//' { $return = [ '', $item[2], '' ] ; } plaintext: '[[' (...!']]' plaintextpart)(s) ']]' { $return = $item[2] ; } striked: m!\B-\S+-\B! { (my $strike = $item[1]) =~ tr!-! !; $return = "$strike" ; } monospace: "''" (...!"''" linepart)(s) "''" { $return = ['',$item[2],''] ; } linepart: formattedlinepart | unformattedlinepart formattedlinepart: strong | emphasized | striked | monospace | plaintext