]> xenbits.xensource.com Git - people/jgross/xen.git/commitdiff
docs-parse-support-md: Prepare for coping with pandoc versions
authorIan Jackson <ian.jackson@eu.citrix.com>
Tue, 9 Jun 2020 11:21:48 +0000 (12:21 +0100)
committerIan Jackson <ian.jackson@eu.citrix.com>
Tue, 9 Jun 2020 13:05:49 +0000 (14:05 +0100)
Different pandoc versions generate, and expect, a different toplevel
structure for their json output and inpout.  Newer pandoc's toplevel
is a hash.  We are going to want to support this.  We can tell what
kind of output we should produce by looking at the input we got (which
itself came from pandoc).  So:

 * Make space for code to read toplevel objects which are not arrays.
   Currently this code is absent and we just die explicitly (rather
   than dying because we tried to use a hashref as an array ref).

 * Move generation of the toplevel json structure out of
   pandoc2html_inline, and abstract it away through a subref which is
   set up when we read the input file.

This is just prep work.  No functional change other than a change to
an error message.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
Release-acked-by: Paul Durrant <paul@xen.org>
docs/parse-support-md

index 84f0a96a0fc8e1c84b35139bc75512ff4fbecd19..b9978bfb4df6d206fbde896d7d40d5517f2f0914 100755 (executable)
@@ -232,6 +232,8 @@ sub r_content ($) {
     }
 }
 
+our $pandoc_toplevel_constructor;
+
 sub r_toplevel ($) {
     my ($i) = @_;
 
@@ -241,9 +243,21 @@ sub r_toplevel ($) {
     $had_unknown = undef;
     $had_feature = undef;
 
-    foreach my $e (@$i) {
-        next unless ref $e eq 'ARRAY';
-        r_content $e;
+    my $blocks;
+    if (ref $i eq 'ARRAY') {
+       $pandoc_toplevel_constructor = sub {
+           my ($blocks) = @_;
+           return [
+                   { unMeta => { } },
+                   $blocks,
+                  ];
+       };
+       foreach my $e (@$i) {
+           next unless ref $e eq 'ARRAY';
+           r_content $e;
+       }
+    } else {
+       die;
     }
 }
 
@@ -274,10 +288,10 @@ sub pandoc2html_inline ($) {
     my ($content) = @_;
 
     my $json_fh = IO::File::new_tmpfile or die $!;
-    my $j = to_json([
-                     { unMeta => { } },
-                     [{ t => 'Para', c => $content }],
-                    ]) or die $!;
+
+    my $blocks = [{ t => 'Para', c => $content }];
+    my $data = $pandoc_toplevel_constructor->($blocks);
+    my $j = to_json($data) or die $!;
     print $json_fh $j;
     flush $json_fh or die $!;
     seek $json_fh,0,0 or die $!;