모듈:Hangul

--[[ 한글 처리 관련 함수 모듈josa: 자동 조사 처리 함수this function is inspired byhanp extension: bugzilla:13712korean library: http://pythonhosted.org/korean/


--]]

local func = {}

local ustring = mw.ustring

local handata = mw.loadData('Module:Hangul/data')

-- load to local variables local final_map = handata.final_map

local final_vowel = handata.final_vowel local final_consonant = handata.final_consonant local final_rieul = handata.final_rieul local final_unknown = handata.final_unknown

local finalform_basic = handata.finalform_basic local finalform_vowel = handata.finalform_vowel local finalform_consonant = handata.finalform_consonant local finalform_rieul = handata.finalform_rieul


-- Helper Functions --[[ Helper Function to interpret boolean strings. From Module:String --]]

local function getBoolean( boolean_str ) local boolean_value;if type( boolean_str ) == 'string' thenboolean_str = boolean_str:lower();if boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0'or boolean_str == or boolean_str == '아니오' thenboolean_value = false; elseboolean_value = true; end elseif type( boolean_str ) == 'boolean' thenboolean_value = boolean_str; elseerror( 'No boolean value found' ); end return boolean_value end

local function finalclass(str) local lastchar = ustring.match(str, '.*([%w])')if lastchar == nil then return final_unknown endif lastchar >= '가' and lastchar <= '힣' thencodepoint = ustring.codepoint(lastchar)final = (codepoint - 0xAC00) % 0x1Cif final == 0 thenreturn final_vowel elseif final == 8 thenreturn final_rieul elsereturn final_consonant end endreturn final_map[lastchar] or final_unknown end

--[[ 사용법:str = 체언josa = 조사defaultjosa = 체언의 마지막 받침을 알 수 없는 경우에 defaultjosa 값을 쓴다.override = True/False : True이면 체언의 어미에 상관없이 defaultjosa (없다면 josa) 값을 쓴다.josaonly = True/False: True이면 체언 부분은 생략한다. (복잡한 틀 설계용)]] function func.josa(frame) local input_string = frame.args.str or frame.args[1] or local input_josa = frame.args.josa or frame.args[2] or local input_defaultjosa = frame.args.defaultjosalocal override = getBoolean(frame.args.override or false)local josaonly = getBoolean(frame.args.josaonly or false)local output_josaif override thenoutput_josa = input_defaultjosa or input_josa elselocal char_class = finalclass(input_string)if char_class == final_vowel thenoutput_josa = finalform_vowel[input_josa] or input_josa elseif char_class == final_consonant thenoutput_josa = finalform_consonant[input_josa] or input_josa elseif char_class == final_rieul thenoutput_josa = finalform_rieul[input_josa] or input_josa else -- final_unknownoutput_josa = input_defaultjosa or finalform_basic[input_josa] or input_josa end-- mw.log (input_string .. '[' .. char_class .. ']' .. output_josa) endif josaonly thenreturn output_josa elsereturn input_string .. output_josa end end

return func