11/11/03 09:03:15.09 I5e3eJcR
禁則処理は行で分けるんじゃなくて、最初は文字で分けるべきな。
local text = "なんか適当な、サンプル文章。" -- 表示したい文章
表示文に2バイト文字しか入らないことが保証されているなら、分割部分は簡単にできるな。
local letters = {} -- 分割した文字を入れるテーブル
-- 2バイト文字専用分割
for i=1, text:len()-1, 2 do
letters[#letters+1] = text:gsub(i, i+1)
end
半角文字も混じるようなら、文字コード調べるところからになるなあ。
function letter_length(letter) -- 文字を与えたら、その文字の長さを0か1で返す関数。半角なら0、全角なら1を返す。
local num = letter:byte() -- 先頭の文字の文字コードを取得。
if num < 127 then return 0 end
if num < 161 then return 1 end
if num < 224 then return 0 end
return 1
end
-- この関数はShift-JIS専用
local letters = {}
local cursor = 1
while cursor < text:len()+1 do
letters[#letters+1] = text:gsub(cursor, cursor+letter_length(text:gsub(cursor, cursor))
cursor = cursor + letters[#letters]:len()
end
どっちか使えば、文字列の分割は完了。
次は肝の禁則処理。