flip { var %res, %spc, %len = $len($$1-), %i = 1 while (%i <= %len) { var %chr = $mid($1-,%i,4), %chrlen = $utf8len(%chr) %chr = $left(%chr, %chrlen) if (%chr == $chr(32)) { %spc = $true | inc %i | continue } %chr = $flipchr(%chr) if (%spc) { %res = %chr %res | %spc = $false } else %res = %chr $+ %res | inc %i %chrlen } say %res } flipchr { if (($1 == l) || ($1 == o) || ($1 == s) || $& ($1 == x) || ($1 == z)) return $lower($1) var %p1 = b q var %p2 = d p var %p3 = n u var %p4 = a $+($chr(201),$chr(144)) var %p5 = c $+($chr(201),$chr(148)) var %p6 = e $+($chr(199),$chr(157)) var %p7 = f $+($chr(201),$chr(159)) var %p8 = g $+($chr(198),$chr(131)) var %p9 = h $+($chr(201),$chr(165)) var %p10 = i $+($chr(196),$chr(177)) var %p11 = j $+($chr(201),$chr(190)) var %p12 = k $+($chr(202),$chr(158)) var %p13 = m $+($chr(201),$chr(175)) var %p14 = r $+($chr(201),$chr(185)) var %p15 = t $+($chr(202),$chr(135)) var %p16 = v $+($chr(202),$chr(140)) var %p17 = w $+($chr(202),$chr(141)) var %p18 = y $+($chr(202),$chr(142)) var %p19 = . $+($chr(203),$chr(153)) var %p20 = $chr(91) $chr(93) var %p21 = ( ) var %p22 = $chr(123) $chr(125) var %p23 = ? $+($chr(194),$chr(191)) var %p24 = ! $+($chr(194),$chr(161)) var %p25 = ' $chr(44) var %p26 = < > var %p27 = _ $+($chr(226),$chr(128),$chr(190)) var %p28 = $chr(59) $+($chr(216),$chr(155)) var %chr = $1, %i = 1 while ($($+(%,p,%i),2)) { tokenize 32 $v1 if ($1 == %chr) return $2 if ($2 == %chr) return $1 inc %i } return %chr } utf8len { if ($asc($1) < 128) return 1 | var %res = 1 if (($v1 >= 194) && ($v1 <= 223)) %res = 2 elseif (($v1 >= 224) && ($v1 <= 239)) %res = 3 elseif (($v1 >= 240) && ($v1 <= 243)) %res = 4 ; validate the other bytes var %i = 2 while (%i <= %res) { if (($asc($mid($1,%i,1)) < 128) || ($v1 > 191)) { return 1 } | inc %i } | return %res }