168
回編集
タグ: 取り消し |
(エラー修正) |
||
9行目: | 9行目: | ||
end | end | ||
function | function each_utf8(text) | ||
local i=1 | |||
return function() | |||
if i>#text then | |||
-- 終了 | |||
return | |||
end | |||
local b=string.byte(text, i) | |||
if b==0 then | |||
-- eof | |||
return | |||
elseif b<128 then | |||
-- ascii | |||
local m=string.sub(text, i, i) | |||
i=i+1 | |||
return m | |||
elseif b<192 then | |||
assert(false, 'invalid byte') | |||
return | |||
elseif b<224 then | |||
-- 2bytes | |||
local m=string.sub(text, i, i+1) | |||
i=i+2 | |||
return m | |||
elseif b<240 then | |||
-- 3bytes(japanese multibyte) | |||
local m=string.sub(text, i, i+2) | |||
i=i+3 | |||
return m | |||
elseif b<248 then | |||
-- 4bytes | |||
local m=string.sub(text, i, i+3) | |||
i=i+4 | |||
return m | |||
elseif b<252 then | |||
-- 5bytes | |||
local m=string.sub(text, i, i+4) | |||
i=i+5 | |||
return m | |||
elseif b<254 then | |||
-- 6bytes | |||
local m=string.sub(text, i, i+5) | |||
i=i+6 | |||
return m | |||
else | |||
assert(false, 'unknown') | |||
return | |||
end | |||
end | |||
end | end | ||