모듈:일본어

하늘 (토론 | 기여)님의 2021년 4월 30일 (금) 17:27 판
설명문서 [편집] [역사] [새로고침]

삭제는 사용자들의 토론에 따라 결정됩니다.
다른 의견이 있으면 틀을 {{삭제보류}}로 바꿔 달아주시고, 토론 문서에서 문서의 삭제에 관해 토론해주세요.


삭제는 사용자들의 토론에 따라 결정됩니다.
다른 의견이 있으면 틀을 {{삭제보류}}로 바꿔 달아주시고, 토론 문서에서 문서의 삭제에 관해 토론해주세요.


연습장이나 사용자 문서에서 틀의 사용이나 수정을 연습할 수 있습니다.
분류는 /설명문서에 넣어주세요.

local jp = { }
local godan = {
	normal = { "く", "ぐ", "す", "つ", "ぬ", "ぶ", "む", "る", "う" },
	kusuruutsu = { "く", "す", "つ", "る", "う" },
	masu   = { "き", "ぎ", "し", "ち", "に", "び", "み", "り", "い" },
	te     = { "い", "い", "し", "っ", "ん", "ん", "ん", "っ", "っ" },
	teConj = { "て", "で", "て", "て", "で", "で", "で", "て", "て" },
	taConj = { "た", "だ", "た", "た", "だ", "だ", "だ", "た", "た" },
	nai    = { "か", "が", "さ", "た", "な", "ば", "ま", "ら", "わ" }
}
local ichidan = { "い", "き", "ぎ", "し", "じ", "ち", "に", "ひ", "び", "み", "り", "え", "け", "げ", "せ", "ぜ", "て", "で", "ね", "へ", "べ", "め", "れ" }

function jp.addTermi (termination, conjugation) -- 어미
	for i=1, 5 do
		if godan.kusuruutsu[i] == termination then return conjugation end
	end
	if conjugation == "て" then return "で"
	elseif conjugation == "ます" then return "ます"
	elseif conjugation == "た" then return "だ"
	else return "ない" end
end

function jp.convert(termination, conjugation)
	local i = 1
	if conjugation == "て" or conjugation == "た" then
		while i <= #(godan.normal) do
			if godan.normal[i] == termination then
				return "e1"
			end
			i = i + 1
		end
			return "error1"
	elseif conjugation == "ます" then
		while i <= #(godan.normal) do
			if godan.normal[i] == termination then
				return "e2"
			end
			i = i + 1
		end
			return "error2"
	else --ない
		while i <= #(godan.normal) do
			if godan.normal[i] == termination then
				return "e3"
			end
			i = i + 1
		end
			return "error3"
	end
end

function jp.ruby(kanji, furigana)
	return "<ruby><rb>"..kanji..[[</rb><rt style{{=}}"font-size: 70%">]]..furigana.."</rt></ruby>"
end

function jp.isIchidan(kana)
	for i = 1, #ichidan do
		if ichidan[i] == kana then
			return true
		end
	end
	return false
end

function jp.godan_ichidan( hiragana )
	endofstr = string.sub( hiragana, -1, -1 )
	endofstr2 = string.sub( hiragana, -2, -2 )
	for i = 1, #godan.normal do
		if endofstr == "る" then
			for i = 1, #ichidan do
				if ichidan[i] == endofstr2 then return "ichidan" end
			end
			return "godan"
		elseif godan.normal[i] == endofstr then
			return "godan"
		end
	end
end

function jp.main(frame)

	local kanji = frame.args['kanji'] --"遊" --한자
    local furigana = frame.args['furigana'] -- "あそ" --후리가나
    local hiragana = frame.args['hiragana'] -- "あそぶ" --히라가나
    local conjugation = frame.args['conjugation'] --"て" --활용
    local verb_group = frame.args['verb_group']
    local termination --"" --어미
    local okurigana --"" --오쿠리가나
    
    okurigana = string.gsub( hiragana, furigana, "" )
    
    if (kanji == "来") then
        if conjugation == "ない" then
            furigana = "こ"
        else
            furigana = "き"
        end
        return jp.ruby(kanji, furigana)..conjugation
        
    elseif kanji == nil then
    	
    elseif string.len( hiragana ) == 2 then
    	if jp.godan_ichidan(hiragana) == "ichidan" then
    		return jp.ruby(kanji, furigana)..conjugation
    	else
    		return jp.ruby(kanji, furigana)..jp.convert(okurigana, conjugation)..jp.addTermi(okurigana, conjugation)
    	end
    else
    	-- べる「食べる」、ぶ[遊ぶ]
    	if jp.godan_ichidan(hiragana) == "ichidan" then
			return jp.ruby(kanji, furigana).. string.sub( okurigana, 0, -2 )..conjugation
		else
	        return jp.ruby(kanji, furigana)..jp.convert(string.sub( hiragana, -1, -1 ), conjugation)..jp.addTermi(string.sub( hiragana, -1, -1 ), conjugation)
    	end
	
    end
end

return jp