diff --git a/src/Compiler.pir b/src/Compiler.pir index db84e41..ee60814 100644 --- a/src/Compiler.pir +++ b/src/Compiler.pir @@ -239,6 +239,28 @@ Return generated HTML for all of its children. .return (code) .end +=item html(Markdown::RefLink node) + +=cut + +.sub 'html' :method :multi(_,['Markdown';'RefLink']) + .param pmc node + .local pmc code + new code, 'CodeString' + $S0 = "" + $S1 = self.'html_children'(node) + if $S1 goto L1 + $S1 = node.'key'() + $I0 = length $S1 + $I0 -= 2 + $S1 = substr $S1, 1, $I0 + L1: + $S0 .= $S1 + $S0 .= "" + set code, $S0 + .return (code) +.end + =item html(Markdown::Email node) =cut diff --git a/src/Node.pir b/src/Node.pir index 8532146..61da11c 100644 --- a/src/Node.pir +++ b/src/Node.pir @@ -30,6 +30,7 @@ for Markdown. p6meta.'new_class'('Markdown::ListItem', 'parent'=>base) p6meta.'new_class'('Markdown::OrderedList', 'parent'=>base) p6meta.'new_class'('Markdown::Para', 'parent'=>base) + p6meta.'new_class'('Markdown::RefLink', 'parent'=>base) p6meta.'new_class'('Markdown::Space', 'parent'=>base) p6meta.'new_class'('Markdown::Strong', 'parent'=>base) p6meta.'new_class'('Markdown::Title', 'parent'=>base) @@ -59,6 +60,15 @@ for Markdown. .end +.namespace [ 'Markdown';'RefLink' ] + +.sub 'key' :method + .param pmc value :optional + .param int has_value :opt_flag + .tailcall self.'attr'('key', value, has_value) +.end + + .namespace [ 'Markdown';'Title' ] .sub 'level' :method diff --git a/src/parser/actions.pm b/src/parser/actions.pm index 51264c2..465e1d5 100644 --- a/src/parser/actions.pm +++ b/src/parser/actions.pm @@ -216,6 +216,22 @@ method Link($/, $key) { make $( $/{$key} ); } +method ReferenceLink($/, $key) { + make $( $/{$key} ); +} + +method ReferenceLinkDouble($/) { + my $mast := Markdown::RefLink.new( :key( ~$