diff options
-rw-r--r-- | Makefile | 12 | ||||
-rw-r--r-- | header.tex | 8 | ||||
-rwxr-xr-x | pandoc-todo | 59 |
3 files changed, 76 insertions, 3 deletions
@@ -9,7 +9,7 @@ citeproc_file = $(stem).bib templates = template.tex header.tex before.tex after.tex -filters = ./pandoc-memoir ./pandoc-cs1 +filters = ./pandoc-memoir ./pandoc-cs1 ./pandoc-todo filters += $(if $(citeproc_file),pandoc-citeproc) filters += ./pandoc-iri @@ -52,5 +52,11 @@ $(stem).mediawiki: $(stem).raw $(stem).native: $(stem).mediawiki $(localfilters) $(env_filter) pandoc -f mediawiki $(args_meta) $(args_filter) -o $@ $< -$(flavors:%=$(stem)-%.pdf) $(stem).tex: $(stem).native $(templates) - pandoc $(args_meta) $(args_latex) $(args_$(@:$(stem)-%.pdf=%)) -o $@ $< +$(flavors:%=$(stem)-%.tex): $(stem).native $(templates) + pandoc $(args_meta) $(args_latex) $(args_$(@:$(stem)-%.tex=%)) -o $@ $< + +XELATEX = xelatex -no-shell-escape -halt-on-error -interaction=batchmode +%.pdf: %.tex + $(XELATEX) $< + $(XELATEX) $< + $(XELATEX) $< @@ -1,7 +1,15 @@ \microtypesetup{final} \urlstyle{tt} \usepackage{draftwatermark} +\usepackage{xcolor,textcomp} +\usepackage[normalem]{ulem} +\newcommand{\hl}{% + \bgroup\markoverwith{% + \textcolor{yellow}{\rule[-.5ex]{2pt}{2.5ex}}}\ULon} %\usepackage{fixme} +\usepackage[obeyDraft]{todonotes} + \usepackage{marginnote} + \renewcommand{\marginpar}{\marginnote} \hypersetup{breaklinks,hidelinks,draft=false} \usepackage[defaultlines=4,all]{nowidow} \def\UrlBreaks{% diff --git a/pandoc-todo b/pandoc-todo new file mode 100755 index 0000000..784b8fa --- /dev/null +++ b/pandoc-todo @@ -0,0 +1,59 @@ +#!/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/(?<!\s|$breakable_chars)($breakable_chars])(?!\s)/$1\\-/g; + $s =~ s/$odd_singlequote_chars/'/g; #' + return $s; +} + +sub mark_inside { + my ( $before, $it, $after, $note ) = @_; + return [ RawInline( 'latex', sprintf( '%s\\todo{%s}\\hl{%s}%s', + latex_encode($before), + latex_encode($note), + latex_encode($it), + latex_encode($after), + ))]; +}; + +sub todo { + my $self = shift; + return unless ( $self->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 }; + } +}; |