#!/usr/bin/perl # TODO: support multi-match within word # TODO: support multi-word match # TODO: always count and allow expressing which (default: all) # TODO: parse regex+commeent as definition in external markdown TODO file. # TODO: normal hyphenation within note (keep quote with word in "word") use warnings; use strict; use feature qw(switch); no if $] >= 5.018, warnings => "experimental::smartmatch"; use Pandoc::Filter 0.05; use Pandoc::Elements; my $breakable_chars = qr/[\&\;\/\.\?\!\=]/; my $hyphen_chars = qr/[\x{2010}-\x{2015}\x{2053}\x{2212}]/; my $doublequote_chars = qr/[\x{00AB}\x{00BB}\x{201C}-\x{201F}\x{300C}-\x{300F}\x{301D}-\x{301F}\x{FE41}-\x{FE44}\x{FF02}\x{FF62}\x{FF63}]/; my $singlequote_chars = qr/[\x{0060}\x{2018}\x{2019}\x{201A}\x{201B}\x{2039}\x{203A}\x{FF07}]/; my $odd_singlequote_chars = qr/[\x{2019}]/; pandoc_filter( \&todo, ); sub latex_encode { my $s = shift; $s =~ s/(?name eq 'Str' ); given ($self->content) { when (/^(-)$/) { return mark_inside( '', $1, '', 'double dash?' ) }; when ( /^(.*?)($hyphen_chars(?:.*$hyphen_chars)?)(.*?)$/ ) { return mark_inside( $1, $2, $3, 'bad dash/hyphen' ) }; when ( /^(.*?)($doublequote_chars(?:.*$doublequote_chars)?)(.*?)$/ ) { return mark_inside( $1, $2, $3, 'bad quote' ) }; when ( /^(.*?)($singlequote_chars(?:.*$singlequote_chars)?)(.*?)$/ ) { return mark_inside( $1, $2, $3, 'Bad quote/apostrophe' ) }; default { return }; } };