package Classy::Dialect::BlockParser; use Classy::Event::AsideBlock; use Markdent::Regexes qw( :block ); use Markdent::Parser::BlockParser; use Moose::Role; with 'Markdent::Dialect::GitHub::BlockParser'; around _possible_block_matches => sub { my $orig = shift; my $self = shift; my @look_for = $self->$orig(); unshift @look_for, 'aside_block'; return @look_for; }; after parse_document => sub { my $self = shift; return if $self->_span_parser->_fn_list_count eq 0; print('Dumping footnotes!') if $self->debug; $self->_send_event( 'StartHTMLTag', tag => 'div', attributes => { id => 'footnotes', }, ); $self->_send_event('HorizontalRule'); $self->_send_event('StartOrderedList'); for my $fn_id (@{ $self->_span_parser->_note_idx_map }) { my $fndata = $self->_span_parser->_get_fn_by_id($fn_id); print("fn-> $fn_id = $fndata\n"); $self->_send_event( 'StartHTMLTag', tag => 'li', attributes => { id => "fn:$fn_id", } ); $self->_span_parser->parse_block( "$fndata " ); $self->_send_event( 'StartLink', uri => "#fnref:$fn_id", ); # TODO: make this editable $self->_send_event( 'HTMLTag', tag => 'img', attributes => { src => '/assets/img/return.gif', class => 'backbtn', }, ); $self->_send_event('EndLink'); $self->_send_event( 'EndHTMLTag', tag => 'li', ); } $self->_send_event('EndOrderedList'); $self->_send_event( 'EndHTMLTag', tag => 'div', ); }; sub _match_aside_block { my $self = shift; my $text = shift; return unless ${$text} =~ / \G $BlockStart !!! ([\w-]+)? # optional extra class name \n ( # alert block content (?:.|\n)+? \n # last newline required for _parse_text ) !!! \n /xmgc; my $inner = $2; my $classes = "aside" . (defined $1 ? " $1" : ""); $self->_debug_parse_result( $inner, 'aside block', ) if $self->debug; $self->_send_event( 'StartHTMLTag', tag => 'div', attributes => { class => $classes, } ); $self->_parse_text( \$inner ); $self->_send_event( 'EndHTMLTag', tag => 'div', ); return 1; } 1; __END__ =pod =head1 DESCRIPTION This role is similar to L, but adds parsing for custom "aside" contexts used by datagirl.xyz. =head1 ROLES This role does the L role. =head1 BUGS We'll find out! =cut