-- PragmAda Reusable Component (PragmARC) -- Copyright (C) 2023 by PragmAda Software Engineering. All rights reserved. -- Released under the terms of the BSD 3-Clause license; see https://opensource.org/licenses -- ************************************************************************** -- -- Compare two Strings in title order, ignoring an initial article -- -- History: -- 2023 Sep 15 J. Carter V1.1--Require space in article string -- 2022 Aug 01 J. Carter V1.0--Initial version -- with Ada.Characters.Handling; package body PragmARC.Title_Comparisons is English_Article : Article_List; French_Article : Article_List; function English return Article_List is (English_Article); function French return Article_List is (French_Article); function Munged (Item : in String; Article : in Article_List) return String; -- Moves any initial Article in Item to the end function Munged (Item : in String; Article : in Article_List) return String is S : constant String := Ada.Characters.Handling.To_Basic (Ada.Characters.Handling.To_Lower (Item) ); begin -- Munged Check : for I in 1 .. Article.Last_Index loop Extract : declare A : constant String := Ada.Characters.Handling.To_Basic (Ada.Characters.Handling.To_Lower (Article.Element (I) ) ); begin -- Extract if S'Length > A'Length and then S (S'First .. S'First + A'Length - 1) = A then return S (S'First + A'Length .. S'Last) & ", " & A; end if; end Extract; end loop Check; return S; end Munged; function Less (Left : in String; Right : in String; Article : in Article_List := English) return Boolean is (Munged (Left, Article) < Munged (Right, Article) ); function Greater (Left : in String; Right : in String; Article : in Article_List := English) return Boolean is (Munged (Left, Article) > Munged (Right, Article) ); begin -- PragmARC.Title_Comparisons English_Article.Append (New_Item => "a "); English_Article.Append (New_Item => "an "); English_Article.Append (New_Item => "the "); French_Article.Append (New_Item => "un "); French_Article.Append (New_Item => "une "); French_Article.Append (New_Item => "le "); French_Article.Append (New_Item => "la "); French_Article.Append (New_Item => "les "); French_Article.Append (New_Item => "l'"); end PragmARC.Title_Comparisons;