diff options
-rwxr-xr-x | .ikiwiki/IkiWiki/Plugin/pandoc.pm | 231 |
1 files changed, 1 insertions, 230 deletions
diff --git a/.ikiwiki/IkiWiki/Plugin/pandoc.pm b/.ikiwiki/IkiWiki/Plugin/pandoc.pm index 573617a..34bdd89 100755 --- a/.ikiwiki/IkiWiki/Plugin/pandoc.pm +++ b/.ikiwiki/IkiWiki/Plugin/pandoc.pm @@ -1,7 +1,5 @@ #!/usr/bin/env perl -$DB::single = 1; - package IkiWiki::Plugin::pandoc; use warnings; @@ -11,18 +9,6 @@ use FileHandle; use IPC::Open2; use File::Path qw/make_path/; use JSON; -use Data::Dumper; - -$Data::Dumper::Indent = 3; - -my $fh = undef; -my $dh = undef; -my $fnm = undef; -my $f = undef; -my $next = 0; -my $base = '/tmp/pandoc'; - -mkdir($base); # activate with 'generate_$format' in meta; turn on all with 'generate_all_formats'. my %extra_formats = ( @@ -52,48 +38,7 @@ my @list_hash_meta_keys = qw/ references /; -sub debug_get_filename_prefix { - - my $place = shift; - my $page = shift; - my $fnm_pfx = undef; - - opendir($dh, $base) || die "Can't open $base: $!"; - foreach $f (grep(/^[0-9][0-9]*/, readdir($dh))) { - $f =~ /^([0-9][0-9]*)\.(.*)$/; - $next = $1 + 1 if ($1 >= $next); - } - close($dh); - if ($page) { - $fnm_pfx = sprintf "%s/%.3d.%s.%s", $base, $next, $place, - $page =~ s/\//-/rg; - } else { - $fnm_pfx = sprintf "%s/%.3d.%s", $base, $next, $place; - } - return $fnm_pfx; -} - -# DEBUG Print -print "D: pandoc: First file read.\n"; -$fnm = debug_get_filename_prefix ("verify"); -open($fh, '>', $fnm) or die "Could not"; -print $fh "Hej du glade på fil\n"; -print $fh "Detta är filen i '/home/gustav/git/fripost/wiki/.ikiwiki/IkiWiki/Plugin'\n"; -close $fh; -# END - - sub import { - - # DEBUG Print - print "D: pandoc:import: Run.\n"; - my $fnm_pfx = debug_get_filename_prefix ("import",""); - my $fnm = $fnm_pfx; - open($fh, '>', $fnm) or die "Could not open $fnm ."; - print $fh "Import.\n"; - close $fh; - # END - my $markdown_ext = $config{pandoc_markdown_ext} || "mdwn"; # May be both a string with a single value, a string containing commas or an arrayref @@ -142,11 +87,6 @@ sub import { sub getsetup () { - - # DEBUG - print "D: pandoc:getsetup: Run.\n"; - # END - return plugin => { safe => 1, @@ -422,7 +362,6 @@ sub getsetup () { sub htmlize ($@) { - my $format = shift; my %params = @_; my $page = $params{page}; @@ -431,24 +370,6 @@ sub htmlize ($@) { local(*PANDOC_IN, *JSON_IN, *JSON_OUT, *PANDOC_OUT); my @args = (); - # DEBUG Print params - print "D: pandoc:htmlize: Run for ", $page, "\n"; - my $fnm_pfx = debug_get_filename_prefix ("htmlize", $page); - my $m = 0; - $fnm = sprintf "%s.%.1d.%s", $fnm_pfx, $m++, "params"; - open($fh, '>', $fnm) or die "Could not"; - $Data::Dumper::Indent = 2; - print $fh Data::Dumper->Dump([\%params], ["params"]), "\n"; - close $fh; - # END - - # DEBUG Print half way pagestate pagestate - $fnm = sprintf "%s.%.1d.%s", $fnm_pfx, $m++, "early-pagestate"; - open($fh, '>>', $fnm); - print $fh Data::Dumper->Dump([$pagestate{$page}], ['pagestate']), "\n"; - close $fh; - # END - # The default assumes pandoc is in PATH my $command = $config{pandoc_command} || "pandoc"; @@ -548,20 +469,6 @@ sub htmlize ($@) { warn "WARNING: Unexpected format for meta block. Incompatible version of Pandoc?\n"; } - # DEBUG Half way content which is plenty data - print "D: pandoc:htmlize: Pandoc command: ", " ", $command, " ", '-f', " ", - $markdown_fmt, " ", '-t', " ", 'json', " ", @args, - "\n"; - - $fnm = sprintf "%s.%.1d.%s", $fnm_pfx, $m++, "early-content"; - open($fh, '>>', $fnm); - print $fh Data::Dumper->Dump([$content], [qw(content)]), "\n"; - print $fh Data::Dumper->Dump([$json_content], [qw(json_content)]), "\n"; - print $fh Data::Dumper->Dump([$decoded_json], [qw(decoded_json)]), "\n"; - print $fh Data::Dumper->Dump([$meta], [qw(meta)]), "\n"; - close $fh; - # END - # Get some selected meta attributes, more specifically: # (title date bibliography csl subtitle abstract summary description # version lang locale references author [+ num_authors primary_author]), @@ -569,13 +476,11 @@ sub htmlize ($@) { my @format_keys = grep { $_ ne 'pdf' } keys %extra_formats; my %scalar_meta = map { ($_=>undef) } @scalar_meta_keys; - $scalar_meta{$_.'_template'} = undef for @format_keys; my %bool_meta = map { ("generate_$_"=>0) } keys %extra_formats; my %list_meta = map { ($_=>[]) } ( @list_meta_keys, @list_hash_meta_keys, @hash_meta_keys); $list_meta{$_.'_extra_options'} = [] for @format_keys; - my $have_bibl = 0; foreach my $k (keys %scalar_meta) { next unless $meta->{$k}; @@ -605,23 +510,6 @@ sub htmlize ($@) { $have_bibl = 1 if $k eq 'references'; $pagestate{$page}{meta}{$k} = $list_meta{$k}; $pagestate{$page}{meta}{"pandoc_$k"} = $list_meta{$k}; - - # DEBUG - # if (ref $list_meta{$k} eq 'ARRAY') {print "D: $k is ARRAY.", "\n";} - # else {print "D: $k is not array.", "\n";} - # if ($k eq 'references') { - # print "D: Found, ", ref $meta->{$k}, ", ", ref $list_meta{$k}, ", ", - # keys $meta->{$k}->%*, ".\n"; - # my @tmp_references; - # foreach my $item ($list_meta{$k}->@*) { - # print "D: Found $item", ".\n"; - # push @tmp_references, map { $_ => $l{$_}; - # } - # $pagestate{$page}{meta}{"pandoc_$k"} = @tmp_references; - # print "D: Sent as pandoc_$k, ", @tmp_references, ".\n"; - # } - # END - } # Try to add other keys as scalars, with pandoc_ prefix only. foreach my $k (keys %$meta) { @@ -639,10 +527,6 @@ sub htmlize ($@) { $pagestate{$page}{meta}{pandoc_primary_author} = $scalar_meta{primary_author} } - # DEBUG - $pagestate{$page}{meta}{fripost_debug_outer} = 'added in plugin, forced'; - # END - # The bibliography may be set in a Meta block in the page or in the .setup file. # If both are present, the Meta block has precedence. for my $bibl ($scalar_meta{bibliography}, $config{pandoc_bibliography}) { @@ -718,48 +602,16 @@ sub htmlize ($@) { close JSON_IN; my @html = <PANDOC_IN>; - close PANDOC_IN; waitpid $to_html_pid, 0; - print "D: pandoc:htmlize: Pandoc command: ", " ", $command, " ", '-f', " ", - 'json', " ", '-t', $htmlformat, " ", @html_args, "\n"; - $content = Encode::decode_utf8(join('', @html)); # Reinstate placeholders for inline plugin: $content =~ s{::INLINE::PLACEHOLDER::(\d+)::} {<div class="inline" id="$1"></div>}g; - # DEBUG Print meta - $fnm = sprintf "%s.%.1d.%s", $fnm_pfx, $m++, "meta"; - open($fh, '>>', $fnm) or die "Could not"; - print $fh "\n"; - print $fh Data::Dumper->Dump([\%scalar_meta], [qw(scalar_meta)]), "\n"; - print $fh Data::Dumper->Dump([\%bool_meta], [qw(bool_meta)]), "\n"; - print $fh Data::Dumper->Dump([\%list_meta], [qw(list_meta)]), "\n"; - close $fh; - # END - - # DEBUG Print pagestate again - $fnm = sprintf "%s.%.1d.%s", $fnm_pfx, $m++, "return-pagestate"; - open($fh, '>>', $fnm); - print $fh Data::Dumper->Dump([$pagestate{$page}], ['pagestate']), "\n"; - close $fh; - # END - - # DEBUG Print return content - $fnm = sprintf "%s.%.1d.%s", $fnm_pfx, $m++, "return-content"; - open($fh, '>>', $fnm); - print $fh Dumper($content), "\n"; - close $fh; - # END - - # DEBUG - print "D: pandoc:htmlize: Return.\n"; - # END - return $content; } @@ -767,50 +619,7 @@ sub htmlize ($@) { sub pagetemplate (@) { my %params = @_; my $page = $params{page}; - my $template = $params{template}; - - # DEBUG - my $filename = $template->{'options'}{'filename'}; - $filename =~ /^.*\/([a-z]*).tmpl$/; - my $filenamebase = $1; - print "D: pandoc:pagetemplate: Run for $page and $filenamebase \n"; - # END - - # DEBUG compare with https://metacpan.org/pod/HTML::Template#TMPL_LOOP - if ($page eq "test") { - $template->param( - EMPLOYEE_INFO => [ - {name => 'Sam', job => 'programmer'}, - {name => 'Steve', job => 'soda jerk'}]); - - # a couple of arrays of data to put in a loop: - my @words = qw(I Am Cool); - my @numbers = qw(1 2 3); - my @loop_data = (); # initialize an array to hold your loop - - while (@words and @numbers) { - my %row_data; # get a fresh hash for the row data - - # fill in this row - $row_data{WORD} = shift @words; - $row_data{NUMBER} = shift @numbers; - - # the crucial step - push a reference to this row into the loop! - push(@loop_data, \%row_data); - } - # HERE! - $template->param(THIS_LOOP => \@loop_data); - if ($pagestate{$page}{meta}{'pandoc_references'}) { - my @more_ref = $pagestate{$page}{meta}{'pandoc_references'}->@*; - my $ref = $pagestate{$page}{meta}{'pandoc_references'}; - my $k = 'pandoc_references'; - $template->param('more_pandoc_references' => \@more_ref); - #$template->param($k => $pagestate{$page}{meta}{$k}); - } - } - # END - foreach my $k (keys %{$pagestate{$page}{meta}}) { next unless (grep {/^$k$/} ( @@ -819,35 +628,12 @@ sub pagetemplate (@) { ($k =~ /^(pandoc_)/); $template->param($k => $pagestate{$page}{meta}{$k}); } - - # DEBUG Print pagetemplate data - my $fnm_pfx = debug_get_filename_prefix ("pagetemplate", $page); - my $m = 0; - my $fnm = sprintf "%s.%s.%.1d.%s", $fnm_pfx, $filenamebase, $m++, "template"; - open($fh, '>', $fnm) or die "Could not"; - print $fh Data::Dumper->Dump([$template->{'mtime'}], ["mtime"]), "\n"; - print $fh Data::Dumper->Dump([$template->{'options'}], ['options']), "\n"; - print $fh Data::Dumper->Dump( - [$template->{'param_map'}], ['param_map']), "\n"; - print $fh Data::Dumper->Dump( - [$template->{'parse_stack'}], ['parse_stack']),"\n"; - close $fh; - - $fnm = sprintf "%s.%s.%.1d.%s", $fnm_pfx, $filenamebase, $m++, "output"; - open($fh, '>', $fnm) or die "Could not"; - print $fh $template->output(); - close $fh; - # END - return $template; } sub pageactions { my %args = @_; my $page = $args{page}; - - print "D: pandoc:pageactions: Run for ", $page, "\n"; - my @links = (); return unless $pagestate{$page}{pandoc_extra_formats}; my @exts = sort { @@ -869,11 +655,6 @@ sub pageactions { sub export_file { my ($page, $ext, $json_content, $command, @args) = @_; - - # DEBUG - print "D: pandoc:export_file: Run for $page.\n"; - # END - my ($export_path, $export_url) = _export_file_path_and_url($page, $ext); my $subdir = $1 if $export_path =~ /(.*)\//; my @extra_args = @{ $extra_formats{$ext}->{extra} }; @@ -925,11 +706,6 @@ sub export_file { @args, @extra_args) or die "Could not open pipe for $ext: $!"; print EXPORT $json_content; close EXPORT or die "Could not close pipe for $ext: $!"; - - print "D: pandoc:export_file: Pandoc command: ", " ", $command, " ", '-f' => - 'json', " ", '-t' => $to_format, " ", '-o' => - $tmp_export_path, " ", @args, " ", @extra_args; - if ($indirect_pdf && $tmp_export_path ne $export_path) { my @latexmk_args = qw(-quiet -silent); if (grep { /xelatex/ } @extra_args) { @@ -969,12 +745,6 @@ sub remove_exported_file { if ($@) { warn "WARNING: remove_exported_file; page=$page, ext=$ext: $@\n"; } - - # DEBUG - print "D: pandoc:remove_exported_file: ", - "file removed for $page and $ext: $export_path.\n"; - # END - } } @@ -993,6 +763,7 @@ sub _export_file_path_and_url { return ($export_path, $export_url); } + ## compile_string and unwrap_c are used to make the meta data structures ## easier to work with for perl. |