summaryrefslogtreecommitdiff
path: root/pandoc-memoir
blob: c15ebe6faddae023c78f1a0142e06516786d344f (plain)
  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4. use feature qw(switch);
  5. no if $] >= 5.018, warnings => "experimental::smartmatch";
  6. use Pandoc::Filter 0.06;
  7. use Pandoc::Elements 0.12;
  8. my ( $frontmatter_seen, $mainmatter_seen, $backmatter_seen, $toc_seen);
  9. pandoc_filter(
  10.     \&matter,
  11.     \&toc,
  12. );
  13. sub matter {
  14.     my $self = shift;
  15.     return unless ( $self->name eq 'Header' );
  16.     return unless ( $self->level == 1 );
  17.     my (@replace, @prepend);
  18. #   push @prepend, RawBlock( 'latex', '\\frontmatter' )
  19. #       unless ($toc_seen++);
  20.     given ($self->string) {
  21.         when ( /^Table/ and not $frontmatter_seen++ ) {
  22.             push @replace, RawBlock( 'latex',
  23.                 '{\\hypersetup{linkcolor=black}\\setcounter{tocdepth}{3}\\cleartorecto\\tableofcontents}'
  24.             );
  25.         };
  26.         when ( /^Scope/ and not $mainmatter_seen++ ) {
  27.             push @prepend, RawBlock( 'latex', '\\mainmatter' );
  28.         };
  29.         when ( /^Notes/ and not $backmatter_seen++ ) {
  30.             push @prepend, RawBlock( 'latex', '\\backmatter' );
  31.             push @replace, Header( 1, attributes {},
  32.                 [ Str 'References' ] );
  33.         };
  34.         default { return };
  35.     }
  36.     return unless ( @replace or @prepend );
  37.     return [ @prepend, $self ] unless (@replace);
  38.     return [ @prepend, @replace ];
  39. }
  40. sub toc {
  41.     my $self = shift;
  42.     return []
  43.         if ( $self->name eq 'Para' and $self->string =~ /__TOC__/ );
  44.     return;
  45. }