mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
docs-parse-support-md: Prepare for coping with pandoc versions
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>
This commit is contained in:
1 parent
f7039ee41b
commit
31a714d54f
1 file changed
+21
-7
+21
-7
@@ -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 $!;
|
||||
|
||||