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

ナビゲーションに移動 検索に移動
エラー修正
( (トーク) による版 6719 を取り消し)
タグ: 取り消し
(エラー修正)
9行目: 9行目:
end
end


function p.each_utf8(frame)
function each_utf8(text)
local i = 1
  local i=1
str = frame.args[1]
  return function()
if i > #str then
    if i>#text then
return
      -- 終了
end
      return
local b = string.byte(frame.args[1],i)
    end
if b == 0 then
    local b=string.byte(text, i)
return
    if b==0 then
elseif b < 128 then
      -- eof
local m = string.sub(frame.args[1],i,i)
      return
i = i + 1
    elseif b<128 then
return m
      -- ascii
elseif b < 192 then
      local m=string.sub(text, i, i)
assert(false,"invalid byte")
      i=i+1
return
      return m
elseif b < 224 then
    elseif b<192 then
local m = string.sub(frame.args[1],i,i+1)
      assert(false, 'invalid byte')
i = i + 2
      return
return m
    elseif b<224 then
elseif b < 240 then
      -- 2bytes
local m = string.sub(frame.args[1],i,i+2)
      local m=string.sub(text, i, i+1)
i = i + 3
      i=i+2
return m
      return m
elseif b < 248 then
    elseif b<240 then
local m = string.sub(frame.args[1],i,i+3)
      -- 3bytes(japanese multibyte)
i = i + 4
      local m=string.sub(text, i, i+2)
return m
      i=i+3
elseif b < 252 then
      return m
local m = string.sub(frame.args[1],i,i+4)
    elseif b<248 then
i = i + 5
      -- 4bytes
return m
      local m=string.sub(text, i, i+3)
elseif b < 254 then
      i=i+4
local m = string.sub(frame.args[1],i,i+5)
      return m
i = i + 6
    elseif b<252 then
return m
      -- 5bytes
else
      local m=string.sub(text, i, i+4)
assert(false,"unknown")
      i=i+5
return
      return m
end
    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


案内メニュー