「モジュール:文字列」の版間の差分

提供:WikiWiki
ナビゲーションに移動 検索に移動
編集の要約なし
編集の要約なし
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)
s = frame.args[1]
es = ""
    m = string.sub(s,#s-2,#s)
for st in each_utf8(frame) do
    for i=#s-3,3,-3 do
         es = st..es
         m = m..string.sub(s,i-2,i)
     end
     end
     return m
     return es
end
end
return p
return p

2年1月27日 (W) 12:20時点における版

現時点で二つの関数が存在します。

関数名 引数1 出力 使用例
bytenum あらゆる文字列 バイト数(半角文字のみを入力した場合、文字数に等しい) *{{#invoke:文字列|bytenum|WikiWiki is the best.}}: 21
emcharnum 全角文字列 文字数 *{{#invoke:文字列|emcharnum|隠るとも思ほえなくに所置く時しなければ薬あたふる}}: 24
each_utf8
reverse あらゆる文字列 文字列をあべこべにした文字列 *{{#invoke:文字列|reverse|今日もいい天気ですね。}}: Lua エラー 55 行目: attempt to call a nil value
  • {{#invoke:文字列|reverse|命題「AならばB」の対偶は、「BでないならばAでない」}}: Lua エラー 55 行目: attempt to call a nil 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
	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

function p.reverse(frame)
	es = ""
	for st in each_utf8(frame) do
        es = st..es
    end
    return es
end
return p