Top Prev Next Up Down TEST

ExTau

An example of how the preprocessor changes code and what the change looks like

001| with Ada.Text_IO;
002| with Y2018.Text.Core; use Y2018.Text.Core;
003| with Y2018.Text.Core.Str; use Y2018.Text.Core.Str;
004| with Y2018.Text.Core.CVarPack; use Y2018.Text.Core.CVarPack;
005| with Y2018.Text.Jets.MatchPack;
006| with Y2018.Text.Jets.PatternPack;
007| --with DSECT;
008| procedure ExTau is
009| __y:CVar;
010| __function h(s:CVar) return CVar is
011| _____t:CFix:=""c & s;
012| _____r:CVar:=null_CVar;
013| __begin
014| _____for i in t'First(1) .. t'Last(1) loop
015| ________r:=r & "_" & CodePoint2Hex8CFix(t(i));
016| _____end loop;
017| _____return r;
018| __end h;
019| begin
020| __y:=null_CVar &"\a"c;
021| __Ada.Text_IO.Put_Line("a>" & y & "<" & h(y) );
022| __y:=null_CVar &"\A"c;
023| __Ada.Text_IO.Put_Line("A>" & y & "<" & h(y) );
024| __y:=null_CVar &"\b"c;
025| __Ada.Text_IO.Put_Line("b>" & y & "<" & h(y) );
026| __y:=null_CVar &"\B"c;
027| __Ada.Text_IO.Put_Line("B>" & y & "<" & h(y) );
028| __y:=null_CVar &"\c9"c;
029| __Ada.Text_IO.Put_Line("c>" & y & "<" & h(y) );
030| __y:=null_CVar &"\d"c;
031| __Ada.Text_IO.Put_Line("d>" & y & "<" & h(y) );
032| __y:=null_CVar &"\D"c;
033| __Ada.Text_IO.Put_Line("D>" & y & "<" & h(y) );
034| __y:=null_CVar &"\e"c;
035| __Ada.Text_IO.Put_Line("e>" & y & "<" & h(y) );
036| __y:=null_CVar &"\E"c;
037| __Ada.Text_IO.Put_Line("E>" & y & "<" & h(y) );
038| __y:=null_CVar &"\f"c;
039| __Ada.Text_IO.Put_Line("f>" & y & "<" & h(y) );
040| __y:=null_CVar &"\F"c;
041| __Ada.Text_IO.Put_Line("F>" & y & "<" & h(y) );
042| __y:=null_CVar &"\g"c;
043| __Ada.Text_IO.Put_Line("g>" & y & "<" & h(y) );
044| __y:=null_CVar &"\G"c;
045| __Ada.Text_IO.Put_Line("G>" & y & "<" & h(y) );
046| __y:=null_CVar &"\h"c;
047| __Ada.Text_IO.Put_Line("h>" & y & "<" & h(y) );
048| __y:=null_CVar &"\H"c;
049| __Ada.Text_IO.Put_Line("H>" & y & "<" & h(y) );
050| __y:=null_CVar &"\k"c;
051| __Ada.Text_IO.Put_Line("k>" & y & "<" & h(y) );
052| __y:=null_CVar &"\n"c;
053| __Ada.Text_IO.Put_Line("n>" & y & "<" & h(y) );
054| __y:=null_CVar &"\N"c;
055| __Ada.Text_IO.Put_Line("N>" & y & "<" & h(y) );
056| __y:=null_CVar &"\p{L}"c;
057| __Ada.Text_IO.Put_Line("p>" & y & "<" & h(y) );
058| __y:=null_CVar &"\P{L}"c;
059| __Ada.Text_IO.Put_Line("P>" & y & "<" & h(y) );
060| __y:=null_CVar &"\q"c;
061| __Ada.Text_IO.Put_Line("q>" & y & "<" & h(y) );
062| __y:=null_CVar &"\Q"c;
063| __Ada.Text_IO.Put_Line("Q>" & y & "<" & h(y) );
064| __y:=null_CVar &"\r"c; -- will generate carrige return CR
065| __Ada.Text_IO.Put_Line("r>" & y & "<" & h(y) );
066| __y:=null_CVar &"\R"c;
067| __Ada.Text_IO.Put_Line("R>" & y & "<" & h(y) );
068| __y:=null_CVar &"\s"c;
069| __Ada.Text_IO.Put_Line("s>" & y & "<" & h(y) );
070| __y:=null_CVar &"\S"c;
071| __Ada.Text_IO.Put_Line("S>" & y & "<" & h(y) );
072| __y:=null_CVar &"\t"c;
073| __Ada.Text_IO.Put_Line("t>" & y & "<" & h(y) );
074| __y:=null_CVar &"\T"c;
075| __Ada.Text_IO.Put_Line("T>" & y & "<" & h(y) );
076| __y:=null_CVar &"\u2654"c; -- WHITE KING
077| __Ada.Text_IO.Put_Line("u>" & y & "<" & h(y) );
078| __y:=null_CVar &"\U2654"c; -- WHITE KING
079| __Ada.Text_IO.Put_Line("U>" & y & "<" & h(y) );
080| __y:=null_CVar &"\v002655"c; -- WHITE QUEEN
081| __Ada.Text_IO.Put_Line("v>" & y & "<" & h(y) );
082| __y:=null_CVar &"\V002655"c; -- WHITE QUEEN
083| __Ada.Text_IO.Put_Line("V>" & y & "<" & h(y) );
084| __y:=null_CVar &"\w"c;
085| __Ada.Text_IO.Put_Line("w>" & y & "<" & h(y) );
086| __y:=null_CVar &"\W"c;
087| __Ada.Text_IO.Put_Line("W>" & y & "<" & h(y) );
088| __y:=null_CVar &"\x3F"c; -- ? question mark
089| __Ada.Text_IO.Put_Line("x>" & y & "<" & h(y) );
090| __y:=null_CVar &"\X3F"c; -- ? question mark
091| __Ada.Text_IO.Put_Line("X>" & y & "<" & h(y) );
092| __y:=null_CVar &"\z"c;
093| __Ada.Text_IO.Put_Line("z>" & y & "<" & h(y) );
094| __y:=null_CVar &"\Z"c;
095| __Ada.Text_IO.Put_Line("Z>" & y & "<" & h(y) );
096| __y:=null_CVar &"\o123"c;
097| __Ada.Text_IO.Put_Line("o>" & y & "<" & h(y) );
098| __y:=null_CVar &"\O123"c;
099| __Ada.Text_IO.Put_Line("O>" & y & "<" & h(y) );
100| __y:=null_CVar &"\\\"c;
101| __Ada.Text_IO.Put_Line("(backslash)>" & y & "<" & h(y) );
102| end ExTau;

Result

Running export LD_LIBRARY_PATH=lib;bin/extau in TEST directory.
Procedure CodePoint2Hex8CFix(t(i)) is used for the translation to hexadecimal for every codepoint. Value '_______5C' is hexadecimal for '\' (backslash).

001| a>\a<_______5C_______61
002| A>\A<_______5C_______41
003| b><________8
004| B>\B<_______5C_______42
005| c>\c9<_______5C_______63_______39
006| d>\d<_______5C_______64
007| D>\D<_______5C_______44
008| e>\e<_______5C_______65
009| E>\E<_______5C_______45
010| f> <________C
011| F>\F<_______5C_______46
012| g>\g<_______5C_______67
013| G>\G<_______5C_______47
014| h>\h<_______5C_______68
015| H>\H<_______5C_______48
016| k>\k<_______5C_______6B
017| n>
018| <________A
019| N>\N<_______5C_______4E
020| p>\p{L}<_______5C_______70_______7B_______4C_______7D
021| P>\P{L}<_______5C_______50_______7B_______4C_______7D
022| q>\q<_______5C_______71
023| Q>\Q<_______5C_______51
024| r> <________D
025| R>\R<_______5C_______52
026| s>\s<_______5C_______73
027| S>\S<_______5C_______53
028| t> <________9
029| T>\T<_______5C_______54
030| u>♔<_____2654
031| U>\U2654<_______5C_______55_______32_______36_______35_______34
032| v>♕<_____2655
033| V>\V002655<_______5C_______56_______30_______30_______32_______36_______35_______35
034| w>\w<_______5C_______77
035| W>\W<_______5C_______57
036| x>?<_______3F
037| X>\X3F<_______5C_______58_______33_______46
038| z>\z<_______5C_______7A
039| Z>\Z<_______5C_______5A
040| o>\o123<_______5C_______6F_______31_______32_______33
041| O>\O123<_______5C_______4F_______31_______32_______33
042| (backslash)>\\<_______5C_______5C

Rows in red:
003 : backspace
010 : form feed
017 and 018 : line feed (test on a Linux platform)
024 : cariage return
030 : hexadecimal value of WHITE KING
032 : hexadecimal value of WHITE QUEEN
036 : hexadecimal value of question mark
042 : three backslashes changes to two, first two is a backslash pair and the third is not folled by one of the reserved characters

This test also shows that one backslash can be used as is if it is not folled by any of characters 'b', 'f', 'n', 'r', 'u', 'v', 'x' and '\'.