3,484
回編集
編集の要約なし |
編集の要約なし |
||
| (2人の利用者による、間の35版が非表示) | |||
| 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(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 | ||
function p.reverse(frame) | function p.reverse(frame) | ||
es = "" | |||
for v in each_utf8(frame.args[1]) do | |||
es = v..es | |||
end | |||
return es | |||
end | |||
function p.timestamp(frame) | |||
str = string.char(string.byte(frame.args[1],1,4)).."年"..string.char(string.byte(frame.args[1],5,6)).."月"..string.char(string.byte(frame.args[1],7,8)).."日"..string.char(string.byte(frame.args[1],9,10)).."時"..string.char(string.byte(frame.args[1],11,12)).."分"..string.char(string.byte(frame.args[1],13,14)).."秒" | |||
return str | |||
end | |||
function p.deletedefaultsort(cont) | |||
a,b = string.find(cont.args[1],"{{defaultsort:") | |||
str = "" | |||
if a then | |||
c,d = string.find(cont.args[1],"}}",b+1) | |||
str = string.char(cont.args[1],string.byte(cont.args[1],1,a-1))..string.char(cont.args[1],string.byte(cont.args[1],d+1,string.len(cont.args[1]))) | |||
else | |||
str = cont.args[1] | |||
end | |||
return str | |||
end | |||
function p.index(frame) | |||
s = "" | |||
if frame.args[3] then | |||
for i=0, frame.args[3] - frame.args[2] do | |||
s = s..each_utf8(frame.args[1])[frame.args[2]+i] | |||
end | |||
elseif frame.args[2] then | |||
for i=1, frame.args[2] do | |||
s = s..each_utf8(frame.args[1])[i] | |||
end | |||
elseif frame.args[1] then | |||
s = each_utf8(frame.args[1])[1] | |||
else | |||
assert(false,"引数を一つ以上入力してください。") | |||
end | end | ||
return | return s | ||
end | |||
function p.split(sep,trgt) | |||
if trgt == nil then return {} end | |||
local t = {} | |||
i = 1 | |||
for str in string.gmatch(trgt, "[^"..sep.."]+") do | |||
t[i] = str | |||
i = i + 1 | |||
end | |||
return t | |||
end | end | ||
return p | return p | ||
回編集