3,314
回編集
編集の要約なし |
編集の要約なし |
||
7行目: | 7行目: | ||
function p.emcharnum(frame) | function p.emcharnum(frame) | ||
return string.len(frame.args[1]) / 3 | return string.len(frame.args[1]) / 3 | ||
end | |||
function each_utf8(frame) | |||
local i = 1 | |||
str = frame | |||
if i > #str then | |||
return | |||
end | |||
local b = string.byte(frame,i) | |||
if b == 0 then | |||
return | |||
elseif b < 128 then | |||
local m = string.sub(frame,i,i) | |||
i = i + 1 | |||
return m | |||
elseif b < 192 then | |||
assert(false,"invalid byte") | |||
return | |||
elseif b < 224 then | |||
local m = string.sub(frame,i,i+1) | |||
i = i + 2 | |||
return m | |||
elseif b < 240 then | |||
local m = string.sub(frame,i,i+2) | |||
i = i + 3 | |||
return m | |||
elseif b < 248 then | |||
local m = string.sub(frame,i,i+3) | |||
i = i + 4 | |||
return m | |||
elseif b < 252 then | |||
local m = string.sub(frame,i,i+4) | |||
i = i + 5 | |||
return m | |||
elseif b < 254 then | |||
local m = string.sub(frame,i,i+5) | |||
i = i + 6 | |||
return m | |||
else | |||
assert(false,"unknown") | |||
return | |||
end | |||
end | end | ||
function p.reverse(frame) | function p.reverse(frame) | ||
es = "" | |||
for st in each_utf8(frame) do | |||
es = st..es | |||
end | end | ||
return | return es | ||
end | end | ||
return p | return p |
回編集