ルビのない漢字を指摘するフィルター

あるゲームの開発に使う用途のスクリプトです。

機能

表示しようとする文章に漢字が含まれ、かつその漢字にルビが振っていなければ、その文章を別ファイルに出力し、かつ、ルビの下に印("^^")をつけるものです。
「全ての漢字にルビを振る」仕様のゲームなので、事前チェック用に作りました。

注意点

nsluaのluacall機能を使っています。独自にnsluaを使っている場合、導入は自分で考えてください。
そうでなければ、以下の設置方法に従って設置してください。
また、文字列変数の1000番を使います。もし、元々のスクリプトで1000番の文字列変数を使っている場合は、system.luaの最後の方の2行を書き換えて、使っていない番号に変更してください。

設置方法

除去方法

  • system.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が作られます。

 (死/し)(体/たい)は動き(続/つづ)ける。
                    ^^                 

 (両/りょう)手で(地/じ)(面/めん)を(押/お)して、(腕/うで)の(力/ちから)だけで(上/じょう)(半/はん)(身/しん)を(持/も)ちあげた。(正/せい)(座/ざ)になった。セーラー(服/ふく)のタイが(美/み)(鹿/か)とむきあっていた。後(頭/とう)(部/ぶ)からひざまで(伸/の)びた(黒/くろ)(髪/かみ)が(美/み)(鹿/か)を(見/み)ていた。\
             ^^                                                                                                                                                                                                ^^                                                                                           

折り返しなし、固定ピッチフォントで見ると、どこにルビのない漢字があるかわかるようにしています。