モジュール:文字列

提供:WikiWiki
2年1月27日 (W) 18:22時点におけるYuito (トーク | 投稿記録)による版 (エラー修正)
ナビゲーションに移動 検索に移動

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

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