Replace "wikilinks" links
with absolute links to wikipedia and wikibooks. Fix #2
This commit is contained in:
parent
181c366690
commit
0c45391362
|
|
@ -20,9 +20,21 @@ procedure Aqs2mdx is
|
||||||
function Traverse (Blocks : League.JSON.Arrays.JSON_Array)
|
function Traverse (Blocks : League.JSON.Arrays.JSON_Array)
|
||||||
return League.JSON.Arrays.JSON_Array;
|
return League.JSON.Arrays.JSON_Array;
|
||||||
|
|
||||||
|
function Traverse_List (List : League.JSON.Arrays.JSON_Array)
|
||||||
|
return League.JSON.Arrays.JSON_Array;
|
||||||
|
|
||||||
function Traverse_Block (Block : League.JSON.Objects.JSON_Object)
|
function Traverse_Block (Block : League.JSON.Objects.JSON_Object)
|
||||||
return League.JSON.Arrays.JSON_Array;
|
return League.JSON.Arrays.JSON_Array;
|
||||||
|
|
||||||
|
function Traverse_Link (Block : League.JSON.Objects.JSON_Object)
|
||||||
|
return League.JSON.Values.JSON_Value;
|
||||||
|
|
||||||
|
Wiki : constant League.Strings.Universal_String :=
|
||||||
|
+"https://en.wikipedia.org/wiki/";
|
||||||
|
|
||||||
|
Wikibook : constant League.Strings.Universal_String :=
|
||||||
|
+"https://en.wikibooks.org/wiki/";
|
||||||
|
|
||||||
---------------
|
---------------
|
||||||
-- Read_JSON --
|
-- Read_JSON --
|
||||||
---------------
|
---------------
|
||||||
|
|
@ -60,6 +72,7 @@ procedure Aqs2mdx is
|
||||||
declare
|
declare
|
||||||
Block : constant League.JSON.Objects.JSON_Object :=
|
Block : constant League.JSON.Objects.JSON_Object :=
|
||||||
Blocks (J).To_Object;
|
Blocks (J).To_Object;
|
||||||
|
|
||||||
Result : constant League.JSON.Arrays.JSON_Array :=
|
Result : constant League.JSON.Arrays.JSON_Array :=
|
||||||
Traverse_Block (Block);
|
Traverse_Block (Block);
|
||||||
begin
|
begin
|
||||||
|
|
@ -87,8 +100,10 @@ procedure Aqs2mdx is
|
||||||
declare
|
declare
|
||||||
Content : constant League.JSON.Arrays.JSON_Array :=
|
Content : constant League.JSON.Arrays.JSON_Array :=
|
||||||
Block (+"c").To_Array;
|
Block (+"c").To_Array;
|
||||||
|
|
||||||
Rows : constant League.JSON.Arrays.JSON_Array :=
|
Rows : constant League.JSON.Arrays.JSON_Array :=
|
||||||
Content (5).To_Array;
|
Content (5).To_Array;
|
||||||
|
|
||||||
Columns : constant League.JSON.Arrays.JSON_Array :=
|
Columns : constant League.JSON.Arrays.JSON_Array :=
|
||||||
Rows (1).To_Array;
|
Rows (1).To_Array;
|
||||||
begin
|
begin
|
||||||
|
|
@ -117,13 +132,95 @@ procedure Aqs2mdx is
|
||||||
then
|
then
|
||||||
-- Drop toppest 'Introduction' section header
|
-- Drop toppest 'Introduction' section header
|
||||||
null;
|
null;
|
||||||
else
|
|
||||||
|
elsif Block (+"t").To_String.To_Wide_Wide_String = "Link" then
|
||||||
|
List.Append (Traverse_Link (Block));
|
||||||
|
|
||||||
|
elsif Block (+"c").To_Array.Length > 0 then
|
||||||
|
declare
|
||||||
|
-- Traverse nested blocks
|
||||||
|
Copy : League.JSON.Objects.JSON_Object := Block;
|
||||||
|
begin
|
||||||
|
Copy.Insert
|
||||||
|
(+"c", Traverse_List (Block (+"c").To_Array).To_JSON_Value);
|
||||||
|
|
||||||
|
List.Append (Copy.To_JSON_Value);
|
||||||
|
end;
|
||||||
|
|
||||||
|
else -- Something else (if any?)
|
||||||
List.Append (Block.To_JSON_Value);
|
List.Append (Block.To_JSON_Value);
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
return List;
|
return List;
|
||||||
end Traverse_Block;
|
end Traverse_Block;
|
||||||
|
|
||||||
|
-------------------
|
||||||
|
-- Traverse_Link --
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
function Traverse_Link (Block : League.JSON.Objects.JSON_Object)
|
||||||
|
return League.JSON.Values.JSON_Value
|
||||||
|
is
|
||||||
|
Copy : League.JSON.Objects.JSON_Object := Block;
|
||||||
|
Args : League.JSON.Arrays.JSON_Array := Copy (+"c").To_Array;
|
||||||
|
Fix : League.JSON.Arrays.JSON_Array := Args (3).To_Array;
|
||||||
|
Link : League.Strings.Universal_String := Fix (1).To_String;
|
||||||
|
begin
|
||||||
|
if Fix (2).To_String.To_Wide_Wide_String = "wikilink" then
|
||||||
|
if Link.Starts_With ("w:") then
|
||||||
|
Link := Wiki & Link.Tail_From (3);
|
||||||
|
else
|
||||||
|
Link := Wikibook & Link;
|
||||||
|
end if;
|
||||||
|
|
||||||
|
Fix.Replace (1, League.JSON.Values.To_JSON_Value (Link));
|
||||||
|
Fix.Replace (2, League.JSON.Values.To_JSON_Value (+""));
|
||||||
|
Args.Replace (3, Fix.To_JSON_Value);
|
||||||
|
Copy.Insert (+"c", Args.To_JSON_Value);
|
||||||
|
end if;
|
||||||
|
|
||||||
|
return Copy.To_JSON_Value;
|
||||||
|
end Traverse_Link;
|
||||||
|
|
||||||
|
-------------------
|
||||||
|
-- Traverse_List --
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
function Traverse_List (List : League.JSON.Arrays.JSON_Array)
|
||||||
|
return League.JSON.Arrays.JSON_Array
|
||||||
|
is
|
||||||
|
Result : League.JSON.Arrays.JSON_Array;
|
||||||
|
begin
|
||||||
|
for J in 1 .. List.Length loop
|
||||||
|
declare
|
||||||
|
Item : constant League.JSON.Values.JSON_Value := List (J);
|
||||||
|
begin
|
||||||
|
if Item.Is_Object then
|
||||||
|
declare
|
||||||
|
Block : constant League.JSON.Objects.JSON_Object :=
|
||||||
|
Item.To_Object;
|
||||||
|
|
||||||
|
Blocks : constant League.JSON.Arrays.JSON_Array :=
|
||||||
|
Traverse_Block (Block);
|
||||||
|
begin
|
||||||
|
for K in 1 .. Blocks.Length loop
|
||||||
|
Result.Append (Blocks (K));
|
||||||
|
end loop;
|
||||||
|
end;
|
||||||
|
|
||||||
|
elsif Item.Is_Array then
|
||||||
|
Result.Append (Traverse_List (Item.To_Array).To_JSON_Value);
|
||||||
|
|
||||||
|
else
|
||||||
|
Result.Append (Item);
|
||||||
|
|
||||||
|
end if;
|
||||||
|
end;
|
||||||
|
end loop;
|
||||||
|
|
||||||
|
return Result;
|
||||||
|
end Traverse_List;
|
||||||
|
|
||||||
Doc : League.JSON.Documents.JSON_Document;
|
Doc : League.JSON.Documents.JSON_Document;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user