モジュール:文字列
ナビゲーションに移動
検索に移動
現時点で二つの関数が存在します。
関数名 | 引数1 | 出力 | 使用例 |
---|---|---|---|
bytenum | あらゆる文字列 | バイト数(半角文字のみを入力した場合、文字数に等しい) | *{{#invoke:文字列|bytenum|WikiWiki is the best.}} : 21
|
emcharnum | 全角文字列 | 文字数 | *{{#invoke:文字列|emcharnum|隠るとも思ほえなくに所置く時しなければ薬あたふる}} : 24
|
each_utf8 | |||
reverse | あらゆる文字列 | 文字列をあべこべにした文字列 | *{{#invoke:文字列|reverse|今日もいい天気ですね。}} : 。ねすで気天いいも日今
|
timestamp | 14桁の数字 | 単位(年月日時分秒)付き日時表示 | *{{#invoke:文字列|timestamp|{{CURRENTTIMESTAMP}}}} : スクリプトエラー: 関数「timestamp」は存在しません。
|
deletedefaultsort | 「{{defaultsort:--}}」を含む文字列 | 「{{defaultsort:--}}」を除いた文字列 | *{{#invoke:文字列|deletedefaultsort|迷羊、迷羊。{{defaultsort:さんしろう}}}} : スクリプトエラー: 関数「deletedefaultsort」は存在しません。
|
index |
local p = {}
function p.bytenum(frame)
return string.len(frame.args[1])
end
function p.emcharnum(frame)
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
function p.reverse(frame)
es = ""
for v in each_utf8(frame.args[1]) do
es = v..es
end
return es
end
return p