with AAA.Strings; with Ada.Strings.UTF_Encoding.Wide_Wide_Strings; use Ada.Strings.UTF_Encoding.Wide_Wide_Strings; with Ada.Wide_Wide_Text_IO; use Ada.Wide_Wide_Text_IO; package body Tools.Emoji_Classifier is First : Boolean := True; -------------- -- Classify -- -------------- procedure Classify (Line : WWString) is use AAA.Strings; begin if Line = "" or else Line (Line'First) = '#' then return; end if; declare Line8 : constant String := Encode (Line); -- To UTF8 Codes : constant Vector := Split (Line8, ';', Trim => True); Sepco : constant Vector := Split (Codes (1), '.'); Label : constant Vector := Split (Codes (2), '#', Trim => True); Info : Vector := Label; -- The emoji-data.txt file is UTF8 with plenty of non-ASCII content begin if Decode (Label (1)) = Target_Label then Put_Line (F.all, (if First then " " else " | ") & C (Sepco (1)) & (if Sepco.Length in 3 then " .. " & C (Sepco (3)) else "") ); Info.Delete_First; Put_Line (F.all, " -- " & Decode (Info.Flatten ('#'))); First := False; end if; end; end Classify; begin New_Line (F.all); Put_Line (F.all, " subtype " & Target_Label & " is WWChar"); Put_Line (F.all, " with Static_Predicate => " & Target_Label & " in"); end Tools.Emoji_Classifier;