11-- $Id: testes/pm.lua $
22-- See Copyright Notice in file all.lua
33
4+ -- UTF-8 file
5+
6+
47print (' testing pattern matching' )
58
69local function checkerror (msg , f , ...)
@@ -50,6 +53,19 @@ assert(f('aLo_ALO', '%a*') == 'aLo')
5053
5154assert (f (" \n\r *&\n\r xuxu \n\n " , " %g%g%g+" ) == " xuxu" )
5255
56+
57+ -- Adapt a pattern to UTF-8
58+ local function PU (p )
59+ -- break '?' into each individual byte of a character
60+ p = string.gsub (p , " (" .. utf8.charpattern .. " )%?" , function (c )
61+ return string.gsub (c , " ." , " %0?" )
62+ end )
63+ -- change '.' to utf-8 character patterns
64+ p = string.gsub (p , " %." , utf8.charpattern )
65+ return p
66+ end
67+
68+
5369assert (f (' aaab' , ' a*' ) == ' aaa' );
5470assert (f (' aaa' , ' ^.*$' ) == ' aaa' );
5571assert (f (' aaa' , ' b*' ) == ' ' );
@@ -73,16 +89,16 @@ assert(f('aaa', '^.-$') == 'aaa')
7389assert (f (' aabaaabaaabaaaba' , ' b.*b' ) == ' baaabaaabaaab' )
7490assert (f (' aabaaabaaabaaaba' , ' b.-b' ) == ' baaab' )
7591assert (f (' alo xo' , ' .o$' ) == ' xo' )
76- assert (f (' \n isto é assim' , ' %S%S*' ) == ' isto' )
77- assert (f (' \n isto é assim' , ' %S*$' ) == ' assim' )
78- assert (f (' \n isto é assim' , ' [a-z]*$' ) == ' assim' )
92+ assert (f (' \n isto é assim' , ' %S%S*' ) == ' isto' )
93+ assert (f (' \n isto é assim' , ' %S*$' ) == ' assim' )
94+ assert (f (' \n isto é assim' , ' [a-z]*$' ) == ' assim' )
7995assert (f (' um caracter ? extra' , ' [^%sa-z]' ) == ' ?' )
8096assert (f (' ' , ' a?' ) == ' ' )
81- assert (f (' á' , ' á?' ) == ' á' )
82- assert (f (' ábl' , ' á?b?l?' ) == ' ábl' )
83- assert (f (' ábl' , ' á?b?l?' ) == ' ' )
97+ assert (f (' á' , PU ' á?' ) == ' á' )
98+ assert (f (' ábl' , PU ' á?b?l?' ) == ' ábl' )
99+ assert (f (' ábl' , PU ' á?b?l?' ) == ' ' )
84100assert (f (' aa' , ' ^aa?a?a' ) == ' aa' )
85- assert (f (' ]]]áb' , ' [^]]' ) == ' á ' )
101+ assert (f (' ]]]áb' , ' [^]]+ ' ) == ' áb ' )
86102assert (f (" 0alo alo" , " %x*" ) == " 0a" )
87103assert (f (" alo alo" , " %C+" ) == " alo alo" )
88104print (' +' )
@@ -136,28 +152,28 @@ assert(string.match("alo xyzK", "(%w+)K") == "xyz")
136152assert (string.match (" 254 K" , " (%d*)K" ) == " " )
137153assert (string.match (" alo " , " (%w*)$" ) == " " )
138154assert (not string.match (" alo " , " (%w+)$" ))
139- assert (string.find (" (álo)" , " %(á" ) == 1 )
140- local a , b , c , d , e = string.match (" âlo alo" , " ^(((.).).* (%w*))$" )
141- assert (a == ' âlo alo' and b == ' âl' and c == ' â' and d == ' alo' and e == nil )
155+ assert (string.find (" (álo)" , " %(á" ) == 1 )
156+ local a , b , c , d , e = string.match (" âlo alo" , PU " ^(((.).). (%w*))$" )
157+ assert (a == ' âlo alo' and b == ' âl' and c == ' â' and d == ' alo' and e == nil )
142158a , b , c , d = string.match (' 0123456789' , ' (.+(.?)())' )
143159assert (a == ' 0123456789' and b == ' ' and c == 11 and d == nil )
144160print (' +' )
145161
146- assert (string.gsub (' ülo ülo' , ' ü' , ' x' ) == ' xlo xlo' )
147- assert (string.gsub (' alo úlo ' , ' +$' , ' ' ) == ' alo úlo' ) -- trim
162+ assert (string.gsub (' ülo ülo' , ' ü' , ' x' ) == ' xlo xlo' )
163+ assert (string.gsub (' alo úlo ' , ' +$' , ' ' ) == ' alo úlo' ) -- trim
148164assert (string.gsub (' alo alo ' , ' ^%s*(.-)%s*$' , ' %1' ) == ' alo alo' ) -- double trim
149165assert (string.gsub (' alo alo \n 123\n ' , ' %s+' , ' ' ) == ' alo alo 123 ' )
150- local t = " abç d"
151- a , b = string.gsub (t , ' (.)' , ' %1@' )
152- assert (' @ ' .. a == string.gsub ( t , ' ' , ' @ ' ) and b == 5 )
153- a , b = string.gsub (' abçd' , ' (.)' , ' %0@' , 2 )
154- assert (a == ' a@b@çd' and b == 2 )
166+ local t = " abç d"
167+ a , b = string.gsub (t , PU ' (.)' , ' %1@' )
168+ assert (a == " a@b@ç@ @d@ " and b == 5 )
169+ a , b = string.gsub (' abçd' , PU ' (.)' , ' %0@' , 2 )
170+ assert (a == ' a@b@çd' and b == 2 )
155171assert (string.gsub (' alo alo' , ' ()[al]' , ' %1' ) == ' 12o 56o' )
156172assert (string.gsub (" abc=xyz" , " (%w*)(%p)(%w+)" , " %3%2%1-%0" ) ==
157173 " xyz=abc-abc=xyz" )
158174assert (string.gsub (" abc" , " %w" , " %1%0" ) == " aabbcc" )
159175assert (string.gsub (" abc" , " %w+" , " %0%1" ) == " abcabc" )
160- assert (string.gsub (' áéí' , ' $' , ' \0 óú' ) == ' áéí\0 óú' )
176+ assert (string.gsub (' áéí' , ' $' , ' \0 óú' ) == ' áéí\0 óú' )
161177assert (string.gsub (' ' , ' ^' , ' r' ) == ' r' )
162178assert (string.gsub (' ' , ' $' , ' r' ) == ' r' )
163179print (' +' )
188204end
189205
190206function f (a ,b ) return string.gsub (a ,' .' ,b ) end
191- assert (string.gsub (" trocar tudo em |teste|b| é |beleza|al|" , " |([^|]*)|([^|]*)|" , f ) ==
192- " trocar tudo em bbbbb é alalalalalal" )
207+ assert (string.gsub (" trocar tudo em |teste|b| é |beleza|al|" , " |([^|]*)|([^|]*)|" , f ) ==
208+ " trocar tudo em bbbbb é alalalalalal" )
193209
194210local function dostring (s ) return load (s , " " )() or " " end
195211assert (string.gsub (" alo $a='x'$ novamente $return a$" ,
0 commit comments