Add an initial solution to the parsing of definition lists for MDX

MDX does not follow the 'standard' way of parsing defintion lists.
Instead, this commit adds a small filter that basically hacks some
html tags to the source definition list.
This commit is contained in:
Folkert Kevelam 2025-06-07 19:41:37 +02:00
parent 1a75f9620f
commit 384443692c
3 changed files with 101 additions and 2 deletions

View File

@ -188,6 +188,15 @@ procedure Aqs2mdx is
end if;
when Inline_Link =>
List.Append (Traverse_Link (Block));
when Block_DefinitionList =>
declare
Arr : League.JSON.Arrays.JSON_Array :=
Pandoc.Definition_List (Block);
begin
for I in 1 .. Arr.Length loop
List.Append (Arr(I));
end loop;
end;
when others =>
if Block (Pandoc.Content_String).To_Array.Length > 0 then
declare

View File

@ -1,7 +1,5 @@
pragma Ada_2022;
with League.JSON.Arrays;
package body Pandoc is
function Attr
@ -95,6 +93,88 @@ package body Pandoc is
return Block.To_JSON_Value;
end Div;
function HTML_Block (Text : League.Strings.Universal_String) return
League.JSON.Values.JSON_Value
is
Output : League.JSON.Objects.JSON_Object;
Content_Arr : League.JSON.Arrays.JSON_Array;
begin
Output.Insert (
Type_String,
League.JSON.Values.To_JSON_Value (+"RawBlock"));
Content_Arr.Append (
League.JSON.Values.To_JSON_Value (+"html"));
Content_Arr.Append (
League.JSON.Values.To_JSON_Value (Text));
Output.Insert (
Content_String,
Content_Arr.To_JSON_Value);
return Output.To_JSON_Value;
end HTML_Block;
function Plain (Inlines : League.JSON.Values.JSON_Value) return
League.JSON.Values.JSON_Value
is
Output : League.JSON.Objects.JSON_Object;
begin
Output.Insert (
Type_String,
League.JSON.Values.To_JSON_Value (+"Plain"));
Output.Insert (
Content_String,
Inlines);
return Output.To_JSON_Value;
end Plain;
function Definition_List (B : League.JSON.Objects.JSON_Object) return
League.JSON.Arrays.JSON_Array
is
Output : League.JSON.Arrays.JSON_Array;
Content : constant League.JSON.Arrays.JSON_Array :=
B (Content_String).To_Array;
begin
Output.Append (HTML_Block (+"<dl>"));
for I in 1 .. Content.Length loop
declare
Def_Item : constant League.JSON.Arrays.JSON_Array :=
Content (I).To_Array;
Def_Header : constant League.JSON.Arrays.JSON_Array :=
Def_Item (1).To_Array;
Def_Content : constant League.JSON.Arrays.JSON_Array :=
Def_Item (2).To_Array;
begin
Output.Append (HTML_Block (+"<dt>"));
Output.Append (Plain (Def_Header.To_JSON_Value));
Output.Append (HTML_Block (+"</dt><dd>"));
for J in 1 .. Def_Content.Length loop
declare
Def_Sub_Content : constant League.JSON.Arrays.JSON_Array :=
Def_Content (J).To_Array;
begin
for K in 1 .. Def_Sub_Content.Length loop
Output.Append (Def_Sub_Content (K));
end loop;
end;
end loop;
Output.Append (HTML_Block (+"</dd>"));
end;
end loop;
Output.Append (HTML_Block (+"</dl>"));
return Output;
end Definition_List;
function Get_Type (B : League.JSON.Objects.JSON_Object)
return Object_Type is (Type_Mapping (B (Type_String).To_String));

View File

@ -4,6 +4,7 @@ with League.JSON.Objects;
with League.Strings.Hash;
with League.Strings;
with League.JSON.Values;
with League.JSON.Arrays;
package Pandoc is
@ -75,6 +76,15 @@ package Pandoc is
Content : League.JSON.Values.JSON_Value)
return League.JSON.Values.JSON_Value;
function HTML_Block (Text : League.Strings.Universal_String)
return League.JSON.Values.JSON_Value;
function Plain (Inlines : League.JSON.Values.JSON_Value) return
League.JSON.Values.JSON_Value;
function Definition_List (B : League.JSON.Objects.JSON_Object) return
League.JSON.Arrays.JSON_Array;
Type_String : constant League.Strings.Universal_String := +"t";
Content_String : constant League.Strings.Universal_String := +"c";