This script allows to iterate over whole characters in a string even if they're multibyte.
Example and Comparison:
This will print:
And here is the code:
Example and Comparison:
JASS:
local string test = "aäöo"
local UTF8_Iterator it = UTF8_Iterator.create(test)
local integer i = 0
loop
exitwhen not it.hasNext()
call BJDebugMsg(I2S(i) +" "+ it.next())
set i = i+1
endloop
set i = 0
loop
exitwhen i == StringLength(test)
call BJDebugMsg(I2S(i) +" "+ SubString(test, i, i+1))
set i = i +1
endloop
This will print:
Code:
0: a
1: ä
2: ö
3: o
0: a
1:
2:
3:
4:
5: o
And here is the code:
JASS:
library UTF8 initializer init
globals
private integer array offset
endglobals
private function hash takes string s returns integer
return StringHash(s) / 1366202 + 1572
endfunction
public struct Iterator
private integer length
private integer off
private string input
static method create takes string input returns thistype
local thistype this = allocate()
set .length = StringLength(input)
set .input = input
set .off = 0
return this
endmethod
method hasNext takes nothing returns boolean
return .off < .length
endmethod
method next takes nothing returns string
local string ret = SubString(.input, .off, .off+1)
local integer t = .off + offset[hash(ret)]
set ret = SubString(.input, .off, t)
set .off = t
return ret
endmethod
endstruct
private function init takes nothing returns nothing
set offset[753] = 1
set offset[703] = 1
set offset[2592] = 1
set offset[2534] = 1
set offset[2146] = 1
set offset[2119] = 1
set offset[2512] = 1
set offset[301] = 1
set offset[1466] = 1
set offset[1681] = 1
set offset[2442] = 1
set offset[372] = 1
set offset[2075] = 1
set offset[694] = 1
set offset[1222] = 1
set offset[1184] = 1
set offset[1599] = 1
set offset[1223] = 1
set offset[2330] = 1
set offset[2459] = 1
set offset[2699] = 1
set offset[2843] = 1
set offset[663] = 1
set offset[1657] = 1
set offset[647] = 1
set offset[207] = 1
set offset[737] = 1
set offset[1676] = 1
set offset[710] = 1
set offset[1671] = 1
set offset[413] = 1
set offset[243] = 1
set offset[375] = 1
set offset[3026] = 1
set offset[2035] = 1
set offset[1573] = 1
set offset[1962] = 1
set offset[1544] = 1
set offset[1982] = 1
set offset[536] = 1
set offset[1426] = 1
set offset[1470] = 1
set offset[1446] = 1
set offset[3017] = 1
set offset[2134] = 1
set offset[3035] = 1
set offset[1374] = 1
set offset[2917] = 1
set offset[1395] = 1
set offset[2400] = 1
set offset[1098] = 1
set offset[947] = 1
set offset[1074] = 1
set offset[882] = 1
set offset[1081] = 1
set offset[1827] = 1
set offset[185] = 1
set offset[493] = 1
set offset[213] = 1
set offset[1779] = 1
set offset[138] = 1
set offset[1824] = 1
set offset[156] = 1
set offset[535] = 1
set offset[80] = 1
set offset[411] = 1
set offset[345] = 1
set offset[431] = 1
set offset[355] = 1
set offset[2009] = 1
set offset[2150] = 1
set offset[1980] = 1
set offset[382] = 1
set offset[2036] = 1
set offset[392] = 1
set offset[2038] = 1
set offset[333] = 1
set offset[2100] = 1
set offset[2080] = 1
set offset[2161] = 1
set offset[2194] = 1
set offset[2193] = 1
set offset[2158] = 1
set offset[2126] = 1
set offset[2175] = 1
set offset[824] = 1
set offset[2262] = 1
set offset[1176] = 1
set offset[511] = 1
set offset[1547] = 1
set offset[137] = 1
set offset[1912] = 1
set offset[2917] = 1
set offset[2516] = 1
set offset[2188] = 1
set offset[2934] = 1
set offset[403] = 1
set offset[411] = 1
set offset[345] = 1
set offset[431] = 1
set offset[355] = 1
set offset[2009] = 1
set offset[2150] = 1
set offset[1980] = 1
set offset[382] = 1
set offset[2036] = 1
set offset[392] = 1
set offset[2038] = 1
set offset[333] = 1
set offset[2100] = 1
set offset[2080] = 1
set offset[2161] = 1
set offset[2194] = 1
set offset[2193] = 1
set offset[2158] = 1
set offset[2126] = 1
set offset[2175] = 1
set offset[824] = 1
set offset[2262] = 1
set offset[1176] = 1
set offset[511] = 1
set offset[1547] = 1
set offset[137] = 1
set offset[1321] = 1
set offset[1895] = 1
set offset[903] = 1
set offset[167] = 1
set offset[186] = 1
set offset[1304] = 1
set offset[1467] = 1
set offset[322] = 1
set offset[1116] = 1
set offset[640] = 1
set offset[2317] = 1
set offset[2640] = 1
set offset[1898] = 1
set offset[1944] = 1
set offset[433] = 1
set offset[3062] = 1
set offset[806] = 1
set offset[2696] = 1
set offset[2777] = 1
set offset[766] = 1
set offset[94] = 1
set offset[1631] = 1
set offset[2418] = 1
set offset[3142] = 1
set offset[2586] = 1
set offset[632] = 1
set offset[2159] = 1
set offset[2517] = 1
set offset[1746] = 1
set offset[1036] = 1
set offset[2836] = 1
set offset[1890] = 1
set offset[2854] = 1
set offset[1862] = 1
set offset[2102] = 1
set offset[774] = 1
set offset[2059] = 1
set offset[744] = 1
set offset[1149] = 1
set offset[800] = 1
set offset[1182] = 1
set offset[19] = 1
set offset[1925] = 1
set offset[58] = 1
set offset[1906] = 1
set offset[871] = 1
set offset[2282] = 1
set offset[1332] = 1
set offset[2303] = 1
set offset[471] = 1
set offset[3086] = 1
set offset[489] = 1
set offset[3061] = 1
set offset[705] = 1
set offset[1680] = 1
set offset[1809] = 1
set offset[1690] = 1
set offset[1847] = 1
set offset[937] = 1
set offset[2689] = 1
set offset[927] = 1
set offset[2518] = 1
set offset[1220] = 1
set offset[2714] = 1
set offset[1151] = 1
set offset[2682] = 1
set offset[1945] = 1
set offset[1887] = 1
set offset[1972] = 1
set offset[1905] = 2
set offset[627] = 2
set offset[972] = 2
set offset[3010] = 2
set offset[1688] = 2
set offset[3018] = 2
set offset[1698] = 2
set offset[484] = 2
set offset[2196] = 2
set offset[475] = 2
set offset[1856] = 2
set offset[1231] = 2
set offset[1148] = 2
set offset[1248] = 2
set offset[1108] = 2
set offset[532] = 2
set offset[671] = 2
set offset[698] = 2
set offset[734] = 2
set offset[2352] = 2
set offset[3077] = 2
set offset[1542] = 2
set offset[3103] = 2
set offset[2085] = 2
set offset[97] = 2
set offset[1609] = 2
set offset[668] = 2
set offset[1849] = 2
set offset[2658] = 2
set offset[1685] = 2
set offset[678] = 2
set offset[2192] = 2
set offset[1101] = 3
set offset[2814] = 3
set offset[1683] = 3
set offset[805] = 3
set offset[2902] = 3
set offset[2869] = 3
set offset[1736] = 3
set offset[883] = 3
set offset[135] = 3
set offset[216] = 3
set offset[1] = 3
set offset[603] = 3
set offset[1150] = 3
set offset[2882] = 3
set offset[36] = 3
set offset[646] = 3
set offset[2789] = 4
set offset[2535] = 4
set offset[88] = 4
set offset[2970] = 4
set offset[2128] = 4
set offset[2523] = 4
set offset[171] = 4
set offset[2885] = 4
set offset[558] = 4
set offset[1240] = 4
set offset[315] = 4
set offset[597] = 4
set offset[1780] = 4
set offset[1375] = 4
set offset[275] = 4
set offset[956] = 4
endfunction
endlibrary
Last edited: