モジュール:文字列
現時点で二つの関数が存在します。
関数名 | 引数1 | 出力 | 使用例 |
---|---|---|---|
bytenum | あらゆる文字列 | バイト数(半角文字のみを入力した場合、文字数に等しい) | *{{#invoke:文字列|bytenum|WikiWiki is the best.}} : 21
|
emcharnum | 全角文字列 | 文字数 | *{{#invoke:文字列|emcharnum|隠るとも思ほえなくに所置く時しなければ薬あたふる}} : 24
|
each_utf8 | |||
reverse | あらゆる文字列 | 文字列をあべこべにした文字列 | *{{#invoke:文字列|reverse|今日もいい天気ですね。}} : Lua エラー 55 行目: attempt to call a string value
|
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(frame)
local i = 1
str = frame.args[1]
if i > #str then
return
end
local b = string.byte(frame.args[1],i)
if b == 0 then
return
elseif b < 128 then
local m = string.sub(frame.args[1],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.args[1],i,i+1)
i = i + 2
return m
elseif b < 240 then
local m = string.sub(frame.args[1],i,i+2)
i = i + 3
return m
elseif b < 248 then
local m = string.sub(frame.args[1],i,i+3)
i = i + 4
return m
elseif b < 252 then
local m = string.sub(frame.args[1],i,i+4)
i = i + 5
return m
elseif b < 254 then
local m = string.sub(frame.args[1],i,i+5)
i = i + 6
return m
else
assert(false,"unknown")
return
end
end
function p.reverse(frame)
es = ""
for str in each_utf8(frame) do
es = str..es
end
return es
end
return p