summaryrefslogtreecommitdiff
path: root/pandoc-filter-sections
diff options
context:
space:
mode:
authorJonas Smedegaard <dr@jones.dk>2014-12-22 09:16:35 +0100
committerJonas Smedegaard <dr@jones.dk>2014-12-22 09:16:35 +0100
commitf8955236b96711e609e3f2eb5d95998de4812755 (patch)
treef7bea38c8b8b364029dc26a5a51e7c6ba9e3b1b2 /pandoc-filter-sections
parent393da4bf5eac7b21cfd92406034d297a10e3cae2 (diff)
Add section and bibliography filters.
Diffstat (limited to 'pandoc-filter-sections')
-rwxr-xr-xpandoc-filter-sections55
1 files changed, 55 insertions, 0 deletions
diff --git a/pandoc-filter-sections b/pandoc-filter-sections
new file mode 100755
index 0000000..f0bb5a5
--- /dev/null
+++ b/pandoc-filter-sections
@@ -0,0 +1,55 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+
+use Pandoc::Filter;
+use Pandoc::Elements;
+
+# FIXME: avoid eating content past tweaked headers
+pandoc_filter(
+ \&frontmatter,
+ \&mainmatter,
+ \&backmatter,
+ \&toc,
+);
+
+# FIXME: use Header (not latex RawBlock) - why does it hang?!?
+sub header {
+ my $label = shift;
+# Header( 1, attributes {}, [ Str $label ], );
+ RawBlock( 'latex', '\\chapter{'.$label.'}' );
+};
+
+sub frontmatter {
+ my $self = shift;
+ return [ RawBlock( 'latex', '\\frontmatter' ), header('About'), ]
+ if ( $self->name eq 'Header' and $self->level >= 1
+ and stringify($self) eq 'About' );
+ return;
+}
+
+sub mainmatter {
+ my $self = shift;
+ return [ RawBlock( 'latex', '\\mainmatter' ), header(stringify($self)), ]
+ if ( $self->name eq 'Header' and $self->level == 1
+ and stringify($self) =~ /^Scope/ );
+ return;
+}
+
+sub backmatter {
+ my $self = shift;
+ return [ RawBlock( 'latex', '\\backmatter' ), header('References'), ]
+ if ( $self->name eq 'Header' and $self->level == 1
+ and stringify($self) =~ /^Notes/ );
+ return;
+}
+
+sub toc {
+ my $self = shift;
+ return unless ( $self->name eq 'Header' and $self->level == 1
+ and stringify($self) =~ /^Table/ );
+ return RawBlock( 'latex',
+ '{\\hypersetup{linkcolor=black}\\setcounter{tocdepth}{3}\\tableofcontents}'
+ );
+}