Files
markdown/source/parser/implementation/markdown-implementation-lists.adb
2024-05-01 19:25:18 +03:00

87 lines
2.3 KiB
Ada

--
-- Copyright (C) 2021-2024, AdaCore
--
-- SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
--
with VSS.Characters;
with Markdown.Implementation.List_Items;
package body Markdown.Implementation.Lists is
--------------
-- Is_Loose --
--------------
function Is_Loose (Self : List'Class) return Boolean is
Ends_Blank : Boolean := False;
Result : Boolean := False;
begin
for Child of Self.Children loop
declare
Item : Markdown.Implementation.List_Items.List_Item renames
Markdown.Implementation.List_Items.List_Item (Child.all);
begin
Result := Item.Has_Blank_Line or Ends_Blank;
Ends_Blank := Item.Ends_With_Blank_Line;
exit when Result;
end;
end loop;
return Result;
end Is_Loose;
----------------
-- Is_Ordered --
----------------
function Is_Ordered (Self : List'Class) return Boolean is
First : Markdown.Implementation.List_Items.List_Item renames
Markdown.Implementation.List_Items.List_Item
(Self.Children.First_Element.all);
begin
return First.Is_Ordered;
end Is_Ordered;
-----------
-- Match --
-----------
function Match
(Self : List'Class;
Item : Abstract_Block_Access) return Boolean
is
use type VSS.Characters.Virtual_Character;
First : Markdown.Implementation.List_Items.List_Item renames
Markdown.Implementation.List_Items.List_Item
(Self.Children.First_Element.all);
Next : Markdown.Implementation.List_Items.List_Item renames
Markdown.Implementation.List_Items.List_Item (Item.all);
First_Marker : constant VSS.Strings.Virtual_String := First.Marker;
Next_Marker : constant VSS.Strings.Virtual_String := Next.Marker;
begin
return First_Marker.At_Last_Character.Element =
Next_Marker.At_Last_Character.Element;
end Match;
-----------
-- Start --
-----------
function Start (Self : List'Class) return Natural is
First : Markdown.Implementation.List_Items.List_Item renames
Markdown.Implementation.List_Items.List_Item
(Self.Children.First_Element.all);
begin
return First.Marker;
end Start;
end Markdown.Implementation.Lists;