Jump to content

Module:okm-sortkey

From Wiktionary, the free dictionary


local export = {}

local us = mw.ustring
local prefix = ""
local suffix = us.char(0x3130)

function G(s)
	return prefix .. s .. suffix
end

local initial_consonants = {
	['ᄀ'] = G("ㄱ"),
	['ᄁ'] = G("ㄱㄱ"),
	['ᄂ'] = G("ㄴ"),
	['ᄔ'] = G("ㄴㄴ"),
	['ᄃ'] = G("ㄷ"),
	['ᄄ'] = G("ㄷㄷ"),
	['ᄅ'] = G("ㄹ"),
	['ᄆ'] = G("ㅁ"),
	['ᄇ'] = G("ㅂ"),
	['ᄞ'] = G("ㅂㄱ"),
	['ᄠ'] = G("ㅂㄷ"),
	['ᄈ'] = G("ㅂㅂ"),
	['ᄡ'] = G("ㅂㅅ"),
	['ᄢ'] = G("ㅂㅅㄱ"),
	['ᄣ'] = G("ㅂㅅㄷ"),
	['ᄦ'] = G("ㅂㅅㅈ"),
	['ᄧ'] = G("ㅂㅈ"),
	['ᄩ'] = G("ㅂㅌ"),
	['ᄫ'] = G("ㅂㅎ"), -- hack
	['ᄉ'] = G("ㅅ"),
	['ᄭ'] = G("ㅅㄱ"),
	['ᄮ'] = G("ㅅㄴ"),
	['ᄯ'] = G("ㅅㄷ"),
	['ᄱ'] = G("ㅅㅁ"),
	['ᄲ'] = G("ㅅㅂ"),
	['ᄳ'] = G("ㅅㅂㄱ"),
	['ᄊ'] = G("ㅅㅅ"),
	['ᄸ'] = G("ㅅㅋ"),
	['ᄹ'] = G("ㅅㅌ"),
	['ᄺ'] = G("ㅅㅍ"),
	['ᅀ'] = G("ㅅㅎ"), -- hack
	['ᄋ'] = G("ㅇ"),
	['ᅇ'] = G("ㅇㅇ"),
	['ᅌ'] = G("ㅇㅎ"), -- hack
	['ᄌ'] = G("ㅈ"),
	['ᄍ'] = G("ㅈㅈ"),
	['ᄎ'] = G("ㅊ"),
	['ᄏ'] = G("ㅋ"),
	['ᄐ'] = G("ㅌ"),
	['ᄑ'] = G("ㅍ"),
	['ᄒ'] = G("ㅎ"),
	['ᅘ'] = G("ㅎㅎ"),
	['ᅙ'] = G("ㆆ"),
}

local medials = {
	['ᅡ'] = G("ㅏ"),
	['ᅢ'] = G("ㅐ"),
	['ᅣ'] = G("ㅑ"),
	['ᅤ'] = G("ㅒ"),
	['ᅥ'] = G("ㅓ"),
	['ᅦ'] = G("ㅔ"),
	['ᅧ'] = G("ㅕ"),
	['ᅨ'] = G("ㅖ"),
	['ᅩ'] = G("ㅗ"),
	['ᅪ'] = G("ㅗㅏ"),
	['ᅫ'] = G("ㅗㅐ"),
	['ᅬ'] = G("ㅗㅣ"),
	['ᅭ'] = G("ㅛ"),
	['ᆄ'] = G("ㅛㅑ"),
	['ᆅ'] = G("ㅛㅒ"),
	['ᆈ'] = G("ㅛㅣ"),
	['ᅮ'] = G("ㅜ"),
	['ᅯ'] = G("ㅜㅓ"),
	['ᅰ'] = G("ㅜㅔ"),
	['ᅱ'] = G("ㅜㅣ"),
	['ᅲ'] = G("ㅠ"),
	['ᆑ'] = G("ㅠㅕ"),
	['ᆒ'] = G("ㅠㅖ"),
	['ᆔ'] = G("ㅠㅣ"),
	['ᅳ'] = G("ㅡ"),
	['ᅴ'] = G("ㅡㅣ"),
	['ᅵ'] = G("ㅣ"),
	['ᆞ'] = G("ㆍ"),
	['ᆡ'] = G("ㆍㅣ"),
}

prefix = us.char(0x318F)
local final_consonants = {
	['ᆨ'] = G("ㄱ"),
	['ᆩ'] = G("ㄱㄱ"),
	['ᆪ'] = G("ㄱㅅ"),
	['ᆫ'] = G("ㄴ"),
	['ᇆ'] = G("ㄴㄷ"),
	['ᇇ'] = G("ㄴㅅ"),
	['ᇈ'] = G("ㄴㅅㅎ"), -- hack
	['ᆬ'] = G("ㄴㅈ"),
	['ᇉ'] = G("ㄴㅌ"),
	['ᆭ'] = G("ㄴㅎ"),
	['ᆮ'] = G("ㄷ"),
	['ᆯ'] = G("ㄹ"),
	['ᆰ'] = G("ㄹㄱ"),
	['ᇌ'] = G("ㄹㄱㅅ"),
	['ᆱ'] = G("ㄹㅁ"),
	['ᆲ'] = G("ㄹㅂ"),
	['ᆳ'] = G("ㄹㅅ"),
	['ᇗ'] = G("ㄹㅅㅎ"), -- hack
	['ᆴ'] = G("ㄹㅌ"),
	['ᆵ'] = G("ㄹㅍ"),
	['ᆶ'] = G("ㄹㅎ"),
	['ᇙ'] = G("ㄹㆆ"),
	['ᆷ'] = G("ㅁ"),
	['ᇚ'] = G("ㅁㄱ"),
	['ᇜ'] = G("ㅁㅂ"),
	['ᇝ'] = G("ㅁㅅ"),
	['ᇟ'] = G("ㅁㅅㅎ"),
	['ᇠ'] = G("ㅁㅊ"),
	['ᆸ'] = G("ㅂ"),
	['ᇣ'] = G("ㅂㄹ"),
	['ᆹ'] = G("ㅂㅅ"),
	['ᆺ'] = G("ㅅ"),
	['ᇧ'] = G("ㅅㄱ"),
	['ᇨ'] = G("ㅅㄷ"),
	['ᆻ'] = G("ㅅㅅ"),
	['ᇫ'] = G("ㅅㅎ"), -- hack
	['ᆼ'] = G("ㅇ"),
	['ᇰ'] = G("ㅇㅎ"), -- hack
	['ᇱ'] = G("ㅇㅎㅅ"), -- hack
	['ᆽ'] = G("ㅈ"),
	['ᆾ'] = G("ㅊ"),
	['ᆿ'] = G("ㅋ"),
	['ᇀ'] = G("ㅌ"),
	['ᇁ'] = G("ㅍ"),
	['ᇂ'] = G("ㅎ"),
}

function export.makeSortKey(text, lang, sc)
	text = us.toNFD(text)
	text, _ = us.gsub(text, '.', initial_consonants)
	text, _ = us.gsub(text, '.', medials)
	text, _ = us.gsub(text, '.', final_consonants)
	return text
end

return export