/* String utils in Picat. Some are inspired by the pattern language if SNOBOL4. Test of string_utils.pi See string_utils.pi for more information. This Picat model was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import string_util. import util. main => go. go => % span SS1 = "abcdef ghijk", S1 = SS1.span("abcABC",M1), println([span=S1,matched=M1]), S2 = SS1.span("abc",M2a).span("def",M2b), println([span=S2,m2a=M2a,m2b=M2b]), % should not match S3 = SS1.span("x",M3a).span("def",M3b), println([span=S3,m2a=M3a,m2b=M3b]), TT = "unabstractedness", % "un" . a" . "b" . "stra" . "c" . "tedness" R = TT.breaks("a",T1).span("a",T2).breaks("b",T3).span("b",T4).breaks("c",T5).span("c",T6), TTT = [T1,T2,T3,T4,T5,T6,R].flatten(), println([t1=T1,t2=T2,t3=T3,t4=T4,t5=T5,t6=T6,r=R, ttt=TTT]), println([T2,T4,T6].flatten()), if [T2,T4,T6].flatten() == "abc" then println("It was a full match!") end, TT2 = "verbosity", % should not match R2 = TT2.breaks("a",T12).span("a",T22).breaks("b",T32).span("b",T42).breaks("c",T52).span("c",T62), TTT2 = [T12,T22,T32,T42,T52,T62,R2].flatten(), println([t12=T12,t22=T22,t32=T32,t42=T42,t52=T52,t62=T62,r=R2, ttt=TTT2]), println([T22,T42,T62].flatten()), if [T22,T42,T62].flatten() == "abc" then println("It was a full match!") else println("No match!") end, % breaks S4 = SS1.breaks(" ", M4), println([breaks=S4,m=M4]), SS2 = " starts with space", S5 = SS2.breaks(" ", M5), println([breaks=S5,m=M5]), % any SS6 = "abcdef ghijk", S6 = SS6.any("abcAbc", M6), println([any=S6,m=M6]), % notany SS7 = "abcdef ghijk", S7 = SS7.notany(" ", M7), println([notany=S7,m=M7]), % slen SS8 = "abcdef ghijk", S8 = SS8.slen(5,M8), println([slen=S8,m=M8]), S8b = SS8.slen(3,M8a).slen(3,M8b).slen(2,M8c), writeln(slen=[m8a=M8a,m8b=M8b,m8c=M8c,rest=S8b]), % match SS9 = "abcdef ghijk", S9 = SS9.match("abc",M9), println([match=S9,m=M9]), S9b = SS9.match("abd",M9b), println([match=S9b,m=M9b]), % lpad SS10 = "abcdef ghijk", S10 = SS10.lpad(20), println([lpad=S10,S10.length]), S10b = SS10.lpad(10), println([lpad=S10b,S10b.length]), % rpad SS11 = "abcdef ghijk", S11 = SS11.rpad(20), println([rpad=S11,S11.length]), S11b = SS11.lpad(10), println([rpad=S11b,S11b.length]), % ltrim SS12 = " after space ", S12 = SS12.ltrim(), println(ltrim=S12), % ltrim SS13 = " after space ", S13 = SS13.rtrim(), println([rtrim=S13,after]), % trim SS14 = " after space ", S14 = SS14.trim(), println([trim=S14,after]), nl.