Module:Kangxi radical

require('strict')

local p = {}

function p.find(t, srch) -- search by value for k, _ in ipairs(t) do	 if t[k] == srch then return k; end end end

local labels = { -- ten per line "one", "line", "dot", "slash", "second", "hook", "two", "lid", "man", "legs", "enter", "eight", "down box", "cover", "ice", "table", "open box", "knife", "power", "wrap", "spoon", "right open box", "hiding enclosure", "ten", "divination", "seal", "cliff", "private", "again", "mouth", "enclosure", "earth", "scholar", "go", "go slowly", "evening", "big", "woman", "child", "roof", "inch", "small", "lame", "corpse", "sprout", "mountain", "river", "work", "oneself", "turban", "dry", "short thread", "dotted cliff", "long stride", "two hands", "shoot", "bow", "snout", "bristle", "step", "heart", "halberd", "door", "hand", "branch", "rap", "script", "dipper", "axe", "square", "not", "sun", "say", "moon", "tree", "lack", "stop", "death", "weapon", "do not", "compare", "fur", "clan", "steam", "water", "fire", "claw", "father", "double x", "half tree trunk", "slice", "fang", "cow", "dog", "profound", "jade", "melon", "tile", "sweet", "life", "use", "field", "bolt of cloth", "sickness", "dotted tent", "white", "skin", "dish", "eye", "spear", "arrow", "stone", "spirit", "track", "grain", "cave", "stand", "bamboo", "rice", "silk", "jar", "net", "sheep", "feather", "old", "and", "plow", "ear", "brush", "meat", "minister", "self", "arrive", "mortar", "tongue", "oppose", "boat", "stopping", "color", "grass", "tiger", "insect", "blood", "walk enclosure", "clothes", "west", "see", "horn", "speech", "valley", "bean", "pig", "badger", "shell", "red", "run", "foot", "body", "cart", "bitter", "morning", "walk", "city", "wine", "distinguish", "village", "gold", "long", "gate", "mound", "slave", "short tailed bird", "rain", "blue", "wrong", "face", "leather", "tanned leather", "leek", "sound", "leaf", "wind", "fly", "eat", "head", "fragrant", "horse", "bone", "tall", "hair", "fight", "sacrificial wine", "cauldron", "ghost", "fish", "bird", "salt", "deer", "wheat", "hemp", "yellow", "millet", "black", "embroidery", "frog", "tripod", "drum", "rat", "nose", "even", "tooth", "dragon", "turtle", "flute", }

local variants = { -- five per line ["一"] = 1, ["乀"] = 2, ["乁"] = 2, ["丶"] = 3, ["丿"] = 4, ["zorro"] = 5, ["乙"] = 5, ["⺂"] = 5, ["⺃"] = 5, ["⺄"] = 5, ["亅"] = 6, ["二"] = 7, ["亠"] = 8, ["人"] = 9, ["亻"] = 9, ["𠂉"] = 9, ["person"] = 9, ["human"] = 9, ["儿"] = 10, ["兒"] = 10, ["児"] = 10, ["入"] = 11, ["丷"] = 12, ["八"] = 12, ["冂"] = 13,  ["冖"] = 14, ["冫"] = 15, ["⺀"] = 15, ["几"] = 16, ["𠘧"] = 16, ["幾"] = 16, ["𠘨"] = 16, ["凵"] = 17, ["刀"] = 18, ["刂"] = 18, ["⺈"] = 18, ["力"] = 19, ["勹"] = 20, ["匕"] = 21, ["匚"] = 22, ["匸"] = 23, ["十"] = 24, ["卜"] = 25, ["⺊"] = 25, ["divine"] = 25, ["卩"] = 26, ["㔾"] = 26, ["厂"] = 27, ["⺁"] = 27, ["厶"] = 28, ["又"] = 29, ["口"] = 30, ["囗"] = 31, ["土"] = 32, ["士"] = 33, ["夂"] = 34, ["夊"] = 35, ["slowly"] = 35, ["夕"] = 36, ["大"] = 37, ["large"] = 37, ["女"] = 38, ["female"] = 38, ["子"] = 39, ["宀"] = 40, ["寸"] = 41, ["thumb"] = 41, ["小"] = 42, ["⺌"] = 42, ["⺍"] = 42, ["尢"] = 43, ["⺐"] = 43, ["⺎"] = 43, ["尸"] = 44, ["屮"] = 45, ["山"] = 46, ["hill"] = 46, ["巛"] = 47, ["巜"] = 47, ["川"] = 47, ["工"] = 48, ["己"] = 49, ["巾"] = 50, ["干"] = 51, ["⺓"] = 52, ["幺"] = 52, ["广"] = 53, ["廣"] = 53, ["広"] = 53, ["廴"] = 54, ["廾"] = 55, ["弋"] = 56, ["弓"] = 57, ["彐"] = 58, ["彑"] = 58, ["彡"] = 59, ["彳"] = 60, ["心"] = 61, ["忄"] = 61, ["㣺"] = 61, ["戈"] = 62, ["戶"] = 63, ["戸"] = 63, ["户"] = 63, ["手"] = 64, ["⺘"] = 64, ["扌"] = 64, ["支"] = 65, ["攴"] = 66, ["文"] = 67, ["斗"] = 68, ["斤"] = 69, ["方"] = 70, ["无"] = 71, ["無"] = 71, ["日"] = 72, ["⺜"] = 72, ["曰"] = 73, ["月"] = 74, ["⺝"] = 74, ["木"] = 75, ["wood"] = 75, ["欠"] = 76, ["止"] = 77, ["龰"] = 77, ["𣥂"] = 77, ["歺"] = 78, ["歹"] = 78, ["殳"] = 79, ["母"] = 80, ["比"] = 81, ["毛"] = 82, ["氏"] = 83, ["气"] = 84, ["氣"] = 84, ["air"] = 84, ["気"] = 84, ["水"] = 85, ["氵"] = 85, ["氺"] = 85, ["火"] = 86, ["灬"] = 86, ["paw"] = 87, ["nail"] = 87, ["爪"] = 87, ["⺥"] = 87, ["父"] = 88, ["爻"] = 89, ["xx"] = 89, ["爿"] = 90, ["片"] = 91, ["牙"] = 92, ["tooth"] = 92, ["牛"] = 93, ["牜"] = 93, ["𠂒"] = 93, ["bull"] = 93, ["犭"] = 94, ["犬"] = 94, ["玄"] = 95, ["玉"] = 96, ["𤣩"] = 96, ["瓜"] = 97, ["瓦"] = 98, ["甘"] = 99, ["生"] = 100, ["用"] = 101, ["田"] = 102, ["疋"] = 103, ["𤴔"] = 103, ["疒"] = 104, ["illness"] = 104, ["ill"] = 104, ["sick"] = 104, ["癶"] = 105, ["白"] = 106, ["皮"] = 107, ["皿"] = 108, ["目"] = 109, ["矛"] = 110, ["矢"] = 111, ["石"] = 112, ["示"] = 113, ["礻"] = 113, ["⺬"] = 113, ["禸"] = 114, ["禾"] = 115, ["穴"] = 116, ["立"] = 117, ["竹"] = 118, ["𥫗"] = 118, ["米"] = 119, ["糸"] = 120, ["丝"] = 120, ["糹"] = 120, ["缶"] = 121, ["网"] = 122, ["羊"] = 123, ["⺶"] = 123, ["羽"] = 124, ["老"] = 125, ["而"] = 126, ["耒"] = 127, ["耳"] = 128, ["聿"] = 129, ["肉"] = 130, ["⺼"] = 130, ["臣"] = 131, ["自"] = 132, ["至"] = 133, ["臼"] = 134, ["舌"] = 135, ["舛"] = 136, ["舟"] = 137, ["艮"] = 138, ["色"] = 139, ["colour"] = 139, ["艸"] = 140, ["艹"] = 140, ["䒑"] = 140, ["虍"] = 141, ["虫"] = 142, ["血"] = 143, ["行"] = 144, ["衣"] = 145, ["𧘇"] = 145, ["衤"] = 145, ["襾"] = 146, ["西"] = 146, ["見"] = 147, ["见"] = 147, ["⻅"] = 147, ["角"] = 148, ["⻆"] = 148, ["言"] = 149, ["⻈"] = 149,  ["訁"] = 149,  ["谷"] = 150, ["豆"] = 151, ["豕"] = 152, ["豸"] = 153, ["貝"] = 154, ["贝"] = 154, ["赤"] = 155, ["走"] = 156, ["足"] = 157, ["𧾷"] = 157, ["身"] = 158, ["車"] = 159, ["车"] = 159, ["辛"] = 160, ["辰"] = 161, ["辵"] = 162, ["辶"] = 162, ["⻌"] = 162, ["⻍"] = 162, ["⻎"] = 162, ["邑"] = 163, ["⻏"] = 163, ["酉"] = 164, ["釆"] = 165, ["里"] = 166, ["金"] = 167, ["釒"] = 167, ["钅"] = 167, ["長"] = 168, ["长"] = 168, ["镸"] = 168, ["門"] = 169, ["⻔"] = 169, ["门"] = 169, ["阜"] = 170, ["⻖"] = 170, ["⾪"] = 171, ["隹"] = 172, ["雨"] = 173, ["⻗"] = 173, ["靑"] = 174, ["grue"] = 174, ["非"] = 175, ["面"] = 176, ["革"] = 177, ["韋"] = 178, ["韭"] = 179, ["音"] = 180, ["頁"] = 181, ["風"] = 182, ["风"] = 182, ["⻛"] = 182, ["飛"] = 183, ["飞"] = 183, ["食"] = 184, ["⻝"] = 184, ["飠"] = 184, ["𩙿"] = 184, ["饣"] = 184, ["首"] = 185, ["香"] = 186, ["馬"] = 187, ["马"] = 187, ["⻢"] = 187, ["🐎"] = 187, ["骨"] = 188, ["⻣"] = 188, ["高"] = 189, ["髟"] = 190, ["鬥"] = 191, ["鬯"] = 192, ["鬲"] = 193, ["鬼"] = 194, ["⻤"] = 194, ["魚"] = 195, ["鱼"] = 195, ["⻥"] = 195, ["鳥"] = 196, ["鸟"] = 196, ["⻦"] = 196, ["鹵"] = 197, ["卤"] = 197, ["⻧"] = 197, ["鹿"] = 198, ["麥"] = 199, ["麦"] = 199, ["⻨"] = 199, ["麻"] = 200, ["黃"] = 201, ["黄"] = 201, ["⻩"] = 201, ["黍"] = 202, ["黑"] = 203, ["黹"] = 204, ["黽"] = 205, ["黾"] = 205,  ["⻪"] = 205, ["鼎"] = 206, ["鼓"] = 207, ["壴"] = 207, ["鼠"] = 208, ["鼻"] = 209, ["齊"] = 210, ["⻬"] = 210, ["齐"] = 210, ["齒"] = 211, ["齿"] = 211, ["⻮"] = 211, ["龍"] = 212, ["龙"] = 212, ["⻰"] = 212, ["龜"] = 213, ["⻱"] = 213, ["龟"] = 213, ["⻳"] = 213,  ["龠"] = 214, }

function p.Kxr(frame) local getArgs = require('Module:Arguments').getArgs return p._Kxr(getArgs(frame)) end

local function utfEscape(hex) return	"&#" .. hex .. ";" end

function p.toRadicalNumber(ch) local codepoint = mw.ustring.codepoint(ch) local result = nil

if codepoint >= 0x2F00 and codepoint <= 0x2FD5 then result = codepoint - 0x2F00 + 1 else result = variants[ch] end

if not result then result = p.find(labels, ch); end return result end

function p._Kxr(args) local num = nil local add_link = false local add_label = args["name"] ~= "no" local add_numero = false local use_variant = false

local glyph = "" local label = "" local result = ""

if tonumber(args[1]) then num = math.floor(tonumber(args[1])) else num = p.toRadicalNumber(string.lower(args[1])) if args["variant"] or args["v"] then use_variant = true; end end local unicode = 0x2F00 + num - 1

if use_variant and mw.ustring.len(args[1]) == 1 then glyph = args[1] else glyph = utfEscape(unicode); end

if args["l"] or args["link"] or args["links"] then add_link = true; end

if add_label then local label_style = "\"font-variant:all-small-caps\"" label = string.upper(labels[num])

if add_link then label = "".. label .. ""; end label = "&emsp13;'" .. label .. "' "  end

result = "" .. glyph .. " " .. label return result end

return p