ルビのない漢字を指摘するフィルター
あるゲームの開発に使う用途のスクリプトです。
機能
表示しようとする文章に漢字が含まれ、かつその漢字にルビが振っていなければ、その文章を別ファイルに出力し、かつ、ルビの下に印("^^")をつけるものです。
「全ての漢字にルビを振る」仕様のゲームなので、事前チェック用に作りました。
注意点
nsluaのluacall機能を使っています。独自にnsluaを使っている場合、導入は自分で考えてください。
そうでなければ、以下の設置方法に従って設置してください。
また、文字列変数の1000番を使います。もし、元々のスクリプトで1000番の文字列変数を使っている場合は、system.luaの最後の方の2行を書き換えて、使っていない番号に変更してください。
設置方法
- nslua.dllが、nsce.exeと同じフォルダにあるか確認する。
- system.luaファイルを作り、その中に以下のスクリプトをコピペして保存する。
- string.luaファイルを作り、その中に文字列操作ライブラリ - 永字八法のstring.luaの内容をコピペして保存する。
system.lua
-- system.lua NL_dofile("string.lua") NSExec("_luacall text") local fh = io.open("no_ruby.txt", "w") function NSCALL_text(text) -- 表示文を文字に分割。 local letters = text:separate_table() -- 下準備 local no_ruby = false local cursor = 1 local mode = 1 local funcs = {}; local check = {} for i, v in ipairs(letters) do check[i] = string.rep(" ", v:len()) end -- 1 freeモード funcs[1] = function() if letters[cursor] == "(" then mode = 2 -- rubyモード return end if letters[cursor]:is_kanji() then no_ruby = true check[cursor] = string.rep("^", letters[cursor]:len()) end cursor = cursor + 1 end -- 2 rubyモード funcs[2] = function() if letters[cursor] == ")" then mode = 1 -- freeモード end cursor = cursor + 1 end -- 表示文を確認していく。 while letters[cursor] ~= nil do funcs[mode]() end -- もし、ルビを振ってない漢字があれば、出力する。 if no_ruby then fh:write(text) fh:write("\n") fh:write(table.concat(check, "")) fh:write("\n\n") end -- 表示処理 NSSetStrValue(1000, text) NSExec("_puttext $1000") end
実行例
こんな漢字にno_ruby.txtが作られます。
(死/し)(体/たい)は動き(続/つづ)ける。 ^^ (両/りょう)手で(地/じ)(面/めん)を(押/お)して、(腕/うで)の(力/ちから)だけで(上/じょう)(半/はん)(身/しん)を(持/も)ちあげた。(正/せい)(座/ざ)になった。セーラー(服/ふく)のタイが(美/み)(鹿/か)とむきあっていた。後(頭/とう)(部/ぶ)からひざまで(伸/の)びた(黒/くろ)(髪/かみ)が(美/み)(鹿/か)を(見/み)ていた。\ ^^ ^^
折り返しなし、固定ピッチフォントで見ると、どこにルビのない漢字があるかわかるようにしています。