Wiktionary tpiwiktionary https://tpi.wiktionary.org/wiki/Fran_Pes MediaWiki 1.39.0-wmf.22 case-sensitive Media Sipesol Toktok Yusa Toktok bilong yusa Wiktionary Wiktionary toktok Fail Toktok bilong fail MediaWiki Toktok bilong mediawiki Templet Toktok bilong templet Halivim Toktok bilong halivim Grup Toktok bilong grup TimedText TimedText talk Module Module talk Gadget Gadget talk Gadget definition Gadget definition talk Grup:Candidates for speedy deletion 14 1983 13307 10050 2022-08-01T21:47:57Z Asinis632 1829 wikitext text/x-wiki [[Grup:Diksionary]] 6up2yupbmvb5c42e2uciwcfgzvftqnl 13308 13307 2022-08-01T21:48:30Z Asinis632 1829 wikitext text/x-wiki [[Grup:Diksineri]] 93901bwwxqhomey8udo9y360zhylot1 13309 13308 2022-08-01T21:49:01Z Asinis632 1829 wikitext text/x-wiki [[Grup:Dikseneri]] gesrkqsnhedw5e3bhy6h1pxi5grchub ima 0 2008 13301 9897 2022-08-01T21:42:14Z Asinis632 1829 wikitext text/x-wiki == Tokples == Dispela emi hap tok bilong '''Tok Siapan'''. == Part of speech == Adverb == Hap tok i minim == * '''ima''' long Tok Siapan i minim [[nau]] long Tok Pisin. [[Grup:Adveb]] [[Grup:Tok Siapan]] 6ezw789nzx4cdcmkr226jzbl98zsiew 13302 13301 2022-08-01T21:42:52Z Asinis632 1829 wikitext text/x-wiki == Tokples == Dispela emi hap tok bilong '''Tok Siapan'''. == Part of speech == Adverb == Hap tok i minim == * '''ima''' long Tok Siapan i minim [[nau]] long Tok Pisin. [[Grup:ja:Adveb]] [[Grup:Tok Siapan]] jpm70vi89t33771mzatbjgqahqj9odv 13304 13302 2022-08-01T21:46:11Z Asinis632 1829 wikitext text/x-wiki == Tokples == Dispela emi hap tok bilong '''Tok Siapan'''. == Part of speech == Adverb == Hap tok i minim == * '''ima''' long Tok Siapan i minim [[nau]] long Tok Pisin. [[Grup:Siapan adveb]] [[Grup:Tok Siapan]] 5pcznyqm09a1n78tnppa7fpr78x47ux Grup:Adveb bilong Tok Inglis 14 2613 13298 10048 2022-08-01T21:33:58Z Asinis632 1829 wikitext text/x-wiki {{auto cat}} [[Grup:Tok Inglis]] qvkxw59xjo3odp84nhcn7g0i25cx7gn 13300 13298 2022-08-01T21:40:49Z Asinis632 1829 wikitext text/x-wiki <!--{{auto cat}}--> [[Grup:Tok Inglis]] mlu7cmr77fhp9zgbri2j39raivwg19k Module:auto cat 828 3670 13296 11022 2022-08-01T21:19:58Z Asinis632 1829 Scribunto text/plain local export = {} -- Used in multiple places; create a variable for ease in testing. local poscatboiler_submodule = "poscatboiler" local function splitLabelLang(titleObject) local getByCanonicalName = require("Module:languages").getByCanonicalName local canonicalName local lang -- Progressively add another word to the potential canonical name until it -- matches an actual canonical name. local words = mw.text.split(titleObject.text, " ") for i = #words - 1, 1, -1 do canonicalName = table.concat(words, " ", 1, i) lang = getByCanonicalName(canonicalName) if lang then break end end local label = lang and titleObject.text:sub(#canonicalName + 2) or titleObject.text return label, lang end -- Add the arguments in `source` to those in `receiver`, offsetting numeric arguments by `offset`. local function add_args(receiver, source, offset) for k, v in pairs(source) do if type(k) == "number" then receiver[k + offset] = v else receiver[k] = v end end return receiver end -- List of handler functions that try to match the page name. -- A handler should return a table of template title plus arguments -- that is passed to frame:expandTemplate. -- If a handler does not recognise the page name, it should return nil. -- Note that the order of functions matters! local handlers = {} local function add_handler(func) table.insert(handlers, func) end -- Topical categories add_handler(function(titleObject) if not titleObject.text:find("^[a-z-]+:.") then return nil end local code, label = titleObject.text:match("^([a-z-]+):(.+)$") return {title = "topic cat", args = {code, label}} end) -- Letter names add_handler(function(titleObject) if not titleObject.text:find("letter names$") then return nil end local langCode = titleObject.text:match("^([^:]+):") local lang, cat if langCode then lang = require("Module:languages").getByCode(langCode) or error('The language code "' .. langCode .. '" is not valid.') cat = titleObject.text:match(":(.+)$") else cat = titleObject.text end return {title = "topic cat", args = {lang and lang:getCode() or nil, cat}} end) -- letter cat add_handler(function(titleObject) -- Only recognize cases consisting of an uppercase letter followed by the -- corresponding lowercase letter, either as the entire category name or -- followed by a colon (for cases like [[Category:Gg: ⠛]]). Cases that -- don't fit this profile (e.g. for Turkish [[Category:İi]] and -- [[Category:Iı]]) need to call {{letter cat}} directly. Formerly this -- handler was much less restrictive and would fire on categories named -- [[Category:zh:]], [[Category:RFQ]], etc. local upper, lower = mw.ustring.match(titleObject.text, "^(%u)(%l)%f[:%z]") if not upper or mw.ustring.upper(lower) ~= upper then return nil end return {title = "letter cat"} end) -- poscatboiler lang-specific add_handler(function(titleObject, args) local label, lang = splitLabelLang(titleObject) if lang then local baseLabel, script = label:match("(.+) in (.-) script$") if script and baseLabel ~= "terms" then local scriptObj = require("Module:scripts").getByCanonicalName(script) if scriptObj then return {title = poscatboiler_submodule, args = add_args({lang:getCode(), baseLabel, scriptObj:getCode()}, args, 3)}, true end end return {title = poscatboiler_submodule, args = add_args({lang:getCode(), label}, args, 3)}, true end end) -- poscatboiler umbrella category add_handler(function(titleObject, args) local label = titleObject.text:match("(.+) by language$") if label then return { title = poscatboiler_submodule, args = add_args({nil, mw.getContentLanguage():lcfirst(label)}, args, 3) }, true end end) -- topic cat add_handler(function(titleObject) return {title = "topic cat", args = {nil, titleObject.text}} end) -- poscatboiler raw handlers add_handler(function(titleObject, args) local args = add_args({nil, titleObject.text}, args, 3) args.raw = true return { title = poscatboiler_submodule, args = args, }, true end) -- poscatboiler umbrella handlers without 'by language' add_handler(function(titleObject, args) local args = add_args({nil, mw.getContentLanguage():lcfirst(titleObject.text)}, args, 3) return { title = poscatboiler_submodule, args = args, }, true end) function export.show(frame) local args = frame:getParent().args local titleObject = mw.title.getCurrentTitle() if titleObject.nsText == "Templet" then return "(This template should be used on pages in the Grup: namespace.)" elseif titleObject.nsText ~= "Grup" then error("This template/module can only be used on pages in the Grup: namespace.") end local function extra_args_error(templateObject) local numargstext = {} local argstext = {} local maxargnum = 0 for k, v in pairs(templateObject.args) do if type(v) == "number" and v > maxargnum then maxargnum = v else table.insert(numargstext, "|" .. k .. "=" .. v) end end for i = 1, maxargnum do local v = templateObject.args[i] if v == nil then v = "(nil)" elseif v == true then v = "(true)" elseif v == false then v = "(false)" end table.insert(argstext, "|" .. v) end error("Extra arguments to {{auto cat}} not allowed for this category (recognized as {{[[Templet:" .. templateObject.title .. "|" .. templateObject.title .. "]]" .. numargstext .. argstext .. "}}") end local first_error_templateObject, first_error_args_handled, first_error_cattext -- Go through each handler in turn. If a handler doesn't recognize the format of the -- category, it will return nil, and we will consider the next handler. Otherwise, -- it returns a template name and arguments to call it with, but even then, that template -- might return an error, and we need to consider the next handler. This happens, -- for example, with the category "CAT:Mato Grosso, Brazil", where "Mato" is the name of -- a language, so the handler for {{poscatboiler}} fires and tries to find a label -- "Grosso, Brazil". This throws an error, and previously, this blocked fruther handler -- consideration, but now we check for the error and continue checking handlers; -- eventually, {{topic cat}} will fire and correctly handle the category. for _, handler in ipairs(handlers) do local templateObject, args_handled = handler(titleObject, args) if templateObject then require("Module:debug").track("auto cat/" .. templateObject.title) local cattext = frame:expandTemplate(templateObject) -- FIXME! We check for specific text found in most or all error messages generated -- by category tree templates (in particular, the second piece of text below should be -- in all error messages generated when a given module doesn't recognize a category name). -- If this text ever changes in the source modules (e.g. [[Module:category tree]], -- it needs to be changed here as well.) if cattext:find("Grup:Categories with invalid label") or cattext:find("The automatically%-generated contents of this category has errors") then if not first_error_cattext then first_error_templateObject = templateObject first_error_args_handled = args_handled first_error_cattext = cattext end else if not args_handled and next(args) then extra_args_error(templateObject) end return cattext end end end if first_error_cattext then if not first_error_args_handled and next(args) then extra_args_error(first_error_templateObject) end return first_error_cattext end error("{{auto cat}} couldn't recognize format of category name") end -- test function for injecting title string function export.test(title) if type(title) == "table" then title = title:getParent().args[1] end local titleObject = {} titleObject.text = title for _, handler in ipairs(handlers) do local t = handler(titleObject) if t then return t.title end end end return export i0j31c6hu9sevbb7o7z5zu8zkjk4jnu Module:Unicode data/images/002 828 4049 13287 12988 2022-08-01T20:56:28Z Kwamikagami 185 Scribunto text/plain return { [ 0x200B ] = "ISOIEC-9995-7-072--IEC-60417-6072-10--Symbol-for-ZWSP.svg", [ 0x200C ] = "ISOIEC-9995-7-081--IEC-60417-6077-1--Symbol-for-ZWNJ.svg", [ 0x200D ] = "ISOIEC-9995-7-082--IEC-60417-6077-2--Symbol-for-ZWJ.svg", [ 0x2018 ] = "Cquote1 single black.svg", [ 0x2019 ] = "Cquote2 single black.svg", [ 0x201C ] = "Cquote1 black.svg", [ 0x201D ] = "Cquote2 black.svg", [ 0x2020 ] = "Dagger-vector.svg", [ 0x2021 ] = "Double-dagger-vector.svg", [ 0x2026 ] = "Ellipsis.svg", [ 0x2030 ] = "Permille symbol.svg", [ 0x2039 ] = "Left pointing single angle quotation mark.svg", [ 0x203A ] = "Right pointing single angle quotation mark.svg", [ 0x203B ] = "U203B-reference-mark-glyph-in-andron-scriptor-web.svg", [ 0x203D ] = "Interrobang.svg", [ 0x2042 ] = "Asterisks three.svg", [ 0x2044 ] = "U+2044.svg", [ 0x204A ] = "Tironisches et 2.png", [ 0x2051 ] = "Asterisks 2 (vertical).svg", [ 0x2060 ] = "ISOIEC-9995-7-083--IEC-60417-6077-3--Symbol-for-Word-Joiner.svg", [ 0x20A0 ] = "Euro-currency sign.svg", [ 0x20A1 ] = "Costa Rican colon symbol.svg", [ 0x20A2 ] = "Cruzeiro sign.svg", [ 0x20A3 ] = "French franc symbol.svg", [ 0x20A4 ] = "Lira sign.svg", [ 0x20A5 ] = "Mill sign.svg", [ 0x20A6 ] = "Naira sign.svg", [ 0x20A7 ] = "Peseta symbol.svg", [ 0x20A8 ] = "Pakistani Rupee Sign.svg", [ 0x20A9 ] = "Won sign.svg", [ 0x20AA ] = "New sheqel sign.svg", [ 0x20AB ] = "Dong sign.svg", [ 0x20AC ] = "Euro sign.svg", [ 0x20AD ] = "Kip.svg", [ 0x20AE ] = "Tugrik.svg", [ 0x20AF ] = "Drachma-Symbol.svg", [ 0x20B0 ] = "Pfennig sign.svg", [ 0x20B1 ] = "PhilippinePeso.svg", [ 0x20B2 ] = "Guarani symbol.svg", [ 0x20B3 ] = "Austral.svg", [ 0x20B4 ] = "Hryvnia symbol.svg", [ 0x20B5 ] = "Cedi.svg", [ 0x20B6 ] = "Livre tournois sign.svg", [ 0x20B7 ] = "Spesmilo sign (bold italic).svg", [ 0x20B8 ] = "Kazakhstani tenge symbol.svg", [ 0x20B9 ] = "Indian Rupee symbol.svg", [ 0x20BA ] = "Turkish lira symbol black.svg", [ 0x20BB ] = "Nordic mark sign.svg", [ 0x20BC ] = "Azeri manat symbol.svg", [ 0x20BD ] = "Ruble sign.svg", [ 0x20BE ] = "Sign of Georgian Lari.svg", [ 0x20BF ] = "BitcoinSign.svg", [ 0x20C0 ] = "Som_sign.svg", [ 0x2100 ] = "U+2100.svg", [ 0x2101 ] = "U+2101.svg", [ 0x2102 ] = "U+2102.svg", [ 0x2103 ] = "U+2103.svg", [ 0x2104 ] = "U+2104.svg", [ 0x2105 ] = "U+2105.svg", [ 0x2106 ] = "U+2106.svg", [ 0x2107 ] = "U+2107.svg", [ 0x2108 ] = "U+2108.svg", [ 0x2109 ] = "U+2109.svg", [ 0x210A ] = "U+210A.svg", [ 0x210B ] = "U+210B.svg", [ 0x210C ] = "U+210C.svg", [ 0x210D ] = "U+210D.svg", [ 0x210E ] = "U+210E.svg", [ 0x210F ] = "U+210F.svg", [ 0x2110 ] = "U+2110.svg", [ 0x2111 ] = "U+2111.svg", [ 0x2112 ] = "U+2112.svg", [ 0x2113 ] = "U+2113.svg", [ 0x2114 ] = "U+2114.svg", [ 0x2115 ] = "U+2115.svg", [ 0x2116 ] = "U+2116.svg", [ 0x2117 ] = "U+2117.svg", [ 0x2118 ] = "U+2118.svg", [ 0x2119 ] = "U+2119.svg", [ 0x211A ] = "U+211A.svg", [ 0x211B ] = "U+211B.svg", [ 0x211C ] = "U+211C.svg", [ 0x211D ] = "U+211D.svg", [ 0x211E ] = "U+211E.svg", [ 0x211F ] = "U+211F.svg", [ 0x2120 ] = "U+2120.svg", [ 0x2121 ] = "U+2121.svg", [ 0x2122 ] = "U+2122.svg", [ 0x2123 ] = "U+2123.svg", [ 0x2124 ] = "U+2124.svg", [ 0x2125 ] = "U+2125.svg", [ 0x2126 ] = "U+2126.svg", [ 0x2127 ] = "U+2127.svg", [ 0x2128 ] = "U+2128.svg", [ 0x2129 ] = "U+2129.svg", [ 0x212A ] = "U+212A.svg", [ 0x212B ] = "U+212B.svg", [ 0x212C ] = "U+212C.svg", [ 0x212D ] = "U+212D.svg", [ 0x212E ] = "U+212E.svg", [ 0x212F ] = "U+212F.svg", [ 0x2130 ] = "U+2130.svg", [ 0x2131 ] = "U+2131.svg", [ 0x2132 ] = "U+2132.svg", [ 0x2133 ] = "U+2133.svg", [ 0x2134 ] = "U+2134.svg", [ 0x2135 ] = "U+2135.svg", [ 0x2136 ] = "U+2136.svg", [ 0x2137 ] = "U+2137.svg", [ 0x2138 ] = "U+2138.svg", [ 0x2139 ] = "U+2139.svg", [ 0x213A ] = "U+213A.svg", [ 0x213B ] = "U+213B.svg", [ 0x213C ] = "U+213C.svg", [ 0x213D ] = "U+213D.svg", [ 0x213E ] = "U+213E.svg", [ 0x213F ] = "U+213F.svg", [ 0x2140 ] = "U+2140.svg", [ 0x2141 ] = "U+2141.svg", [ 0x2142 ] = "U+2142.svg", [ 0x2143 ] = "U+2143.svg", [ 0x2144 ] = "U+2144.svg", [ 0x2145 ] = "U+2145.svg", [ 0x2146 ] = "U+2146.svg", [ 0x2147 ] = "U+2147.svg", [ 0x2148 ] = "U+2148.svg", [ 0x2149 ] = "U+2149.svg", [ 0x214A ] = "U+214A.svg", [ 0x214B ] = "U+214B.svg", [ 0x214C ] = "U+214C.svg", [ 0x214D ] = "U+214D.svg", [ 0x214E ] = "U+214E.svg", [ 0x214F ] = "U+214F.svg", [ 0x2153 ] = "U+2153.svg", [ 0x2154 ] = "U+2154.svg", [ 0x2155 ] = "U+2155.svg", [ 0x2156 ] = "U+2156.svg", [ 0x2157 ] = "U+2157.svg", [ 0x2158 ] = "U+2158.svg", [ 0x2159 ] = "U+2159.svg", [ 0x215A ] = "U+215A.svg", [ 0x215B ] = "U+215B.svg", [ 0x215C ] = "U+215C.svg", [ 0x215D ] = "U+215D.svg", [ 0x215E ] = "U+215E.svg", [ 0x215F ] = "U+215F.svg", [ 0x2160 ] = "U+2160.svg", [ 0x2161 ] = "U+2161.svg", [ 0x2162 ] = "U+2162.svg", [ 0x2163 ] = "U+2163.svg", [ 0x2164 ] = "U+2164.svg", [ 0x2165 ] = "U+2165.svg", [ 0x2166 ] = "U+2166.svg", [ 0x2167 ] = "U+2167.svg", [ 0x2168 ] = "U+2168.svg", [ 0x2169 ] = "U+2169.svg", [ 0x216A ] = "U+216A.svg", [ 0x216B ] = "U+216B.svg", [ 0x216C ] = "U+216C.svg", [ 0x216D ] = "U+216D.svg", [ 0x216E ] = "U+216E.svg", [ 0x216F ] = "U+216F.svg", [ 0x2170 ] = "U+2170.svg", [ 0x2171 ] = "U+2171.svg", [ 0x2172 ] = "U+2172.svg", [ 0x2173 ] = "U+2173.svg", [ 0x2174 ] = "U+2174.svg", [ 0x2175 ] = "U+2175.svg", [ 0x2176 ] = "U+2176.svg", [ 0x2177 ] = "U+2177.svg", [ 0x2178 ] = "U+2178.svg", [ 0x2179 ] = "U+2179.svg", [ 0x217A ] = "U+217A.svg", [ 0x217B ] = "U+217B.svg", [ 0x217C ] = "U+217C.svg", [ 0x217D ] = "U+217D.svg", [ 0x217E ] = "U+217E.svg", [ 0x217F ] = "U+217F.svg", [ 0x2180 ] = "U+2180.svg", [ 0x2181 ] = "U+2181.svg", [ 0x2182 ] = "U+2182.svg", [ 0x2183 ] = "U+2183.svg", [ 0x2184 ] = "U+2184.svg", [ 0x2185 ] = "U+2185.svg", [ 0x2186 ] = "Rzz 50b.svg", [ 0x2187 ] = "U+2187.svg", [ 0x2188 ] = "U+2188.svg", [ 0x218A ] = "Dozenal gb 10.svg", [ 0x218B ] = "Dozenal gb 11.svg", [ 0x2190 ] = "U+2190.svg", [ 0x2191 ] = "U+2191.svg", [ 0x2192 ] = "U+2192.svg", [ 0x2193 ] = "U+2193.svg", [ 0x2194 ] = "U+2194.svg", [ 0x2195 ] = "U+2195.svg", [ 0x2196 ] = "U+2196.svg", [ 0x2197 ] = "U+2197.svg", [ 0x2198 ] = "U+2198.svg", [ 0x2199 ] = "U+2199.svg", [ 0x219A ] = "U+219A.svg", [ 0x219B ] = "U+219B.svg", [ 0x219C ] = "U+219C.svg", [ 0x219D ] = "U+219D.svg", [ 0x219E ] = "U+219E.svg", [ 0x219F ] = "U+219F.svg", [ 0x21A0 ] = "U+21A0.svg", [ 0x21A1 ] = "U+21A1.svg", [ 0x21A2 ] = "U+21A2.svg", [ 0x21A3 ] = "U+21A3.svg", [ 0x21A4 ] = "U+21A4.svg", [ 0x21A5 ] = "U+21A5.svg", [ 0x21A6 ] = "U+21A6.svg", [ 0x21A7 ] = "U+21A7.svg", [ 0x21A8 ] = "U+21A8.svg", [ 0x21A9 ] = "U+21A9.svg", [ 0x21AA ] = "U+21AA.svg", [ 0x21AB ] = "U+21AB.svg", [ 0x21AC ] = "U+21AC.svg", [ 0x21AD ] = "U+21AD.svg", [ 0x21AE ] = "U+21AE.svg", [ 0x21AF ] = "U+21AF.svg", [ 0x21B0 ] = "U+21B0.svg", [ 0x21B1 ] = "U+21B1.svg", [ 0x21B2 ] = "U+21B2.svg", [ 0x21B3 ] = "U+21B3.svg", [ 0x21B4 ] = "U+21B4.svg", [ 0x21B5 ] = "U+21B5.svg", [ 0x21B6 ] = "U+21B6.svg", [ 0x21B7 ] = "U+21B7.svg", [ 0x21B8 ] = "U+21B8.svg", [ 0x21B9 ] = "U+21B9.svg", [ 0x21BA ] = "U+21BA.svg", [ 0x21BB ] = "U+21BB.svg", [ 0x21BC ] = "U+21BC.svg", [ 0x21BD ] = "U+21BD.svg", [ 0x21BE ] = "U+21BE.svg", [ 0x21BF ] = "U+21BF.svg", [ 0x21C0 ] = "U+21C0.svg", [ 0x21C1 ] = "U+21C1.svg", [ 0x21C2 ] = "U+21C2.svg", [ 0x21C3 ] = "U+21C3.svg", [ 0x21C4 ] = "U+21C4.svg", [ 0x21C5 ] = "U+21C5.svg", [ 0x21C6 ] = "U+21C6.svg", [ 0x21C7 ] = "U+21C7.svg", [ 0x21C8 ] = "U+21C8.svg", [ 0x21C9 ] = "U+21C9.svg", [ 0x21CA ] = "U+21CA.svg", [ 0x21CB ] = "U+21CB.svg", [ 0x21CC ] = "U+21CC.svg", [ 0x21CD ] = "U+21CD.svg", [ 0x21CE ] = "U+21CE.svg", [ 0x21CF ] = "U+21CF.svg", [ 0x21D0 ] = "U+21D0.svg", [ 0x21D1 ] = "U+21D1.svg", [ 0x21D2 ] = "U+21D2.svg", [ 0x21D3 ] = "U+21D3.svg", [ 0x21D4 ] = "U+21D4.svg", [ 0x21D5 ] = "U+21D5.svg", [ 0x21D6 ] = "U+21D6.svg", [ 0x21D7 ] = "U+21D7.svg", [ 0x21D8 ] = "U+21D8.svg", [ 0x21D9 ] = "U+21D9.svg", [ 0x21DA ] = "U+21DA.svg", [ 0x21DB ] = "U+21DB.svg", [ 0x21DC ] = "U+21DC.svg", [ 0x21DD ] = "U+21DD.svg", [ 0x21DE ] = "U+21DE.svg", [ 0x21DF ] = "U+21DF.svg", [ 0x21E0 ] = "U+21E0.svg", [ 0x21E1 ] = "U+21E1.svg", [ 0x21E2 ] = "U+21E2.svg", [ 0x21E3 ] = "U+21E3.svg", [ 0x21E4 ] = "U+21E4.svg", [ 0x21E5 ] = "U+21E5.svg", [ 0x21E6 ] = "U+21E6.svg", [ 0x21E7 ] = "U+21E7.svg", [ 0x21E8 ] = "U+21E8.svg", [ 0x21E9 ] = "U+21E9.svg", [ 0x21EA ] = "U+21EA.svg", [ 0x21EB ] = "U+21EB.svg", [ 0x21EC ] = "U+21EC.svg", [ 0x21ED ] = "U+21ED.svg", [ 0x21EE ] = "U+21EE.svg", [ 0x21EF ] = "U+21EF.svg", [ 0x21F0 ] = "U+21F0.svg", [ 0x21F1 ] = "U+21F1.svg", [ 0x21F2 ] = "U+21F2.svg", [ 0x21F3 ] = "U+21F3.svg", [ 0x21F4 ] = "U+21F4.svg", [ 0x21F5 ] = "U+21F5.svg", [ 0x21F6 ] = "U+21F6.svg", [ 0x21F7 ] = "U+21F7.svg", [ 0x21F8 ] = "U+21F8.svg", [ 0x21F9 ] = "U+21F9.svg", [ 0x21FA ] = "U+21FA.svg", [ 0x21FB ] = "U+21FB.svg", [ 0x21FC ] = "U+21FC.svg", [ 0x21FD ] = "U+21FD.svg", [ 0x21FE ] = "U+21FE.svg", [ 0x21FF ] = "U+21FF.svg", [ 0x2200 ] = "Universal-quantification.svg", [ 0x2207 ] = "Nabla-symbol.svg", [ 0x220F ] = "U+220f.svg", [ 0x2210 ] = "U+2210.svg", [ 0x2213 ] = "Minus-or-plus sign.svg", [ 0x221A ] = "Root symbol.svg", [ 0x221E ] = "Infinite.svg", [ 0x222B ] = "WPint.svg", [ 0x222E ] = "OintLaTeX.svg", [ 0x222F ] = "OiintLaTeX.svg", [ 0x2230 ] = "OiiintLaTeX.svg", [ 0x2232 ] = "OintclockwiseLaTeX.svg", [ 0x2233 ] = "OintctrclockwiseLaTeX.svg", [ 0x2295 ] = "Circled plus.svg", [ 0x2296 ] = "Circled minus.svg", [ 0x2297 ] = "Circled times.svg", [ 0x2298 ] = "Circled slash.svg", [ 0x2299 ] = "Circled dot.svg", [ 0x229A ] = "Circled ring.svg", [ 0x229B ] = "Circled asterisk.svg", [ 0x229C ] = "Circled equals.svg", [ 0x229D ] = "Circled hyphen.svg", [ 0x229E ] = "Squared plus.svg", [ 0x229F ] = "Squared minus.svg", [ 0x22A0 ] = "Squared times.svg", [ 0x22A1 ] = "Squared dot.svg", [ 0x22A5 ] = "Up tack.svg", [ 0x2300 ] = "U+2300.svg", [ 0x2301 ] = "U+2301.svg", [ 0x2316 ] = "Position indicator.svg", [ 0x2317 ] = "Viewdata-square-12.5-percent-thickness-and-overshoot.svg", [ 0x2318 ] = "U+2318.svg", [ 0x231A ] = "Emoji u231a.svg", [ 0x231B ] = "Emoji u231b.svg", [ 0x232B ] = "ISOIEC-9995-7-017--ISO-7000-2023--Symbol-for-Backward-Delete.svg", [ 0x235F ] = "U+235F.svg", [ 0x237D ] = "ISOIEC-9995-7-010--ISO-7000-2016--Symbol-for-No-Break-Space.svg", [ 0x2384 ] = "ISOIEC-9995-7-015--ISO-7000-2021--Symbol-for-Compose-Character.svg", [ 0x2387 ] = "ISOIEC-9995-7-025--ISO-7000-2105--Symbol-for-Alternate.svg", [ 0x2388 ] = "Helm symbol.svg", [ 0x238B ] = "ISOIEC-9995-7-029--ISO-7000-2029--Symbol-for-Escape.svg", [ 0x2396 ] = "ISOIEC-9995-7-062--ISO-7000-1859--Symbol-for-Decimal-Separator.svg", [ 0x23A3 ] = "U+23A3.svg", [ 0x23B3 ] = "U+23B3.svg", [ 0x23DC ] = "上部连合.svg", [ 0x23DD ] = "基部连合.svg", [ 0x23E6 ] = "U+23E6.svg", [ 0x23E7 ] = "U+23E7.svg", [ 0x23E9 ] = "Emoji u23e9.svg", [ 0x23EA ] = "Emoji u23ea.svg", [ 0x23EB ] = "Emoji u23eb.svg", [ 0x23EC ] = "Emoji u23ec.svg", [ 0x23F0 ] = "Emoji u23f0.svg", [ 0x23F3 ] = "Emoji u23f3.svg", [ 0x2423 ] = "ISOIEC-9995-7-009--ISO-7000-2015--Symbol-for-Space.svg", [ 0x2440 ] = "OCR hook.svg", [ 0x2441 ] = "OCR chair.svg", [ 0x2442 ] = "OCR fork.svg", [ 0x2443 ] = "OCR inverted fork.svg", [ 0x2444 ] = "OCR belt buckle.svg", [ 0x2445 ] = "OCR bow tie.svg", [ 0x2446 ] = "OCR branch bank identification.svg", [ 0x2447 ] = "OCR amount of check.svg", [ 0x2448 ] = "OCR dash.svg", [ 0x2449 ] = "OCR customer account number.svg", [ 0x244A ] = "OCR double backslash.svg", [ 0x24C0 ] = "Circled latin capital letter k.svg", [ 0x2500 ] = "Gmftn shor.svg", [ 0x2502 ] = "Gmftn sver.svg", [ 0x2504 ] = "Gmftn dhor.svg", [ 0x2506 ] = "Gmftn dver.svg", [ 0x250C ] = "Gmftn scross1.svg", [ 0x2510 ] = "Gmftn scross2.svg", [ 0x2514 ] = "Gmftn scross3.svg", [ 0x2518 ] = "Gmftn scross4.svg", [ 0x251C ] = "Gmftn scross8.svg", [ 0x2524 ] = "Gmftn scross7.svg", [ 0x252C ] = "Gmftn scross6.svg", [ 0x2534 ] = "Gmftn scross5.svg", [ 0x253C ] = "Gmftn scross.svg", [ 0x25A0 ] = "U+25A0.svg", [ 0x25A1 ] = "U+25A1.svg", [ 0x25A2 ] = "U+25A2.svg", [ 0x25A3 ] = "U+25A3.svg", [ 0x25A4 ] = "U+25A4.svg", [ 0x25A5 ] = "U+25A5.svg", [ 0x25A6 ] = "U+25A6.svg", [ 0x25A7 ] = "U+25A7.svg", [ 0x25A8 ] = "U+25A8.svg", [ 0x25A9 ] = "U+25A9.svg", [ 0x25AA ] = "U+25AA.svg", [ 0x25AB ] = "U+25AB.svg", [ 0x25AC ] = "U+25AC.svg", [ 0x25AD ] = "U+25AD.svg", [ 0x25AE ] = "U+25AE.svg", [ 0x25AF ] = "U+25AF.svg", [ 0x25B0 ] = "U+25B0.svg", [ 0x25B1 ] = "U+25B1.svg", [ 0x25B2 ] = "U+25B2.svg", [ 0x25B3 ] = "U+25B3.svg", [ 0x25B4 ] = "U+25B4.svg", [ 0x25B5 ] = "U+25B5.svg", [ 0x25B6 ] = "U+25B6.svg", [ 0x25B7 ] = "U+25B7.svg", [ 0x25B8 ] = "U+25B8.svg", [ 0x25B9 ] = "U+25B9.svg", [ 0x25BA ] = "U+25BA.svg", [ 0x25BB ] = "U+25BB.svg", [ 0x25BC ] = "U+25BC.svg", [ 0x25BD ] = "U+25BD.svg", [ 0x25BE ] = "U+25BE.svg", [ 0x25BF ] = "U+25BF.svg", [ 0x25C0 ] = "U+25C0.svg", [ 0x25C1 ] = "U+25C1.svg", [ 0x25C2 ] = "U+25C2.svg", [ 0x25C3 ] = "U+25C3.svg", [ 0x25C4 ] = "U+25C4.svg", [ 0x25C5 ] = "U+25C5.svg", [ 0x25C6 ] = "U+25C6.svg", [ 0x25C7 ] = "U+25C7.svg", [ 0x25C8 ] = "U+25C8.svg", [ 0x25C9 ] = "U+25C9.svg", [ 0x25CA ] = "U+25CA.svg", [ 0x25CB ] = "U+25CB.svg", [ 0x25CC ] = "U+25CC.svg", [ 0x25CD ] = "U+25CD.svg", [ 0x25CE ] = "U+25CE.svg", [ 0x25CF ] = "U+25CF.svg", [ 0x25D0 ] = "U+25D0.svg", [ 0x25D1 ] = "U+25D1.svg", [ 0x25D2 ] = "U+25D2.svg", [ 0x25D3 ] = "U+25D3.svg", [ 0x25D4 ] = "U+25D4.svg", [ 0x25D5 ] = "U+25D5.svg", [ 0x25D6 ] = "U+25D6.svg", [ 0x25D7 ] = "U+25D7.svg", [ 0x25D8 ] = "U+25D8.svg", [ 0x25D9 ] = "U+25D9.svg", [ 0x25DA ] = "U+25DA.svg", [ 0x25DB ] = "U+25DB.svg", [ 0x25DC ] = "U+25DC.svg", [ 0x25DD ] = "U+25DD.svg", [ 0x25DE ] = "U+25DE.svg", [ 0x25DF ] = "U+25DF.svg", [ 0x25E0 ] = "U+25E0.svg", [ 0x25E1 ] = "U+25E1.svg", [ 0x25E2 ] = "U+25E2.svg", [ 0x25E3 ] = "U+25E3.svg", [ 0x25E4 ] = "U+25E4.svg", [ 0x25E5 ] = "U+25E5.svg", [ 0x25E6 ] = "U+25E6.svg", [ 0x25E7 ] = "U+25E7.svg", [ 0x25E8 ] = "U+25E8.svg", [ 0x25E9 ] = "U+25E9.svg", [ 0x25EA ] = "U+25EA.svg", [ 0x25EB ] = "U+25EB.svg", [ 0x25EC ] = "U+25EC.svg", [ 0x25ED ] = "U+25ED.svg", [ 0x25EE ] = "U+25EE.svg", [ 0x25EF ] = "U+25EF.svg", [ 0x25F0 ] = "U+25F0.svg", [ 0x25F1 ] = "U+25F1.svg", [ 0x25F2 ] = "U+25F2.svg", [ 0x25F3 ] = "U+25F3.svg", [ 0x25F4 ] = "U+25F4.svg", [ 0x25F5 ] = "U+25F5.svg", [ 0x25F6 ] = "U+25F6.svg", [ 0x25F7 ] = "U+25F7.svg", [ 0x25F8 ] = "U+25F8.svg", [ 0x25F9 ] = "U+25F9.svg", [ 0x25FA ] = "U+25FA.svg", [ 0x25FB ] = "U+25FB.svg", [ 0x25FC ] = "U+25FC.svg", [ 0x25FD ] = "U+25FD.svg", [ 0x25FE ] = "U+25FE.svg", [ 0x25FF ] = "U+25FF.svg", [ 0x2600 ] = "Black sun with rays (fixed width).svg", [ 0x2601 ] = "Cloud (fixed width).svg", [ 0x2602 ] = "U+2602.svg", [ 0x2603 ] = "U+2603.svg", [ 0x2604 ] = "Comet symbol (fixed width).svg", [ 0x2605 ] = "Solid star (fixed width).svg", [ 0x2606 ] = "Blank star (fixed width).svg", [ 0x2607 ] = "Symbol code ww 13.svg", [ 0x2608 ] = "Symbol code ww 17.svg", [ 0x2609 ] = "Sun symbol (fixed width).svg", [ 0x260A ] = "Ascending node (fixed width).svg", [ 0x260B ] = "Descending node (fixed width).svg", [ 0x260C ] = "Conjunction symbol.svg", [ 0x260D ] = "Opposition symbol.svg", [ 0x260E ] = "Emoji u260e.svg", [ 0x260F ] = "U+260F.svg", [ 0x2610 ] = "U+2610.svg", [ 0x2611 ] = "Check mark.svg", [ 0x2612 ] = "☒.svg", [ 0x2613 ] = "Japanese Map symbol (Koban).svg", [ 0x2614 ] = "Emoji u2614.svg", [ 0x2615 ] = "Emoji u2615.svg", [ 0x2616 ] = "Shogi blank.svg", [ 0x2617 ] = "Filled shogi blank.svg", [ 0x2618 ] = "Shamrock (fixed width).svg", [ 0x2619 ] = "Aldus leaf unicode2619.svg", [ 0x261D ] = "Emoji u261d.svg", [ 0x2620 ] = "Skull and Crossbones.svg", [ 0x2622 ] = "U+2622.svg", [ 0x2623 ] = "Biohazard symbol.svg", [ 0x2624 ] = "Caduceus.svg", [ 0x2625 ] = "Ankh.svg", [ 0x2626 ] = "Cross of the Russian Orthodox Church 01.svg", [ 0x2627 ] = "Simple Labarum2.svg", [ 0x2628 ] = "Cross-lorraine.svg", [ 0x2629 ] = "Cross-Potent-Heraldry.svg", [ 0x262A ] = "IslamSymbol1.svg", [ 0x262B ] = "Emblem of Iran.svg", [ 0x262C ] = "Khanda.svg", [ 0x262D ] = "U+262D.svg", [ 0x262E ] = "Peace symbol.svg", [ 0x262F ] = "U+262F.svg", [ 0x2630 ] = "Trigramme2630 ☰.svg", [ 0x2631 ] = "Trigramme2631 ☱.svg", [ 0x2632 ] = "Trigramme2632 ☲.svg", [ 0x2633 ] = "Trigramme2633 ☳.svg", [ 0x2634 ] = "Trigramme2634 ☴.svg", [ 0x2635 ] = "Trigramme2635 ☵.svg", [ 0x2636 ] = "Trigramme2636 ☶.svg", [ 0x2637 ] = "Trigramme2637 ☷.svg", [ 0x2638 ] = "Dharmacakra.svg", [ 0x2639 ] = "Iconoir emoji-sad.svg", [ 0x263A ] = "Iconoir emoji.svg", [ 0x263B ] = "Font Awesome 5 solid smile.svg", [ 0x263C ] = "Sun with rays (fixed width).svg", [ 0x263D ] = "Crescent symbol (fixed width).svg", [ 0x263E ] = "Decrescent symbol (fixed width).svg", [ 0x263F ] = "Mercury symbol (fixed width).svg", [ 0x2640 ] = "Venus symbol (fixed width).svg", [ 0x2641 ] = "Globus cruciger (fixed width).svg", [ 0x2642 ] = "Male symbol (fixed width).svg", [ 0x2643 ] = "Jupiter symbol (fixed width).svg", [ 0x2644 ] = "Saturn symbol (fixed width).svg", [ 0x2645 ] = "Uranus monogram (fixed width).svg", [ 0x2646 ] = "Neptune symbol (fixed width).svg", [ 0x2647 ] = "Pluto monogram.svg", [ 0x2648 ] = "Aries symbol (fixed width).svg", [ 0x2649 ] = "Taurus symbol (fixed width).svg", [ 0x264A ] = "Gemini symbol (fixed width).svg", [ 0x264B ] = "Cancer symbol (fixed width).svg", [ 0x264C ] = "Leo symbol (fixed width).svg", [ 0x264D ] = "Virgo symbol (fixed width).svg", [ 0x264E ] = "Libra symbol (fixed width).svg", [ 0x264F ] = "Scorpius symbol (fixed width).svg", [ 0x2650 ] = "Sagittarius symbol (fixed width).svg", [ 0x2651 ] = "Capricornus symbol (fixed width).svg", [ 0x2652 ] = "Aquarius symbol (fixed width).svg", [ 0x2653 ] = "Pisces symbol (fixed width).svg", [ 0x2654 ] = "Chess klt45.svg", [ 0x2655 ] = "Chess qlt45.svg", [ 0x2656 ] = "Chess rlt45.svg", [ 0x2657 ] = "Chess blt45.svg", [ 0x2658 ] = "Chess nlt45.svg", [ 0x2659 ] = "Chess plt45.svg", [ 0x265A ] = "Chess kdt45.svg", [ 0x265B ] = "Chess qdt45.svg", [ 0x265C ] = "Chess rdt45.svg", [ 0x265D ] = "Chess bdt45.svg", [ 0x265E ] = "Chess ndt45.svg", [ 0x265F ] = "Chess pdt45.svg", [ 0x2660 ] = "SuitSpades.svg", [ 0x2661 ] = "U+2661.svg", [ 0x2662 ] = "U+2662.svg", [ 0x2663 ] = "SuitClubs.svg", [ 0x2664 ] = "U+2664.svg", [ 0x2665 ] = "U+2665.svg", [ 0x2666 ] = "SuitDiamonds.svg", [ 0x2667 ] = "U+2667.svg", [ 0x2668 ] = "Onsen symbol.svg", [ 0x2669 ] = "1-4 note crotchet (music).svg", [ 0x266A ] = "1-8 note quaver (music).svg", [ 0x266B ] = "U+266B d.svg", [ 0x266C ] = "Figure rythmique deux double croches lien haut.svg", [ 0x266D ] = "Flat.svg", [ 0x266E ] = "Natural sign.svg", [ 0x266F ] = "Sharp.svg", [ 0x2670 ] = "Eastern Syriac Cross.svg", [ 0x2671 ] = "Western Syriac Cross.svg", [ 0x2672 ] = "U+2672.svg", [ 0x2673 ] = "U+2673 DejaVu Sans.svg", [ 0x2674 ] = "U+2674 DejaVu Sans.svg", [ 0x2675 ] = "U+2675 DejaVu Sans.svg", [ 0x2676 ] = "U+2676 DejaVu Sans.svg", [ 0x2677 ] = "U+2677 DejaVu Sans.svg", [ 0x2678 ] = "U+2678 DejaVu Sans.svg", [ 0x2679 ] = "U+2679 DejaVu Sans.svg", [ 0x267A ] = "U+267A.svg", [ 0x267B ] = "Emoji u267b.svg", [ 0x267C ] = "Simbolo reciclar.svg", [ 0x267E ] = "Acid-free paper (symbol).svg", [ 0x267F ] = "Iconoir accessibility-sign.svg", [ 0x2680 ] = "U+2680.svg", [ 0x2681 ] = "U+2681.svg", [ 0x2682 ] = "U+2682.svg", [ 0x2683 ] = "U+2683.svg", [ 0x2684 ] = "U+2684.svg", [ 0x2685 ] = "U+2685.svg", [ 0x2686 ] = "U+2686.svg", [ 0x2687 ] = "U+2687.svg", [ 0x2688 ] = "U+2688.svg", [ 0x2689 ] = "U+2689.svg", [ 0x268A ] = "TXJ 1.svg", [ 0x268B ] = "TXJ 2.svg", [ 0x268C ] = "TXJ 11.svg", [ 0x268D ] = "TXJ 12.svg", [ 0x268E ] = "TXJ 21.svg", [ 0x268F ] = "TXJ 22.svg", [ 0x2690 ] = "U+2690.svg", [ 0x2691 ] = "U+2691.svg", [ 0x2692 ] = "Schlaegel und Eisen nach DIN 21800.svg", [ 0x2693 ] = "Anchor (fixed width).svg", [ 0x2694 ] = "U+2694.svg", [ 0x2695 ] = "Rod of Asclepius (fixed width).svg", [ 0x2696 ] = "Scales-symbola.svg", [ 0x2698 ] = "Flora symbol (fixed width).svg", [ 0x2699 ] = "Japanese Map symbol (Lighthouse).svg", [ 0x269B ] = "U+269B.svg", [ 0x269C ] = "Lys lié.svg", [ 0x26A0 ] = "U+26A0.svg", [ 0x26A1 ] = "Emoji u26a1.svg", [ 0x26A2 ] = "Double Venus symbol.svg", [ 0x26A3 ] = "Double Mars symbol.svg", [ 0x26A4 ] = "Heterosexuality symbol.svg", [ 0x26A5 ] = "Male and female sign.svg", [ 0x26A6 ] = "Transgender symbol.svg", [ 0x26A7 ] = "Gender sign.svg", [ 0x26A8 ] = "U+26A8.svg", [ 0x26A9 ] = "U+26A9.svg", [ 0x26AA ] = "Agender symbol.svg", [ 0x26AC ] = "Engagement symbol.svg", [ 0x26AD ] = "Marriage symbol (fixed width).svg", [ 0x26AE ] = "Divorce symbol.svg", [ 0x26AF ] = "Arsenic symbol.svg", [ 0x26B2 ] = "Neuter symbol.svg", [ 0x26B3 ] = "Ceres symbol (fixed width).svg", [ 0x26B4 ] = "Pallas symbol (fixed width).svg", [ 0x26B5 ] = "Juno symbol (fixed width).svg", [ 0x26B6 ] = "Vesta symbol (fixed width).svg", [ 0x26B7 ] = "Chiron symbol (fixed width).svg", [ 0x26B8 ] = "Lilith symbol.svg", [ 0x26B9 ] = "Sextile symbol.svg", [ 0x26BA ] = "Semisextile symbol.svg", [ 0x26BB ] = "Quincunx symbol.svg", [ 0x26BC ] = "Sesquisquare symbol.svg", [ 0x26BD ] = "Emoji u26bd.svg", [ 0x26BE ] = "Emoji u26be.svg", [ 0x26BF ] = "Squared key.svg", [ 0x26C4 ] = "Emoji u26c4.svg", [ 0x26C5 ] = "Emoji u26c5.svg", [ 0x26C9 ] = "Inverted shogi blank.svg", [ 0x26CA ] = "Inverted filled shogi blank.svg", [ 0x26CB ] = "Squared diamond.svg", [ 0x26CE ] = "Ophiuchus symbol (fixed width).svg", [ 0x26D4 ] = "Emoji u26d4.svg", [ 0x26E2 ] = "Uranus symbol (fixed width).svg", [ 0x26E3 ] = "Japanese Map symbol (Government or Municipal office).svg", [ 0x26E4 ] = "Pentagram (fixed width).svg", [ 0x26E5 ] = "Interlaced pentagram (right).svg", [ 0x26E6 ] = "Interlaced pentagram (left).svg", [ 0x26E7 ] = "Inverted pentagram (fixed width).svg", [ 0x26E8 ] = "Japanese Map symbol (Hospital).svg", [ 0x26E9 ] = "U+26E9.svg", [ 0x26EA ] = "Emoji u26ea.svg", [ 0x26EB ] = "Japanese Map symbol (Castle).svg", [ 0x26EC ] = "Japanese Map symbol (Historical site-Place of scenic beauty-Natural monument-Protected animal plant).svg", [ 0x26ED ] = "Japanese Map symbol (Factory).svg", [ 0x26EE ] = "Japanese Map symbol (Power plant).svg", [ 0x26EF ] = "Japanese Map symbol (Lighthouse).svg", [ 0x26F2 ] = "Emoji u26f2.svg", [ 0x26F3 ] = "Emoji u26f3.svg", [ 0x26F5 ] = "Emoji u26f5.svg", [ 0x26F6 ] = "Four corners.svg", [ 0x26FA ] = "Emoji u26fa.svg", [ 0x26FB ] = "Bank symbol.svg", [ 0x26FD ] = "Emoji u26fd.svg", [ 0x26FF ] = "Japanese Map symbol (the Self-Defense Forces).svg", [ 0x2702 ] = "Emoji u2702.svg", [ 0x2705 ] = "Emoji u2705.svg", [ 0x2708 ] = "Emoji u2708.svg", [ 0x2709 ] = "Emoji u2709.svg", [ 0x270A ] = "Emoji u270a.svg", [ 0x270B ] = "Emoji u270b.svg", [ 0x270C ] = "Emoji u270c.svg", [ 0x270F ] = "Emoji u270f.svg", [ 0x2712 ] = "Emoji u2712.svg", [ 0x2713 ] = "Black check.svg", [ 0x2714 ] = "Emoji u2714.svg", [ 0x2716 ] = "Emoji u2716.svg", [ 0x2717 ] = "Black x.svg", [ 0x271D ] = "Latin-Cross-in-Zapf-Dingbats.svg", [ 0x2721 ] = "Black Star of David.svg", [ 0x2728 ] = "Emoji u2728.svg", [ 0x2733 ] = "Emoji u2733.svg", [ 0x2734 ] = "Emoji u2734.svg", [ 0x2744 ] = "Emoji u2744.svg", [ 0x2747 ] = "Emoji u2747.svg", [ 0x274C ] = "Emoji u274c.svg", [ 0x274E ] = "Emoji u274e.svg", [ 0x2753 ] = "Emoji u2753.svg", [ 0x2754 ] = "Emoji u2754.svg", [ 0x2755 ] = "Emoji u2755.svg", [ 0x2757 ] = "Emoji u2757.svg", [ 0x2761 ] = "Alinea.svg", [ 0x2763 ] = "Exclamation Mark Heart Black.svg", [ 0x2764 ] = "Emoji u2764.svg", [ 0x2766 ] = "Aldus leaf unicode2766.svg", [ 0x2767 ] = "Aldus leaf unicode2767.svg", [ 0x2795 ] = "Emoji u2795.svg", [ 0x2796 ] = "Emoji u2796.svg", [ 0x2797 ] = "Emoji u2797.svg", [ 0x27A1 ] = "Emoji u27a1.svg", [ 0x27B0 ] = "Emoji u27b0.svg", [ 0x27BF ] = "Emoji u27bf.svg", [ 0x27F0 ] = "Magna-hm.png", [ 0x2800 ] = "Braille NULL.svg", [ 0x2801 ] = "Braille A1.svg", [ 0x2802 ] = "Braille Comma.svg", [ 0x2803 ] = "Braille B2.svg", [ 0x2804 ] = "Braille Apostrophe.svg", [ 0x2805 ] = "Braille K.svg", [ 0x2806 ] = "Braille Semicolon.svg", [ 0x2807 ] = "Braille L.svg", [ 0x2808 ] = "Braille Accent.svg", [ 0x2809 ] = "Braille C3.svg", [ 0x280A ] = "Braille I9.svg", [ 0x280B ] = "Braille F6.svg", [ 0x280C ] = "Braille ST.svg", [ 0x280D ] = "Braille M.svg", [ 0x280E ] = "Braille S.svg", [ 0x280F ] = "Braille P.svg", [ 0x2810 ] = "Braille ContractionPrefix.svg", [ 0x2811 ] = "Braille E5.svg", [ 0x2812 ] = "Braille Colon.svg", [ 0x2813 ] = "Braille H8.svg", [ 0x2814 ] = "Braille Asterisk.svg", [ 0x2815 ] = "Braille O.svg", [ 0x2816 ] = "Braille ExclamationPoint.svg", [ 0x2817 ] = "Braille R.svg", [ 0x2818 ] = "Braille Currency.svg", [ 0x2819 ] = "Braille D4.svg", [ 0x281A ] = "Braille J0.svg", [ 0x281B ] = "Braille G7.svg", [ 0x281C ] = "Braille Ä.svg", [ 0x281D ] = "Braille N.svg", [ 0x281E ] = "Braille T.svg", [ 0x281F ] = "Braille Q.svg", [ 0x2820 ] = "Braille CapitalSign.svg", [ 0x2821 ] = "Braille Å.svg", [ 0x2822 ] = "Braille QuestionMark.svg", [ 0x2823 ] = "Braille Ê.svg", [ 0x2824 ] = "Braille Hyphen.svg", [ 0x2825 ] = "Braille U.svg", [ 0x2826 ] = "Braille QuoteOpen.svg", [ 0x2827 ] = "Braille V.svg", [ 0x2828 ] = "Braille DecimalPoint.svg", [ 0x2829 ] = "Braille SH.svg", [ 0x282A ] = "Braille Ö.svg", [ 0x282B ] = "Braille Ë.svg", [ 0x282C ] = "Braille Ò.svg", [ 0x282D ] = "Braille X.svg", [ 0x282E ] = "Braille È.svg", [ 0x282F ] = "Braille AND.svg", [ 0x2830 ] = "Braille Correction.svg", [ 0x2831 ] = "Braille Û.svg", [ 0x2832 ] = "Braille Period.svg", [ 0x2833 ] = "Braille Ü.svg", [ 0x2834 ] = "Braille QuoteClose.svg", [ 0x2835 ] = "Braille Z.svg", [ 0x2836 ] = "Braille Bracket.svg", [ 0x2837 ] = "Braille À.svg", [ 0x2838 ] = "Braille CursiveSign.svg", [ 0x2839 ] = "Braille Ô.svg", [ 0x283A ] = "Braille W.svg", [ 0x283B ] = "Braille Ï.svg", [ 0x283C ] = "Braille NumberSign.svg", [ 0x283D ] = "Braille Y.svg", [ 0x283E ] = "Braille Ù.svg", [ 0x283F ] = "Braille É.svg", [ 0x2840 ] = "Braille8 Dots-7.svg", [ 0x2841 ] = "Braille8 Dots-17.svg", [ 0x2842 ] = "Braille8 Dots-27.svg", [ 0x2843 ] = "Braille8 Dots-127.svg", [ 0x2844 ] = "Braille8 Dots-37.svg", [ 0x2845 ] = "Braille8 Dots-137.svg", [ 0x2846 ] = "Braille8 Dots-237.svg", [ 0x2847 ] = "Braille8 Dots-1237.svg", [ 0x2848 ] = "Braille8 Dots-47.svg", [ 0x2849 ] = "Braille8 Dots-147.svg", [ 0x284A ] = "Braille8 Dots-427.svg", [ 0x284B ] = "Braille8 Dots-1427.svg", [ 0x284C ] = "Braille8 Dots-437.svg", [ 0x284D ] = "Braille8 Dots-1437.svg", [ 0x284E ] = "Braille8 Dots-4237.svg", [ 0x284F ] = "Braille8 Dots-14237.svg", [ 0x2850 ] = "Braille8 Dots-57.svg", [ 0x2851 ] = "Braille8 Dots-157.svg", [ 0x2852 ] = "Braille8 Dots-257.svg", [ 0x2853 ] = "Braille8 Dots-1257.svg", [ 0x2854 ] = "Braille8 Dots-537.svg", [ 0x2855 ] = "Braille8 Dots-1537.svg", [ 0x2856 ] = "Braille8 Dots-2537.svg", [ 0x2857 ] = "Braille8 Dots-12537.svg", [ 0x2858 ] = "Braille8 Dots-457.svg", [ 0x2859 ] = "Braille8 Dots-1457.svg", [ 0x285A ] = "Braille8 Dots-4257.svg", [ 0x285B ] = "Braille8 Dots-14257.svg", [ 0x285C ] = "Braille8 Dots-4537.svg", [ 0x285D ] = "Braille8 Dots-14537.svg", [ 0x285E ] = "Braille8 Dots-42537.svg", [ 0x285F ] = "Braille8 Dots-142537.svg", [ 0x2860 ] = "Braille8 Dots-67.svg", [ 0x2861 ] = "Braille8 Dots-167.svg", [ 0x2862 ] = "Braille8 Dots-267.svg", [ 0x2863 ] = "Braille8 Dots-1267.svg", [ 0x2864 ] = "Braille8 Dots-367.svg", [ 0x2865 ] = "Braille8 Dots-1367.svg", [ 0x2866 ] = "Braille8 Dots-2367.svg", [ 0x2867 ] = "Braille8 Dots-12367.svg", [ 0x2868 ] = "Braille8 Dots-467.svg", [ 0x2869 ] = "Braille8 Dots-1467.svg", [ 0x286A ] = "Braille8 Dots-4267.svg", [ 0x286B ] = "Braille8 Dots-14267.svg", [ 0x286C ] = "Braille8 Dots-4367.svg", [ 0x286D ] = "Braille8 Dots-14367.svg", [ 0x286E ] = "Braille8 Dots-42367.svg", [ 0x286F ] = "Braille8 Dots-142367.svg", [ 0x2870 ] = "Braille8 Dots-567.svg", [ 0x2871 ] = "Braille8 Dots-1567.svg", [ 0x2872 ] = "Braille8 Dots-2567.svg", [ 0x2873 ] = "Braille8 Dots-12567.svg", [ 0x2874 ] = "Braille8 Dots-5367.svg", [ 0x2875 ] = "Braille8 Dots-15367.svg", [ 0x2876 ] = "Braille8 Dots-25367.svg", [ 0x2877 ] = "Braille8 Dots-125367.svg", [ 0x2878 ] = "Braille8 Dots-4567.svg", [ 0x2879 ] = "Braille8 Dots-14567.svg", [ 0x287A ] = "Braille8 Dots-42567.svg", [ 0x287B ] = "Braille8 Dots-142567.svg", [ 0x287C ] = "Braille8 Dots-45367.svg", [ 0x287D ] = "Braille8 Dots-145367.svg", [ 0x287E ] = "Braille8 Dots-425367.svg", [ 0x287F ] = "Braille8 Dots-1425367.svg", [ 0x2880 ] = "Braille8 Dots-8.svg", [ 0x2881 ] = "Braille8 Dots-18.svg", [ 0x2882 ] = "Braille8 Dots-28.svg", [ 0x2883 ] = "Braille8 Dots-128.svg", [ 0x2884 ] = "Braille8 Dots-38.svg", [ 0x2885 ] = "Braille8 Dots-138.svg", [ 0x2886 ] = "Braille8 Dots-238.svg", [ 0x2887 ] = "Braille8 Dots-1238.svg", [ 0x2888 ] = "Braille8 Dots-48.svg", [ 0x2889 ] = "Braille8 Dots-148.svg", [ 0x288A ] = "Braille8 Dots-428.svg", [ 0x288B ] = "Braille8 Dots-1428.svg", [ 0x288C ] = "Braille8 Dots-438.svg", [ 0x288D ] = "Braille8 Dots-1438.svg", [ 0x288E ] = "Braille8 Dots-4238.svg", [ 0x288F ] = "Braille8 Dots-14238.svg", [ 0x2890 ] = "Braille8 Dots-58.svg", [ 0x2891 ] = "Braille8 Dots-158.svg", [ 0x2892 ] = "Braille8 Dots-258.svg", [ 0x2893 ] = "Braille8 Dots-1258.svg", [ 0x2894 ] = "Braille8 Dots-538.svg", [ 0x2895 ] = "Braille8 Dots-1538.svg", [ 0x2896 ] = "Braille8 Dots-2538.svg", [ 0x2897 ] = "Braille8 Dots-12538.svg", [ 0x2898 ] = "Braille8 Dots-458.svg", [ 0x2899 ] = "Braille8 Dots-1458.svg", [ 0x289A ] = "Braille8 Dots-4258.svg", [ 0x289B ] = "Braille8 Dots-14258.svg", [ 0x289C ] = "Braille8 Dots-4538.svg", [ 0x289D ] = "Braille8 Dots-14538.svg", [ 0x289E ] = "Braille8 Dots-42538.svg", [ 0x289F ] = "Braille8 Dots-142538.svg", [ 0x28A0 ] = "Braille8 Dots-68.svg", [ 0x28A1 ] = "Braille8 Dots-168.svg", [ 0x28A2 ] = "Braille8 Dots-268.svg", [ 0x28A3 ] = "Braille8 Dots-1268.svg", [ 0x28A4 ] = "Braille8 Dots-368.svg", [ 0x28A5 ] = "Braille8 Dots-1368.svg", [ 0x28A6 ] = "Braille8 Dots-2368.svg", [ 0x28A7 ] = "Braille8 Dots-12368.svg", [ 0x28A8 ] = "Braille8 Dots-468.svg", [ 0x28A9 ] = "Braille8 Dots-1468.svg", [ 0x28AA ] = "Braille8 Dots-4268.svg", [ 0x28AB ] = "Braille8 Dots-14268.svg", [ 0x28AC ] = "Braille8 Dots-4368.svg", [ 0x28AD ] = "Braille8 Dots-14368.svg", [ 0x28AE ] = "Braille8 Dots-42368.svg", [ 0x28AF ] = "Braille8 Dots-142368.svg", [ 0x28B0 ] = "Braille8 Dots-568.svg", [ 0x28B1 ] = "Braille8 Dots-1568.svg", [ 0x28B2 ] = "Braille8 Dots-2568.svg", [ 0x28B3 ] = "Braille8 Dots-12568.svg", [ 0x28B4 ] = "Braille8 Dots-5368.svg", [ 0x28B5 ] = "Braille8 Dots-15368.svg", [ 0x28B6 ] = "Braille8 Dots-25368.svg", [ 0x28B7 ] = "Braille8 Dots-125368.svg", [ 0x28B8 ] = "Braille8 Dots-4568.svg", [ 0x28B9 ] = "Braille8 Dots-14568.svg", [ 0x28BA ] = "Braille8 Dots-42568.svg", [ 0x28BB ] = "Braille8 Dots-142568.svg", [ 0x28BC ] = "Braille8 Dots-45368.svg", [ 0x28BD ] = "Braille8 Dots-145368.svg", [ 0x28BE ] = "Braille8 Dots-425368.svg", [ 0x28BF ] = "Braille8 Dots-1425368.svg", [ 0x28C0 ] = "Braille8 Dots-78.svg", [ 0x28C1 ] = "Braille8 Dots-178.svg", [ 0x28C2 ] = "Braille8 Dots-278.svg", [ 0x28C3 ] = "Braille8 Dots-1278.svg", [ 0x28C4 ] = "Braille8 Dots-378.svg", [ 0x28C5 ] = "Braille8 Dots-1378.svg", [ 0x28C6 ] = "Braille8 Dots-2378.svg", [ 0x28C7 ] = "Braille8 Dots-12378.svg", [ 0x28C8 ] = "Braille8 Dots-478.svg", [ 0x28C9 ] = "Braille8 Dots-1478.svg", [ 0x28CA ] = "Braille8 Dots-4278.svg", [ 0x28CB ] = "Braille8 Dots-14278.svg", [ 0x28CC ] = "Braille8 Dots-4378.svg", [ 0x28CD ] = "Braille8 Dots-14378.svg", [ 0x28CE ] = "Braille8 Dots-42378.svg", [ 0x28CF ] = "Braille8 Dots-142378.svg", [ 0x28D0 ] = "Braille8 Dots-578.svg", [ 0x28D1 ] = "Braille8 Dots-1578.svg", [ 0x28D2 ] = "Braille8 Dots-2578.svg", [ 0x28D3 ] = "Braille8 Dots-12578.svg", [ 0x28D4 ] = "Braille8 Dots-5378.svg", [ 0x28D5 ] = "Braille8 Dots-15378.svg", [ 0x28D6 ] = "Braille8 Dots-25378.svg", [ 0x28D7 ] = "Braille8 Dots-125378.svg", [ 0x28D8 ] = "Braille8 Dots-4578.svg", [ 0x28D9 ] = "Braille8 Dots-14578.svg", [ 0x28DA ] = "Braille8 Dots-42578.svg", [ 0x28DB ] = "Braille8 Dots-142578.svg", [ 0x28DC ] = "Braille8 Dots-45378.svg", [ 0x28DD ] = "Braille8 Dots-145378.svg", [ 0x28DE ] = "Braille8 Dots-425378.svg", [ 0x28DF ] = "Braille8 Dots-1425378.svg", [ 0x28E0 ] = "Braille8 Dots-678.svg", [ 0x28E1 ] = "Braille8 Dots-1678.svg", [ 0x28E2 ] = "Braille8 Dots-2678.svg", [ 0x28E3 ] = "Braille8 Dots-12678.svg", [ 0x28E4 ] = "Braille8 Dots-3678.svg", [ 0x28E5 ] = "Braille8 Dots-13678.svg", [ 0x28E6 ] = "Braille8 Dots-23678.svg", [ 0x28E7 ] = "Braille8 Dots-123678.svg", [ 0x28E8 ] = "Braille8 Dots-4678.svg", [ 0x28E9 ] = "Braille8 Dots-14678.svg", [ 0x28EA ] = "Braille8 Dots-42678.svg", [ 0x28EB ] = "Braille8 Dots-142678.svg", [ 0x28EC ] = "Braille8 Dots-43678.svg", [ 0x28ED ] = "Braille8 Dots-143678.svg", [ 0x28EE ] = "Braille8 Dots-423678.svg", [ 0x28EF ] = "Braille8 Dots-1423678.svg", [ 0x28F0 ] = "Braille8 Dots-5678.svg", [ 0x28F1 ] = "Braille8 Dots-15678.svg", [ 0x28F2 ] = "Braille8 Dots-25678.svg", [ 0x28F3 ] = "Braille8 Dots-125678.svg", [ 0x28F4 ] = "Braille8 Dots-53678.svg", [ 0x28F5 ] = "Braille8 Dots-153678.svg", [ 0x28F6 ] = "Braille8 Dots-253678.svg", [ 0x28F7 ] = "Braille8 Dots-1253678.svg", [ 0x28F8 ] = "Braille8 Dots-45678.svg", [ 0x28F9 ] = "Braille8 Dots-145678.svg", [ 0x28FA ] = "Braille8 Dots-425678.svg", [ 0x28FB ] = "Braille8 Dots-1425678.svg", [ 0x28FC ] = "Braille8 Dots-453678.svg", [ 0x28FD ] = "Braille8 Dots-1453678.svg", [ 0x28FE ] = "Braille8 Dots-4253678.svg", [ 0x28FF ] = "Braille8 Dots-14253678.svg", [ 0x2934 ] = "Emoji u2934.svg", [ 0x2935 ] = "Emoji u2935.svg", [ 0x29B0 ] = "Reverse empty set.svg", [ 0x29B5 ] = "Circle with horizontal bar.svg", [ 0x29B6 ] = "Nitrogen symbol (Dalton).svg", [ 0x29B7 ] = "Sodium symbol (Dalton).svg", [ 0x29BA ] = "T-and-O map symbol (inverted).svg", [ 0x29BB ] = "Tutty symbol.svg", [ 0x29BE ] = "Circled white bullet.svg", [ 0x29BF ] = "Circled bullet.svg", [ 0x29DF ] = "Arsenic symbol.svg", [ 0x29E7 ] = "Thermodynamic-using-cambria-math.svg", [ 0x29EC ] = "Eris arrow symbol (fixed width).svg", [ 0x2A71 ] = "Equals sign above plus sign.svg", [ 0x2A72 ] = "Plus sign above equals sign.svg", [ 0x2B05 ] = "Emoji u2b05.svg", [ 0x2B06 ] = "Emoji u2b06.svg", [ 0x2B07 ] = "Emoji u2b07.svg", [ 0x2B1B ] = "Emoji u2b1b.svg", [ 0x2B1C ] = "Square symbol.svg", [ 0x2B20 ] = "Pentagon symbol.svg", [ 0x2B21 ] = "Hexagon (fixed width).svg", [ 0x2B50 ] = "Emoji u2b50.svg", [ 0x2B55 ] = "Emoji u2b55.svg", [ 0x2B59 ] = "Japanese Map symbol (Police station).svg", [ 0x2BA0 ] = "ISOIEC-9995-7-023--ISO-7000-0651--Symbol-for-Return-New-Line.svg", [ 0x2BBA ] = "Overlapping white squares.svg", [ 0x2BBB ] = "Overlapping white and black squares.svg", [ 0x2BBC ] = "Overlapping black squares.svg", [ 0x2BC9 ] = "Neptune monogram (fixed width).svg", [ 0x2BCE ] = "Four-point cusp.svg", [ 0x2BCF ] = "Rotated four-point cusp.svg", [ 0x2BD0 ] = "Position indicator (square).svg", [ 0x2BD3 ] = "Pluto symbol (fixed width).svg", [ 0x2BD4 ] = "Pluto symbol (southern Europe).svg", [ 0x2BD5 ] = "Charon symbol (fixed width).svg", [ 0x2BD6 ] = "Pluto symbol (northern Europe).svg", [ 0x2BD7 ] = "Astrological symbol for the hypothetical planet Transpluto.svg", [ 0x2BD8 ] = "Astrological symbol for the hypothetical planet Proserpina.svg", [ 0x2BD9 ] = "Astraea symbol (astrology, fixed width).svg", [ 0x2BDA ] = "Hygiea symbol (astrological, fixed width).svg", [ 0x2BDB ] = "Pholus symbol.svg", [ 0x2BDC ] = "Nessus symbol.svg", [ 0x2BDD ] = "Astrological symbol for White Moon Selena.svg", [ 0x2BDE ] = "True Black Moon Lilith.svg", [ 0x2BDF ] = "Astrological symbol for True Light Moon Arta.svg", [ 0x2BE0 ] = "Astrological planet Cupido.svg", [ 0x2BE1 ] = "Astrological planet Hades.svg", [ 0x2BE2 ] = "Astrological planet Zeus.svg", [ 0x2BE3 ] = "Astrological planet Kronos.svg", [ 0x2BE4 ] = "Astrological planet Apollon.svg", [ 0x2BE5 ] = "Astrological planet Admetos.svg", [ 0x2BE6 ] = "Astrological planet Vulcanus.svg", [ 0x2BE7 ] = "Astrological planet Poseidon.svg", [ 0x2BE8 ] = "Left half star.svg", [ 0x2BE9 ] = "Right half star.svg", [ 0x2BEA ] = "Star solid left.svg", [ 0x2BEB ] = "Star solid right.svg", [ 0x2BF0 ] = "Eris symbol (fixed width).svg", [ 0x2BF1 ] = "Eris arrow symbol (fixed width).svg", [ 0x2BF2 ] = "Sedna symbol (fixed width).svg", [ 0x2BF3 ] = "Russian astrological symbol vigintile.svg", [ 0x2BF4 ] = "Russian astrological symbol novile.svg", [ 0x2BF5 ] = "Russian astrological symbol quintile.svg", [ 0x2BF6 ] = "Russian astrological symbol binovile.svg", [ 0x2BF7 ] = "Russian astrological symbol sentagon.svg", [ 0x2BF8 ] = "Russian astrological symbol tredecile.svg", [ 0x2BF9 ] = "Equals sign with infinity below.svg", [ 0x2BFA ] = "United symbol.svg", [ 0x2BFB ] = "Separated symbol.svg", [ 0x2BFC ] = "Doubled symbol.svg", [ 0x2BFD ] = "Mars symbol up arrow.svg", [ 0x2C00 ] = "Glagolitic az.svg", [ 0x2C01 ] = "Glagolitic buky.svg", [ 0x2C02 ] = "Glagolitic vedi.svg", [ 0x2C03 ] = "Glagolitic glagoli.svg", [ 0x2C04 ] = "Glagolitic dobro.svg", [ 0x2C05 ] = "Glagolitic jest.svg", [ 0x2C06 ] = "Glagolitic zhivete.svg", [ 0x2C07 ] = "Glagolitic dzelo.svg", [ 0x2C08 ] = "Glagolitic zemlja.svg", [ 0x2C09 ] = "Glagolitic Iota.svg", [ 0x2C0A ] = "Glagolitic izhe.svg", [ 0x2C0B ] = "Glagolitic i.svg", [ 0x2C0C ] = "Glagolitic djerv.svg", [ 0x2C0D ] = "Glagolitic kako.svg", [ 0x2C0E ] = "Glagolitic ljudi.svg", [ 0x2C0F ] = "Glagolitic mislete.svg", [ 0x2C10 ] = "Glagolitic nash.svg", [ 0x2C11 ] = "Glagolitic on.svg", [ 0x2C12 ] = "Glagolitic pokoi.svg", [ 0x2C13 ] = "Glagolitic rtsi.svg", [ 0x2C14 ] = "Glagolitic slovo.svg", [ 0x2C15 ] = "Glagolitic tverdo.svg", [ 0x2C16 ] = "Glagolitic uk.svg", [ 0x2C17 ] = "Glagolitic fert.svg", [ 0x2C18 ] = "Glagolitic kher.svg", [ 0x2C19 ] = "Glagolitic ot.svg", [ 0x2C1A ] = "Glagolitic shta.svg", [ 0x2C1B ] = "Glagolitic tsi.svg", [ 0x2C1C ] = "Glagolitic cherv.svg", [ 0x2C1D ] = "Glagolitic sha.svg", [ 0x2C1E ] = "Glagolitic yer.svg", [ 0x2C1F ] = "Glagolitic yeri.svg", [ 0x2C20 ] = "Glagolitic yerj.svg", [ 0x2C21 ] = "Glagolitic yat.svg", [ 0x2C22 ] = "Glagolitic capital letter Spidery Ha.svg", [ 0x2C23 ] = "Glagolitic yu.svg", [ 0x2C24 ] = "Glagolitic ens.svg", [ 0x2C25 ] = "Glagolitic capital letter Small Yus with tail.svg", [ 0x2C26 ] = "Glagolitic capital letter Yo.svg", [ 0x2C27 ] = "Glagolitic yens.svg", [ 0x2C28 ] = "Glagolitic ons.svg", [ 0x2C29 ] = "Glagolitic yons.svg", [ 0x2C2A ] = "Glagolitic fita.svg", [ 0x2C2B ] = "Glagolitic izhitsa.svg", [ 0x2C2C ] = "Glagolitic capital letter Shtapic.svg", [ 0x2C2D ] = "Glagolitic Letter Trokutasti A.svg", [ 0x2C2E ] = "Glagolitic capital letter Latinate Myslite.svg", [ 0x2C7A ] = "OwLowRingInside.svg", [ 0x2C80 ] = "Coptic Alpha-maj.svg", [ 0x2C81 ] = "Coptic Alpha-min.svg", [ 0x2C82 ] = "Coptic Beta-maj.svg", [ 0x2C83 ] = "Coptic Beta-min.svg", [ 0x2C84 ] = "Coptic Gamma-maj.svg", [ 0x2C85 ] = "Coptic Gamma-min.svg", [ 0x2C86 ] = "Coptic Dalda-maj.svg", [ 0x2C87 ] = "Coptic Dalda-min.svg", [ 0x2C88 ] = "Coptic Ei-maj.svg", [ 0x2C89 ] = "Coptic Ei-min.svg", [ 0x2C8A ] = "Coptic Sou.svg", [ 0x2C8C ] = "Coptic Zeta-maj.svg", [ 0x2C8D ] = "Coptic Zeta-min.svg", [ 0x2C8E ] = "Coptic Eta-maj.svg", [ 0x2C8F ] = "Coptic Eta-min.svg", [ 0x2C90 ] = "Coptic Theta-maj.svg", [ 0x2C91 ] = "Coptic Theta-min.svg", [ 0x2C92 ] = "Coptic Iota-maj.svg", [ 0x2C93 ] = "Coptic Iota-min.svg", [ 0x2C94 ] = "Coptic Kappa-maj.svg", [ 0x2C95 ] = "Coptic Kappa-min.svg", [ 0x2C96 ] = "Coptic Laula-maj.svg", [ 0x2C97 ] = "Coptic Laula-min.svg", [ 0x2C98 ] = "Coptic Me-maj.svg", [ 0x2C99 ] = "Coptic Me-min.svg", [ 0x2C9A ] = "Coptic Ne-maj.svg", [ 0x2C9B ] = "Coptic Ne-min.svg", [ 0x2C9C ] = "Coptic Kxi-maj.svg", [ 0x2C9D ] = "Coptic Kxi-min.svg", [ 0x2C9E ] = "Coptic Ou-maj.svg", [ 0x2C9F ] = "Coptic Ou-min.svg", [ 0x2CA0 ] = "Coptic Pi-maj.svg", [ 0x2CA1 ] = "Coptic Pi-min.svg", [ 0x2CA2 ] = "Coptic Ro-maj.svg", [ 0x2CA3 ] = "Coptic Ro-min.svg", [ 0x2CA4 ] = "Coptic Semma-maj.svg", [ 0x2CA5 ] = "Coptic Semma-min.svg", [ 0x2CA6 ] = "Coptic Tau-maj.svg", [ 0x2CA7 ] = "Coptic Tau-min.svg", [ 0x2CA8 ] = "Coptic He-maj.svg", [ 0x2CA9 ] = "Coptic He-min.svg", [ 0x2CAA ] = "Coptic Phi-maj.svg", [ 0x2CAB ] = "Coptic Phi-min.svg", [ 0x2CAC ] = "Coptic Khi-maj.svg", [ 0x2CAD ] = "Coptic Khi-min.svg", [ 0x2CAE ] = "Coptic Pxi-maj.svg", [ 0x2CAF ] = "Coptic Pxi-min.svg", [ 0x2CB0 ] = "Coptic O-maj.svg", [ 0x2CB1 ] = "Coptic O-min.svg", [ 0x2CC0 ] = "Coptic Sampi.svg", [ 0x2CE7 ] = "Coptic Stauros.svg", [ 0x2CE9 ] = "Coptic Khi Ro.svg", [ 0x2D30 ] = "Tifinagh Letter Ya.svg", [ 0x2D31 ] = "Tifinagh Letter Yab.svg", [ 0x2D32 ] = "Tifinagh Letter Yabh.svg", [ 0x2D33 ] = "Tifinagh Letter Yag.svg", [ 0x2D34 ] = "Tifinagh Letter Yaghh.svg", [ 0x2D35 ] = "Tifinagh Letter Berber Academy Yaj.svg", [ 0x2D36 ] = "Tifinagh Letter Yaj.svg", [ 0x2D37 ] = "Tifinagh Letter Yad.svg", [ 0x2D38 ] = "Tifinagh Letter Yadh.svg", [ 0x2D39 ] = "Tifinagh Letter Yadd.svg", [ 0x2D3A ] = "Tifinagh Letter Yaddh.svg", [ 0x2D3B ] = "Tifinagh Letter Yey.svg", [ 0x2D3C ] = "Tifinagh Letter Yaf.svg", [ 0x2D3D ] = "Tifinagh Letter Yak.svg", [ 0x2D3E ] = "Tifinagh Letter Tuareg Yak.svg", [ 0x2D3F ] = "Tifinagh Letter Yakhh.svg", [ 0x2D40 ] = "Tifinagh Letter Yah.svg", [ 0x2D41 ] = "Tifinagh Letter Berber Academy Yah.svg", [ 0x2D42 ] = "Tifinagh Letter Tuareg Yah.svg", [ 0x2D43 ] = "Tifinagh Letter Yahh.svg", [ 0x2D44 ] = "Tifinagh Letter Yaa.svg", [ 0x2D45 ] = "Tifinagh Letter Yakh.svg", [ 0x2D46 ] = "Tifinagh Letter Tuareg Yakh.svg", [ 0x2D47 ] = "Tifinagh Letter Yaq.svg", [ 0x2D48 ] = "Tifinagh Letter Tuareg Yaq.svg", [ 0x2D49 ] = "Tifinagh Letter Yi.svg", [ 0x2D4A ] = "Tifinagh Letter Yazh.svg", [ 0x2D4B ] = "Tifinagh Letter Ahaggar Yazh.svg", [ 0x2D4C ] = "Tifinagh Letter Tuareg Yazh.svg", [ 0x2D4D ] = "Tifinagh Letter Yal.svg", [ 0x2D4E ] = "Tifinagh Letter Yam.svg", [ 0x2D4F ] = "Tifinagh Letter Yan.svg", [ 0x2D50 ] = "Tifinagh Letter Tuareg Yagn.svg", [ 0x2D51 ] = "Tifinagh Letter Tuareg Yang.svg", [ 0x2D52 ] = "Tifinagh Letter Yap.svg", [ 0x2D53 ] = "Tifinagh Letter Yu.svg", [ 0x2D54 ] = "Tifinagh Letter Yar.svg", [ 0x2D55 ] = "Tifinagh Letter Yarr.svg", [ 0x2D56 ] = "Tifinagh Letter Yagh.svg", [ 0x2D57 ] = "Tifinagh Letter Tuareg Yagh.svg", [ 0x2D58 ] = "Tifinagh Letter Ayer Yagh.svg", [ 0x2D59 ] = "Tifinagh Letter Yas.svg", [ 0x2D5A ] = "Tifinagh Letter Yass.svg", [ 0x2D5B ] = "Tifinagh Letter Yash.svg", [ 0x2D5C ] = "Tifinagh Letter Yat.svg", [ 0x2D5D ] = "Tifinagh Letter Yath.svg", [ 0x2D5E ] = "Tifinagh Letter Yach.svg", [ 0x2D5F ] = "Tifinagh Letter Yatt.svg", [ 0x2D60 ] = "Tifinagh Letter Yav.svg", [ 0x2D61 ] = "Tifinagh Letter Yaw.svg", [ 0x2D62 ] = "Tifinagh Letter Yay.svg", [ 0x2D63 ] = "Tifinagh Letter Yaz.svg", [ 0x2D64 ] = "Tifinagh Letter Tawellemet Yaz.svg", [ 0x2D65 ] = "Tifinagh Letter Yazz.svg", [ 0x2D66 ] = "Tifinagh Letter Ye.svg", [ 0x2D67 ] = "Tifinagh Letter Yo.svg", [ 0x2D6F ] = "Tifinagh Modifier Letter Labialization Mark.svg", [ 0x2D70 ] = "Tifinagh Separator Mark.svg", [ 0x2D7F ] = "Tifinagh Consonant Joiner.svg", [ 0x2D80 ] = "ETHIOPIC SYLLABLE LOA.svg", [ 0x2D81 ] = "ETHIOPIC SYLLABLE MOA.svg", [ 0x2D82 ] = "ETHIOPIC SYLLABLE ROA.svg", [ 0x2D83 ] = "ETHIOPIC SYLLABLE SOA.svg", [ 0x2D84 ] = "ETHIOPIC SYLLABLE SHOA.svg", [ 0x2D85 ] = "ETHIOPIC SYLLABLE BOA.svg", [ 0x2D86 ] = "ETHIOPIC SYLLABLE TOA.svg", [ 0x2D87 ] = "ETHIOPIC SYLLABLE COA.svg", [ 0x2D88 ] = "ETHIOPIC SYLLABLE NOA.svg", [ 0x2D89 ] = "ETHIOPIC SYLLABLE NYOA.svg", [ 0x2D8A ] = "ETHIOPIC SYLLABLE GLOTTAL OA.svg", [ 0x2D8B ] = "ETHIOPIC SYLLABLE ZOA.svg", [ 0x2D8C ] = "ETHIOPIC SYLLABLE DOA.svg", [ 0x2D8D ] = "ETHIOPIC SYLLABLE DDOA.svg", [ 0x2D8E ] = "ETHIOPIC SYLLABLE JOA.svg", [ 0x2D8F ] = "ETHIOPIC SYLLABLE THOA.svg", [ 0x2D90 ] = "ETHIOPIC SYLLABLE CHOA.svg", [ 0x2D91 ] = "ETHIOPIC SYLLABLE PHOA.svg", [ 0x2D92 ] = "ETHIOPIC SYLLABLE POA.svg", [ 0x2D93 ] = "ETHIOPIC SYLLABLE GGWA.svg", [ 0x2D94 ] = "ETHIOPIC SYLLABLE GGWI.svg", [ 0x2D95 ] = "ETHIOPIC SYLLABLE GGWEE.svg", [ 0x2D96 ] = "ETHIOPIC SYLLABLE GGWE.svg", [ 0x2DA0 ] = "ETHIOPIC SYLLABLE SSA.svg", [ 0x2DA1 ] = "ETHIOPIC SYLLABLE SSU.svg", [ 0x2DA2 ] = "ETHIOPIC SYLLABLE SSI.svg", [ 0x2DA3 ] = "ETHIOPIC SYLLABLE SSAA.svg", [ 0x2DA4 ] = "ETHIOPIC SYLLABLE SSEE.svg", [ 0x2DA5 ] = "ETHIOPIC SYLLABLE SSE.svg", [ 0x2DA6 ] = "ETHIOPIC SYLLABLE SSO.svg", [ 0x2DA8 ] = "ETHIOPIC SYLLABLE CCA.svg", [ 0x2DA9 ] = "ETHIOPIC SYLLABLE CCU.svg", [ 0x2DAA ] = "ETHIOPIC SYLLABLE CCI.svg", [ 0x2DAB ] = "ETHIOPIC SYLLABLE CCAA.svg", [ 0x2DAC ] = "ETHIOPIC SYLLABLE CCEE.svg", [ 0x2DAD ] = "ETHIOPIC SYLLABLE CCE.svg", [ 0x2DAE ] = "ETHIOPIC SYLLABLE CCO.svg", [ 0x2DB0 ] = "ETHIOPIC SYLLABLE ZZA.svg", [ 0x2DB1 ] = "ETHIOPIC SYLLABLE ZZU.svg", [ 0x2DB2 ] = "ETHIOPIC SYLLABLE ZZI.svg", [ 0x2DB3 ] = "ETHIOPIC SYLLABLE ZZAA.svg", [ 0x2DB4 ] = "ETHIOPIC SYLLABLE ZZEE.svg", [ 0x2DB5 ] = "ETHIOPIC SYLLABLE ZZE.svg", [ 0x2DB6 ] = "ETHIOPIC SYLLABLE ZZO.svg", [ 0x2DB8 ] = "ETHIOPIC SYLLABLE CCHA.svg", [ 0x2DB9 ] = "ETHIOPIC SYLLABLE CCHU.svg", [ 0x2DBA ] = "ETHIOPIC SYLLABLE CCHI.svg", [ 0x2DBB ] = "ETHIOPIC SYLLABLE CCHAA.svg", [ 0x2DBC ] = "ETHIOPIC SYLLABLE CCHEE.svg", [ 0x2DBD ] = "ETHIOPIC SYLLABLE CCHE.svg", [ 0x2DBE ] = "ETHIOPIC SYLLABLE CCHO.svg", [ 0x2DC0 ] = "ETHIOPIC SYLLABLE QYA.svg", [ 0x2DC1 ] = "ETHIOPIC SYLLABLE QYU.svg", [ 0x2DC2 ] = "ETHIOPIC SYLLABLE QYI.svg", [ 0x2DC3 ] = "ETHIOPIC SYLLABLE QYAA.svg", [ 0x2DC4 ] = "ETHIOPIC SYLLABLE QYEE.svg", [ 0x2DC5 ] = "ETHIOPIC SYLLABLE QYE.svg", [ 0x2DC6 ] = "ETHIOPIC SYLLABLE QYO.svg", [ 0x2DC8 ] = "ETHIOPIC SYLLABLE KYA.svg", [ 0x2DC9 ] = "ETHIOPIC SYLLABLE KYU.svg", [ 0x2DCA ] = "ETHIOPIC SYLLABLE KYI.svg", [ 0x2DCB ] = "ETHIOPIC SYLLABLE KYAA.svg", [ 0x2DCC ] = "ETHIOPIC SYLLABLE KYEE.svg", [ 0x2DCD ] = "ETHIOPIC SYLLABLE KYE.svg", [ 0x2DCE ] = "ETHIOPIC SYLLABLE KYO.svg", [ 0x2DD0 ] = "ETHIOPIC SYLLABLE XYA.svg", [ 0x2DD1 ] = "ETHIOPIC SYLLABLE XYU.svg", [ 0x2DD2 ] = "ETHIOPIC SYLLABLE XYI.svg", [ 0x2DD3 ] = "ETHIOPIC SYLLABLE XYAA.svg", [ 0x2DD4 ] = "ETHIOPIC SYLLABLE XYEE.svg", [ 0x2DD5 ] = "ETHIOPIC SYLLABLE XYE.svg", [ 0x2DD6 ] = "ETHIOPIC SYLLABLE XYO.svg", [ 0x2DD8 ] = "ETHIOPIC SYLLABLE GYA.svg", [ 0x2DD9 ] = "ETHIOPIC SYLLABLE GYU.svg", [ 0x2DDA ] = "ETHIOPIC SYLLABLE GYI.svg", [ 0x2DDB ] = "ETHIOPIC SYLLABLE GYAA.svg", [ 0x2DDC ] = "ETHIOPIC SYLLABLE GYEE.svg", [ 0x2DDD ] = "ETHIOPIC SYLLABLE GYE.svg", [ 0x2DDE ] = "ETHIOPIC SYLLABLE GYO.svg", [ 0x2E18 ] = "Gnaborretni.svg", [ 0x2E2E ] = "Irony mark full.svg", [ 0x2E52 ] = "Latin capital letter tironian Et.svg", [ 0x2E80 ] = "Cjrm-y6.svg", [ 0x2E86 ] = "Cjrm-b9.svg", [ 0x2E8A ] = "Cjrm-y1.svg", [ 0x2E8C ] = "Cjrm-f6.svg", [ 0x2E95 ] = "Cjr6m-s2.svg", [ 0x2E9C ] = "Cjrm-a2.svg", [ 0x2E9D ] = "Cjrm-b3.svg", [ 0x2EBB ] = "Cjwm-lm3.svg", [ 0x2EBC ] = "Cjrm-b2.svg", [ 0x2ECF ] = "Regular Style CJKV Radical 163 (1).svg", [ 0x2FF0 ] = "U+2FF0.svg", [ 0x2FF1 ] = "U+2FF1.svg", [ 0x2FF2 ] = "U+2FF2.svg", [ 0x2FF3 ] = "U+2FF3.svg", [ 0x2FF4 ] = "U+2FF4.svg", [ 0x2FF5 ] = "U+2FF5.svg", [ 0x2FF6 ] = "U+2FF6.svg", [ 0x2FF7 ] = "U+2FF7.svg", [ 0x2FF8 ] = "U+2FF8.svg", [ 0x2FF9 ] = "U+2FF9.svg", [ 0x2FFA ] = "U+2FFA.svg", [ 0x2FFB ] = "U+2FFB.svg", } 7myusthpsjd3tu3c5ze8h7ed1ttof2y Module:category tree/poscatboiler/data/languages 828 5079 13293 13008 2022-08-01T21:16:13Z Asinis632 1829 Scribunto text/plain local raw_categories = {} local raw_handlers = {} local m_languages = require("Module:languages") -- This handles language categories of the form e.g. [[Category:French language]] and -- [[:Category:British Sign Language]] and regional variant categories of the form -- e.g. [[Category:Regional French]]. ----------------------------------------------------------------------------- -- -- -- RAW CATEGORIES -- -- -- ----------------------------------------------------------------------------- raw_categories["Regionalisms"] = { description = "Categories that group terms in regional varieties of various languages.", additional = "{{{umbrella_msg}}}", parents = { "Kirapim", }, } raw_categories["All languages"] = { intro = "{{sisterlinks|Category:Languages}}\n[[File:Languages world map-transparent background.svg|thumb|right|250px|Rough world map of language families]]", description = "This category contains the categories for every language on Wiktionary.", additional = "Not all languages that Wiktionary recognises may have a category here yet. There are many that have " .. "not yet received any attention from editors, mainly because not all Wiktionary users know about every single " .. "language. See [[Wiktionary:List of languages]] for a full list.", parents = { "Kirapim", }, } raw_categories["All extinct languages"] = { description = "This category contains the categories for every [[extinct language]] on Wiktionary.", additional = "Do not confuse this category with [[:Category:Extinct languages]] which is for the names of extinct languages.", parents = { "All languages", }, } ----------------------------------------------------------------------------- -- -- -- RAW HANDLERS -- -- -- ----------------------------------------------------------------------------- local function makeCategoryLink(object) return "[[:Grup:" .. object:getCategoryName() .. "|" .. object:getCanonicalName() .. "]]" end local function ucfirst(text) return mw.getContentLanguage():ucfirst(text) end local function linkbox(lang, setwiki, setwikt, setsister, entryname) local wiktionarylinks = "''None.''" local canonicalName = lang:getCanonicalName() local wikimediaLanguages = lang:getWikimediaLanguages() local nameWithLanguage = lang:getCategoryName("nocap") local categoryName = lang:getCategoryName() local wikipediaArticle = setwiki or lang:getWikipediaArticle() setsister = setsister and ucfirst(setsister) or nil if setwikt then require "Module:debug".track "langcatboiler/setwikt" if setwikt == "-" then require "Module:debug".track "langcatboiler/setwikt/hyphen" end end if setwikt ~= "-" and wikimediaLanguages and wikimediaLanguages[1] then wiktionarylinks = {} for _, wikimedialang in ipairs(wikimediaLanguages) do table.insert(wiktionarylinks, (wikimedialang:getCanonicalName() ~= canonicalName and "(''" .. wikimedialang:getCanonicalName() .. "'') " or "") .. "'''[[:" .. wikimedialang:getCode() .. ":|" .. wikimedialang:getCode() .. ".wiktionary.org]]'''") end wiktionarylinks = table.concat(wiktionarylinks, "<br/>") end local plural = wikimediaLanguages[2] and "s" or "" return table.concat{ [=[<div style="clear: right; border: solid #aaa 1px; margin: 1 1 1 1; background: #f9f9f9; width: 270px; padding: 5px; margin: 5px; text-align: left; float: right"> <div style="text-align: center; margin-bottom: 10px; margin-top: 5px">''']=], nameWithLanguage, [=['''</div> {| style="font-size: 90%; background: #f9f9f9;" |- | style="vertical-align: middle; height: 35px; width: 35px;" | [[File:Wiktionary-logo-v2.svg|35px|none|Wiktionary]] || '']=], nameWithLanguage, [=[ edition]=], plural, [=[ of Wiktionary'' |- | colspan="2" style="padding-left: 10px; border-bottom: 1px solid lightgray;" | ]=], wiktionarylinks, [=[ |- | style="vertical-align: middle; height: 35px" | [[File:Wikipedia-logo.png|35px|none|Wikipedia]] || ''Wikipedia article about ]=], nameWithLanguage, [=['' |- | colspan="2" style="padding-left: 10px; border-bottom: 1px solid lightgray;" | ]=], (setwiki == "-" and "''None.''" or "'''[[w:" .. wikipediaArticle .. "|" .. wikipediaArticle .. "]]'''"), [=[ |- | style="vertical-align: middle; height: 35px" | [[File:Wikimedia-logo.svg|35px|none|Wikimedia Commons]] || ''Links related to ]=], nameWithLanguage, [=[ in sister projects at Wikimedia Commons'' |- | colspan="2" style="padding-left: 10px; border-bottom: 1px solid lightgray;" | ]=], (setsister == "-" and "''None.''" or "'''[[commons:Category:" .. (setsister or categoryName) .. "|" .. (setsister or categoryName) .. "]]'''"), [=[ |- | style="vertical-align: middle; height: 35px" | [[File:Crystal kfind.png|35px|none|Considerations]] || ]=], nameWithLanguage, [=[ considerations |- | colspan="2" style="padding-left: 10px; border-bottom: 1px solid lightgray;" | '''[[Wiktionary:About ]=], canonicalName, [=[]]''' |- | style="vertical-align: middle; height: 35px" | [[File:Open book nae 02.svg|35px|none|Entry]] || ]=], nameWithLanguage, [=[ entry |- | colspan="2" style="padding-left: 10px;" | ''']=], require("Module:links").full_link({lang = m_languages.getByCode("en"), term = entryname or canonicalName}), [=[''' |} </div>]=] } end local function edit_link(title, text) return '<span class="plainlinks">[' .. tostring(mw.uri.fullUrl(title, { action = "edit" })) .. ' ' .. text .. ']</span>' end -- Should perhaps use wiki syntax. local function infobox(lang) local ret = {} table.insert(ret, '<table class="wikitable language-category-info"') if type(lang.getRawData) == "function" then local raw_data = lang:getRawData() if raw_data then local replacements = { [1] = "canonical-name", [2] = "wikidata-item", [3] = "family", } local function replacer(letter1, letter2) return letter1:lower() .. "-" .. letter2:lower() end -- For each key in the language data modules, returns a descriptive -- kebab-case version (containing ASCII lowercase words separated -- by hyphens). local function kebab_case(key) key = replacements[key] or key key = key:gsub("(%l)(%u)", replacer):gsub("(%l)_(%l)", replacer) return key end local function html_attribute_encode(str) str = mw.text.jsonEncode(str) :gsub('"', "&quot;") -- & in attributes is automatically escaped. -- :gsub("&", "&amp;") :gsub("<", "&lt;") :gsub(">", "&gt;") return str end pcall(function () table.insert(ret, ' data-code="' .. lang:getCode() .. '"') for k, v in require("Module:table").sortedPairs(lang:getRawData()) do table.insert(ret, " data-" .. kebab_case(k) .. '="' .. html_attribute_encode(v) .. '"') end end) end end table.insert(ret, '>\n') table.insert(ret, '<tr class="language-category-data">\n<th colspan="2">' .. edit_link("Module:" .. m_languages.getDataModuleName(lang:getCode()), "Edit language data") .. "</th>\n</tr>\n") table.insert(ret, "<tr>\n<th>Canonical name</th><td>" .. lang:getCanonicalName() .. "</td>\n</tr>\n") local otherNames = lang:getOtherNames(true) if otherNames then local names = {} for _, name in ipairs(otherNames) do table.insert(names, "<li>" .. name .. "</li>") end if #names > 0 then table.insert(ret, "<tr>\n<th>Other names</th><td><ul>" .. table.concat(names, "\n") .. "</ul></td>\n</tr>\n") end end local aliases = lang:getAliases() if aliases then local names = {} for _, name in ipairs(aliases) do table.insert(names, "<li>" .. name .. "</li>") end if #names > 0 then table.insert(ret, "<tr>\n<th>Aliases</th><td><ul>" .. table.concat(names, "\n") .. "</ul></td>\n</tr>\n") end end local varieties = lang:getVarieties() if varieties then local names = {} for _, name in ipairs(varieties) do if type(name) == "string" then table.insert(names, "<li>" .. name .. "</li>") else assert(type(name) == "table") local first_var local subvars = {} for i, var in ipairs(name) do if i == 1 then first_var = var else table.insert(subvars, "<li>" .. var .. "</li>") end end if #subvars > 0 then table.insert(names, "<li><dl><dt>" .. first_var .. "</dt>\n<dd><ul>" .. table.concat(subvars, "\n") .. "</ul></dd></dl></li>") elseif first_var then table.insert(names, "<li>" .. first_var .. "</li>") end end end if #names > 0 then table.insert(ret, "<tr>\n<th>Varieties</th><td><ul>" .. table.concat(names, "\n") .. "</ul></td>\n</tr>\n") end end table.insert(ret, "<tr>\n<th>[[Wiktionary:Languages|Language code]]</th><td><code>" .. lang:getCode() .. "</code></td>\n</tr>\n") table.insert(ret, "<tr>\n<th>[[Wiktionary:Families|Language family]]</th>\n") local fam = lang:getFamily() local famCode = fam and fam:getCode() if not fam then table.insert(ret, "<td>unclassified</td>") elseif famCode == "qfa-iso" then table.insert(ret, "<td>[[:Category:Language isolates|language isolate]]</td>") elseif famCode == "qfa-mix" then table.insert(ret, "<td>[[:Category:Mixed languages|mixed language]]</td>") elseif famCode == "sgn" then table.insert(ret, "<td>[[:Category:Sign languages|sign language]]</td>") elseif famCode == "crp" then table.insert(ret, "<td>[[:Category:Creole or pidgin languages|creole or pidgin]]</td>") elseif famCode == "art" then table.insert(ret, "<td>[[:Category:Constructed languages|constructed language]]</td>") else table.insert(ret, "<td>" .. makeCategoryLink(fam) .. "</td>") end table.insert(ret, "\n</tr>\n<tr>\n<th>Ancestors</th>\n") local ancestors, ancestorChain = lang:getAncestors(), lang:getAncestorChain() if ancestors[2] then local ancestorList = {} for i, anc in ipairs(ancestors) do ancestorList[i] = "<li>" .. makeCategoryLink(anc) .. "</li>" end table.insert(ret, "<td><ul>\n" .. table.concat(ancestorList, "\n") .. "</ul></td>\n") elseif ancestorChain[1] then table.insert(ret, "<td><ul>\n") local chain = {} for i, anc in ipairs(ancestorChain) do chain[i] = "<li>" .. makeCategoryLink(anc) .. "</li>" end table.insert(ret, table.concat(chain, "\n<ul>\n")) for _, _ in ipairs(chain) do table.insert(ret, "</ul>") end table.insert(ret, "</td>\n") else table.insert(ret, "<td>unknown</td>\n") end table.insert(ret, "</tr>\n") local scripts = lang:getScripts() if scripts[1] then local script_text = {} for _, sc in ipairs(scripts) do local text = {} local code = sc:getCode() if code ~= "Hira" then table.insert(text, "<li>" .. makeCategoryLink(sc)) end if code == "Jpan" then local m_scripts = require("Module:scripts") local Hani = m_scripts.getByCode("Hani") local Hira = m_scripts.getByCode("Hira") local Kana = m_scripts.getByCode("Kana") table.insert(text, "<ul>") table.insert(text, "<li>" .. makeCategoryLink(Hani) .. "</li>") table.insert(text, "<li>" .. makeCategoryLink(Hira) .. "</li>") table.insert(text, "<li>" .. makeCategoryLink(Kana) .. "</li>") table.insert(text, "</ul>") elseif code == "Kore" then local m_scripts = require("Module:scripts") local Hang = m_scripts.getByCode("Hang") local Hani = m_scripts.getByCode("Hani") table.insert(text, "<ul>") table.insert(text, "<li>" .. makeCategoryLink(Hang) .. "</li>") table.insert(text, "<li>" .. makeCategoryLink(Hani) .. "</li>") table.insert(text, "</ul>") end table.insert(text, "</li>") table.insert(script_text, table.concat(text, "\n")) end table.insert(ret, "<tr>\n<th>[[Wiktionary:Scripts|Scripts]]</th>\n<td><ul>\n" .. table.concat(script_text, "\n") .. "</ul></td>\n</tr>\n") else table.insert(ret, "<tr>\n<th>[[Wiktionary:Scripts|Scripts]]</th>\n<td>not specified</td>\n</tr>\n") end if lang._rawData.translit_module then local translit_module = lang._rawData.translit_module local translit_module_info = {} table.insert(translit_module_info, ("[[Module:%s]]"):format(translit_module)) if translit_module == "translit-redirect" then local data = mw.loadData("Module:translit-redirect/data")[lang:getCode()] if data then table.insert(translit_module_info, ":") local redirects_to = {} local m_scripts = require "Module:scripts" for script, data in require "Module:table".sortedPairs(data) do -- Skip boolean fields like "debug_mode" and "noError". if type(data) == "table" then table.insert(redirects_to, ("\n* <code>%s</code>: %s"):format( script, data.module and ("[[Module:%s]]"):format(data.module) or "(none)")) end end table.insert(translit_module_info, table.concat(redirects_to)) end end table.insert(ret, [=[ <tr> <th>[[Wiktionary:Transliteration and romanization|Transliteration<br>module]]</th> <td>]=] .. table.concat(translit_module_info) .. [=[</td> </tr> ]=]) end local wikidataItem = lang:getWikidataItem() if lang:getWikidataItem() and mw.wikibase then local URL = mw.wikibase.getEntityUrl(wikidataItem) local link if URL then link = '[' .. URL .. ' ' .. wikidataItem .. ']' else link = '<span class="error">Invalid Wikidata item: <code>' .. wikidataItem .. '</code></span>' end table.insert(ret, "<tr><th>Wikidata</th><td>" .. link .. "</td></tr>") end table.insert(ret, "</table>") return table.concat(ret) end local function NavFrame(content, title) return '<div class="NavFrame"><div class="NavHead">' .. (title or '{{{title}}}') .. '</div>' .. '<div class="NavContent" style="text-align: left;">' .. content .. '</div></div>' end local function get_description_intro_additional(lang, countries, extinct, setwiki, setwikt, setsister, entryname) local nameWithLanguage = lang:getCategoryName("nocap") if lang:getCode() == "und" then local description = "This is the main category of the '''" .. nameWithLanguage .. "''', represented in Wiktionary by the [[Wiktionary:Languages|code]] '''" .. lang:getCode() .. "'''. " .. "This language contains terms in historical writing, whose meaning has not yet been determined by scholars." return description, nil, nil end local canonicalName = lang:getCanonicalName() local intro = linkbox(lang, setwiki, setwikt, setsister, entryname) local the_prefix if canonicalName:find(" Language$") then the_prefix = "" else the_prefix = "the " end local description = "This is the main category of " .. the_prefix .. "'''" .. nameWithLanguage .. "'''." local country_links = {} for _, country in ipairs(countries) do if country ~= "UNKNOWN" then local country_without_the = country:match("^the (.*)$") if country_without_the then table.insert(country_links, "the [[" .. country_without_the .. "]]") else table.insert(country_links, "[[" .. country .. "]]") end end end local country_desc if #country_links > 0 then local country_link_text = require("Module:table").serialCommaJoin(country_links) if extinct then country_desc = "It is an [[extinct language]] that was formerly spoken in " .. country_link_text .. ".\n\n" else country_desc = "It is spoken in " .. country_link_text .. ".\n\n" end elseif extinct then country_desc = "It is an [[extinct language]]." else country_desc = "" end local add = country_desc .. "Information about " .. canonicalName .. ":\n\n" .. infobox(lang) if lang:getType() == "reconstructed" then add = add .. "\n\n" .. ucfirst(canonicalName) .. " is a reconstructed language. Its words and roots are not directly attested in any written works, but have been reconstructed through the ''comparative method'', " .. "which finds regular similarities between languages that cannot be explained by coincidence or word-borrowing, and extrapolates ancient forms from these similarities.\n\n" .. "According to our [[Wiktionary:Criteria for inclusion|criteria for inclusion]], terms in " .. canonicalName .. " should '''not''' be present in entries in the main namespace, but may be added to the Reconstruction: namespace." elseif lang:getType() == "appendix-constructed" then add = add .. "\n\n" .. ucfirst(canonicalName) .. " is a constructed language that is only in sporadic use. " .. "According to our [[Wiktionary:Criteria for inclusion|criteria for inclusion]], terms in " .. canonicalName .. " should '''not''' be present in entries in the main namespace, but may be added to the Appendix: namespace. " .. "All terms in this language may be available at [[Appendix:" .. ucfirst(canonicalName) .. "]]." end local about = mw.title.new("Wiktionary:About " .. canonicalName) if about.exists then add = add .. "\n\n" .. "Please see '''[[Wiktionary:About " .. canonicalName .. "]]''' for information and special considerations for creating " .. nameWithLanguage .. " entries." end local ok, tree_of_descendants = pcall( require("Module:family tree").print_children, lang:getCode(), { protolanguage_under_family = true, must_have_descendants = true }) if ok then if tree_of_descendants then add = add .. NavFrame( tree_of_descendants, "Family tree") else add = add .. "\n\n" .. ucfirst(lang:getCanonicalName()) .. " has no descendants or varieties listed in Wiktionary's language data modules." end else mw.log("error while generating tree: " .. tostring(tree_of_descendants)) end return description, intro, add end local function get_parents(lang, countries, extinct) local canonicalName = lang:getCanonicalName() local ret = {{name = "All languages", sort = canonicalName}} local fam = lang:getFamily() local famCode = fam and fam:getCode() -- FIXME: Some of the following categories should be added to this module. if not fam then table.insert(ret, {name = "Category:Unclassified languages", sort = canonicalName}) elseif famCode == "qfa-iso" then table.insert(ret, {name = "Category:Language isolates", sort = canonicalName}) elseif famCode == "qfa-mix" then table.insert(ret, {name = "Category:Mixed languages", sort = canonicalName}) elseif famCode == "sgn" then table.insert(ret, {name = "Category:All sign languages", sort = canonicalName}) elseif famCode == "crp" then table.insert(ret, {name = "Category:Creole or pidgin languages", sort = canonicalName}) for _, anc in ipairs(lang:getAncestors()) do table.insert(ret, {name = "Category:" .. ucfirst(anc:getCanonicalName()) .. "-based creole or pidgin languages", sort = canonicalName}) end elseif famCode == "art" then if lang:getType() == "appendix-constructed" then table.insert(ret, {name = "Category:Appendix-only constructed languages", sort = canonicalName}) else table.insert(ret, {name = "Category:Constructed languages", sort = canonicalName}) end for _, anc in ipairs(lang:getAncestors()) do table.insert(ret, {name = "Category:" .. ucfirst(anc:getCanonicalName()) .. "-based constructed languages", sort = canonicalName}) end else table.insert(ret, {name = "Category:" .. fam:getCategoryName(), sort = canonicalName}) if lang:getType() == "reconstructed" then table.insert(ret, {name = "Category:Reconstructed languages", sort = (mw.ustring.gsub(canonicalName, "^Proto%-", ""))}) end end for _, sc in ipairs(lang:getScripts()) do table.insert(ret, {name = "Category:" .. sc:getCategoryName() .. " languages", sort = canonicalName}) if sc:getCode() == "Jpan" then table.insert(ret, {name = "Category:" .. require("Module:scripts").getByCode("Hani"):getCategoryName() .. " languages", sort = canonicalName}) table.insert(ret, {name = "Category:" .. require("Module:scripts").getByCode("Hira"):getCategoryName() .. " languages", sort = canonicalName}) table.insert(ret, {name = "Category:" .. require("Module:scripts").getByCode("Kana"):getCategoryName() .. " languages", sort = canonicalName}) elseif sc:getCode() == "Kore" then table.insert(ret, {name = "Category:" .. require("Module:scripts").getByCode("Hang"):getCategoryName() .. " languages", sort = canonicalName}) table.insert(ret, {name = "Category:" .. require("Module:scripts").getByCode("Hani"):getCategoryName() .. " languages", sort = canonicalName}) end end if lang:hasTranslit() then table.insert(ret, {name = "Category:Languages with automatic transliteration", sort = canonicalName}) end local saw_country = false for _, country in ipairs(countries) do if country ~= "UNKNOWN" then table.insert(ret, "Category:Languages of " .. country) saw_country = true end end if extinct then table.insert(ret, {name = "All extinct languages", sort = canonicalName}) end if not saw_country then table.insert(ret, "Category:Languages not sorted into a country category") end return ret end local function get_children(lang) local ret = {} -- FIXME: We should work on the children mechanism so it isn't necessary to manually specify these. for _, label in ipairs({"appendices", "entry maintenance", "lemmas", "names", "phrases", "rhymes", "symbols", "templates", "terms by etymology", "terms by usage"}) do table.insert(ret, {name = label, is_label = true}) end table.insert(ret, {name = "terms derived from {{{langname}}}", is_label = true, lang = false}) table.insert(ret, {module = "topic cat", args = {code = "{{{langcode}}}", label = "all topics"}, sort = "all topics"}) table.insert(ret, {name = "Regional {{{langname}}}"}) table.insert(ret, {name = "Requests concerning {{{langname}}}"}) table.insert(ret, {name = "Category:Rhymes:{{{langname}}}", description = "Lists of {{{langname}}} words by their rhymes."}) table.insert(ret, {name = "Category:User {{{langcode}}}", description = "Wiktionary users categorized by fluency levels in {{{langname}}}."}) return ret end -- Handle language categories of the form e.g. [[:Category:French language]] and -- [[:Category:British Sign Language]]. table.insert(raw_handlers, function(data) local lang local langname = data.category:match("^(.*) language$") if langname then lang = m_languages.getByCanonicalName(langname) elseif data.category:find(" Language$") then lang = m_languages.getByCanonicalName(data.category) end if not lang then return nil end local params = { [4] = {list = true}, ["setwiki"] = {}, ["setwikt"] = {}, ["setsister"] = {}, ["entryname"] = {}, ["extinct"] = {type = "boolean"}, } local args = require("Module:parameters").process(data.args, params) -- If called from inside, don't require any arguments, as they can't be known -- in general and aren't needed just to generate the first parent (used for -- breadcrumbs). if #args[4] == 0 and not data.called_from_inside then -- At least one country must be specified unless the language is constructed (e.g. Esperanto) or reconstructed (e.g. Proto-Indo-European). local fam = lang:getFamily() if lang:getType() ~= "reconstructed" and not (fam and fam:getCode() == "art") then error("At least one country (param 1=) must be specified for language '" .. lang:getCanonicalName() .. "' (code '" .. lang:getCode() .. "'). " .. "Use the value UNKNOWN if the language's location is truly unknown.") end end local description, intro, additional = "", "", "" -- If called from inside the category tree system, it's called when generating -- parents or children, and we don't need to generate the description or additional -- text (which is very expensive in terms of memory because it calls [[Module:family tree]], -- which calls [[Module:languages/alldata]]). if not data.called_from_inside then description, intro, additional = get_description_intro_additional( lang, args[4], args.extinct, args.setwiki, args.setwikt, args.setsister, args.entryname ) end return { description = description, lang = lang:getCode(), intro = intro, additional = additional, breadcrumb = lang:getCanonicalName(), parents = get_parents(lang, args[4], args.extinct), extra_children = get_children(lang), umbrella = false, can_be_empty = true, }, true end) -- Handle categories such as [[:Category:Regional French]] and [[:Category:Regional Ancient Greek]]. table.insert(raw_handlers, function(data) local langname = data.category:match("^Regional (.*)$") if langname then local lang = require("Module:languages").getByCanonicalName(langname) if lang then return { lang = lang:getCode(), description = "Categories containing terms in regional varieties or dialects of " .. lang:makeCategoryLink() .. ".", additional = "This category may also directly contain terms that are uncategorized regionalisms. Such terms should usually be recategorized by the particular regional variety they belong to.", parents = { "{{{langcat}}}", {name = "Regionalisms", sort = langname}, }, breadcrumb = "Regional", } end end end) return {RAW_CATEGORIES = raw_categories, RAW_HANDLERS = raw_handlers} fd7juyirmmv47q017ldhfa0mhbqyekk Module:category tree/poscatboiler/data/lemmas 828 5080 13299 13009 2022-08-01T21:37:57Z Asinis632 1829 Scribunto text/plain local labels = {} local raw_categories = {} local handlers = {} ----------------------------------------------------------------------------- -- -- -- LABELS -- -- -- ----------------------------------------------------------------------------- local diminutive_augmentative_poses = { "adjectives", "adveb", "interjections", "nouns", "numerals", "prefixes", "proper nouns", "pronouns", "suffixes", "verbs" } labels["lemmas"] = { description = "{{{langname}}} [[Wiktionary:Lemmas|lemmas]], categorized by their part of speech.", umbrella_parents = "Fundamental", parents = {{name = "{{{langcat}}}", raw = true, sort = " "}}, } labels["abstract verbs"] = { description = "{{{langname}}} abstract verbs of motion whose motion is multidirectional (as opposed to unidirectional) or indirect, or whose action is repeated or in a series, instead of being a single, completed action. Abstract verbs are always imperfective in aspect, even with prefixes that are normally associated with the perfective aspect.", additional = "See also [[abstract verb]].", parents = {"verbs"}, } labels["action nouns"] = { description = "{{{langname}}} nouns denoting action of a verb or verbal root that it is derived from.", parents = {"nouns"}, } labels["act-related adverbs"] = { description = "{{{langname}}} adverbs that indicate the motive or other background information for an action.", parents = {"adveb"}, } labels["active verbs"] = { description = "{{{langname}}} verbs that indicate an activity", parents = {"verbs"}, } labels["adjective concords"] = { description = "{{{langname}}} concords that are prefixed to adjective stems.", parents = {"concords"}, } labels["adjectives"] = { description = "{{{langname}}} terms that give attributes to nouns, extending their definitions.", parents = {"lemmas"}, } labels["adverbial accusatives"] = { description = "Accusative case-forms in {{{langname}}} used as adverbs.", parents = {"adveb"}, } labels["adveb"] = { description = "{{{langname}}} terms that modify clauses, sentences and phrases directly.", parents = {"lemmas"}, } labels["affixes"] = { description = "Morphemes attached to existing {{{langname}}} words.", parents = {"morphemes"}, } labels["agent nouns"] = { description = "{{{langname}}} nouns that denote an agent that performs the action denoted by the verb from which the noun is derived.", parents = {"nouns"}, } labels["ambipositions"] = { description = "{{{langname}}} adpositions that can occur either before or after their objects.", parents = {"lemmas"}, } labels["ambitransitive verbs"] = { description = "{{{langname}}} verbs that may or may not direct actions, occurrences or states to grammatical objects.", parents = {"verbs", "transitive verbs", "intransitive verbs"}, } labels["animal commands"] = { description = "{{{langname}}} words used to communicate with animals.", parents = {"interjections"}, } labels["articles"] = { description = "{{{langname}}} terms that indicate and specify nouns.", parents = {"determiners"}, } labels["aspect adverbs"] = { description = "{{{langname}}} adverbs that express [[w:Grammatical aspect|grammatical aspect]], describing the flow of time in relation to a statement.", parents = {"adveb"}, } for _, pos in ipairs(diminutive_augmentative_poses) do labels["augmentative " .. pos] = { description = "{{{langname}}} " .. pos .. " that are derived from a base word to convey big size or big intensity.", parents = {pos}, } end labels["attenuative verbs"] = { description = "{{{langname}}} verbs that indicate that an action or event is performed or takes place gently, lightly, partially, perfunctorily or to an otherwise reduced extent.", parents = {"verbs"}, } labels["autobenefactive verbs"] = { description = "{{{langname}}} verbs that indicate that the agent of an action is also its benefactor.", parents = {"verbs"}, } labels["automative verbs"] = { description = "{{{langname}}} verbs that indicate actions directed at or a change of state of the grammatical subject.", parents = {"verbs"}, } labels["auxiliary verbs"] = { description = "{{{langname}}} verbs that provide additional conjugations for other verbs.", parents = {"verbs"}, } labels["biaspectual verbs"] = { description = "{{{langname}}} verbs that can be both imperfective and perfective.", parents = {"verbs"}, } labels["causative verbs"] = { description = "{{{langname}}} verbs that express causing actions or states rather than performing or being them directly. Use this only for separate verbs (as opposed to causative forms that are part of the inflection of verbs).", parents = {"verbs"}, } labels["circumfixes"] = { description = "Affixes attached to both the beginning and the end of {{{langname}}} words, functioning together as single units.", parents = {"morphemes"}, } labels["circumpositions"] = { description = "{{{langname}}} adpositions that appear on both sides of their objects.", parents = {"lemmas"}, } labels["classifiers"] = { description = "{{{langname}}} terms that classify nouns according to their meanings.", parents = {"lemmas"}, } labels["clitics"] = { description = "{{{langname}}} morphemes that function as independent words, but are always attached to another word.", parents = {"morphemes"}, } for _, pos in ipairs { "nouns", "suffixes" } do labels["collective " .. pos] = { description = "{{{langname}}} " .. pos .. " that indicate groups of related things or beings, without the need of grammatical pluralization.", parents = {pos}, } end labels["combining forms"] = { description = "Forms of {{{langname}}} words that do not occur independently, but are used when joined with other words.", parents = {"morphemes"}, } labels["comparative-only adjectives"] = { description = "{{{langname}}} adjectives that are only used in their comparative forms.", parents = {"adjectives"}, } labels["completive verbs"] = { description = "{{{langname}}} verbs which refer to the completion of an action which has already commenced or which has already been performed upon a subset of the entities which it affects.", parents = {"verbs"}, } labels["concords"] = { description = "{{{langname}}} prefixes attached to words to show agreement with a noun or pronoun.", parents = {"prefixes"}, } labels["concrete verbs"] = { description = "{{{langname}}} concrete verbs refer to a verbal aspect in verbs of motion that is unidirectional (as opposed to multidirectional), a definitely directed motion, or a single, completed action (instead of a repeated action or series of actions). Concrete verbs may be either imperfective or perfective.", additional = "See also [[concrete verb]].", parents = {"verbs"}, } labels["conjunctions"] = { description = "{{{langname}}} terms that connect words, phrases or clauses together.", parents = {"lemmas"}, } labels["conjunctive adverbs"] = { description = "{{{langname}}} adverbs that connect two independent clauses together.", parents = {"adveb"}, } labels["continuative verbs"] = { description = "{{{langname}}} verbs that express continuing action.", parents = {"verbs"}, } labels["control verbs"] = { description = "{{{langname}}} verbs that take multiple arguments, one of which is another verb. One of the control verb's arguments is syntactically both an argument of the control verb and an argument of the other verb.", parents = {"verbs"}, } labels["cooperative verbs"] = { description = "{{{langname}}} verbs that indicate cooperation", parents = {"verbs"}, } labels["coordinating conjunctions"] = { description = "{{{langname}}} conjunctions that indicate equal syntactic importance between connected items.", parents = {"conjunctions"}, } labels["copulative verbs"] = { description = "{{{langname}}} verbs that may take adjectives as their complement.", parents = {"verbs"}, } for _, pos in ipairs { "nouns", "proper nouns" } do labels["countable " .. pos] = { description = "{{{langname}}} " .. pos .. " that can be quantified directly by numerals.", parents = {pos}, } end labels["counters"] = { description = "{{{langname}}} terms that combine with numerals to express quantity of nouns.", parents = {"lemmas"}, } labels["cumulative verbs"] = { description = "{{{langname}}} verbs which indicate that an action or event gradually yields a certain or significant quantity or effect.", parents = {"verbs"}, } labels["degree adverbs"] = { description = "{{{langname}}} adverbs that express a particular degree to which the word they modify applies.", parents = {"adveb"}, } labels["delimitative verbs"] = { description = "{{{langname}}} verbs which indicate that an action or event is performed or takes place briefly or to an otherwise reduced extent.", parents = {"verbs"}, } labels["demonstrative adjectives"] = { description = "{{{langname}}} adjectives that refer to nouns, comparing them to external references.", parents = {"adjectives", {name = "demonstrative pro-forms", sort = "adjectives"}}, } labels["demonstrative adverbs"] = { description = "{{{langname}}} adverbs that refer to other adverbs, comparing them to external references.", parents = {"adveb", {name = "demonstrative pro-forms", sort = "adveb"}}, } labels["denominal verbs"] = { -- in [[Appendix:Glossary]]; "denominative" more frequent? description = "{{{langname}}} verbs that derive from nouns.", parents = { "verbs" }, } labels["demonstrative determiners"] = { description = "{{{langname}}} determiners that refer to nouns, comparing them to external references.", parents = {"determiners", {name = "demonstrative pro-forms", sort = "determiners"}}, } labels["demonstrative pronouns"] = { description = "{{{langname}}} pronouns that refer to nouns, comparing them to external references.", parents = {"pronouns", {name = "demonstrative pro-forms", sort = "pronouns"}}, } labels["deponent verbs"] = { description = "{{{langname}}} verbs that have active meanings but are not conjugated in the active voice.", parents = {"verbs"}, } labels["derivational prefixes"] = { description = "{{{langname}}} prefixes that are used to create new words.", parents = {"prefixes"}, } labels["derivational suffixes"] = { description = "{{{langname}}} suffixes that are used to create new words.", parents = {"suffixes"}, } labels["derivative verbs"] = { description = "{{{langname}}} verbs that are derived from nouns and adjectives.", parents = {"verbs"}, } labels["desiderative verbs"] = { description = "{{{langname}}} verbs with the following morphology: verbal root xxx + [[desiderative]] affix, and the following semantics: to wish to do the action xxx.", parents = {"verbs"}, } labels["determinatives"] = { description = "{{{langname}}} terms that indicate the general class to which the following logogram belongs.", parents = {"lemmas"}, } labels["determiners"] = { description = "{{{langname}}} terms that narrow down, within the conversational context, the referent of the following noun.", parents = {"lemmas"}, } labels["diminutiva tantum"] = { description = "{{{langname}}} nouns or noun senses that are mostly or exclusively used in the diminutive form.", parents = {"nouns"}, } for _, pos in ipairs(diminutive_augmentative_poses) do labels["diminutive " .. pos] = { description = "{{{langname}}} " .. pos .. " that are derived from a base word to convey endearment, small size or small intensity.", parents = {pos}, } end labels["discourse particles"] = { description = "{{{langname}}} particles that manage the flow and structure of discourse.", parents = {"particles"}, } labels["distributive verbs"] = { description = "{{{langname}}} verbs which indicate that an action or event involves multiple participants or a large quantity of an uncountable mass, usually as the grammatical subject in the case of intransitive verbs and as the grammatical object in the case of transitive verbs.", parents = {"verbs"}, } labels["ditransitive verbs"] = { description = "{{{langname}}} verbs that indicate actions, occurrences or states of two grammatical objects simultaneously, one direct and one indirect.", parents = {"verbs", "transitive verbs"}, } labels["dualia tantum"] = { description = "{{{langname}}} nouns that are mostly or exclusively used in the dual form.", parents = {"nouns"}, } labels["duration adverbs"] = { description = "{{{langname}}} adverbs that express duration in time.", parents = {"time adverbs"}, } labels["ergative verbs"] = { description = "{{{langname}}} [[Appendix:Glossary#ergative|ergative verb]]s: intransitive verbs that become causatives when used transitively.", parents = {"verbs", "intransitive verbs", "transitive verbs"}, } labels["elative adjectives"] = { description = "{{{langname}}} adjectives that express attributes in a relatively higher degree, or in the highest possible degree.", parents = {"adjectives"}, } labels["excessive verbs"] = { description = "{{{langname}}} verbs that indicate that an action is performed to an excessive extent.", parents = {"verbs"}, } labels["enclitics"] = { description = "{{{langname}}} clitics that attach to the preceding word.", parents = {"clitics"}, } labels["nouns with other-gender equivalents"] = { description = "{{{langname}}} nouns that refer to gendered concepts (e.g. [[actor]] vs. [[actress]], [[king]] vs. [[queen]]) and have corresponding other-gender equivalent terms.", parents = {"nouns"}, } labels["female equivalent nouns"] = { description = "{{{langname}}} nouns that refer to female beings with the same characteristics as the base noun.", parents = {"nouns with other-gender equivalents"}, } labels["female equivalent suffixes"] = { description = "{{{langname}}} suffixes that refer to female beings with the same characteristics as the base suffix.", parents = {"noun-forming suffixes"}, } labels["focus adverbs"] = { description = "{{{langname}}} adverbs that indicate [[w:Focus (linguistics)|focus]] within the sentence.", parents = {"adveb"}, } labels["frequency adverbs"] = { description = "{{{langname}}} adverbs that express repetition with a certain frequency or interval.", parents = {"time adverbs"}, } labels["frequentative verbs"] = { description = "{{{langname}}} verbs that express repeated action.", parents = {"verbs"}, } labels["general pronouns"] = { description = "{{{langname}}} pronouns that refer to all persons, things, abstract ideas and their characteristics.", parents = {"pronouns"}, } labels["generational moieties"] = { description = "{{{langname}}} moieties that alternate every generation.", parents = {"moieties"}, } labels["ideophones"] = { description = "{{{langname}}} terms that evoke an idea, especially a sensation or impression, with a sound.", parents = {"lemmas"}, } labels["imperfective verbs"] = { description = "{{{langname}}} verbs that express actions considered as ongoing or continuous, as opposed to completed events.", parents = {"verbs"}, } labels["impersonal verbs"] = { description = "{{{langname}}} verbs that do not indicate actions, occurrences or states of any specific grammatical subject.", parents = {"verbs"}, } labels["inchoative verbs"] = { description = "{{{langname}}} verbs that indicate the beginning of an action or event.", parents = {"verbs"}, } labels["indefinite adjectives"] = { description = "{{{langname}}} adjectives that refer to unspecified adjective meanings.", parents = {"adjectives", {name = "indefinite pro-forms", sort = "adjectives"}}, } labels["indefinite adverbs"] = { description = "{{{langname}}} adverbs that refer to unspecified adverbial meanings.", parents = {"adveb", {name = "indefinite pro-forms", sort = "adveb"}}, } labels["indefinite determiners"] = { description = "{{{langname}}} determiners that designate an unidentified noun.", parents = {"determiners", {name = "indefinite pro-forms", sort = "determiners"}}, } labels["indefinite pronouns"] = { description = "{{{langname}}} pronouns that refer to unspecified nouns.", parents = {"pronouns", {name = "indefinite pro-forms", sort = "pronouns"}}, } labels["infixes"] = { description = "Affixes inserted inside {{{langname}}} words.", parents = {"morphemes"}, } labels["inflectional prefixes"] = { description = "{{{langname}}} prefixes that are used as inflectional beginnings in noun, adjective or verb paradigms.", parents = {"prefixes"}, } labels["inflectional suffixes"] = { description = "{{{langname}}} suffixes that are used as inflectional endings in noun, adjective or verb paradigms.", parents = {"suffixes"}, } labels["intensive verbs"] = { description = "{{{langname}}} verbs which indicate that an action is performed vigorously, enthusiastically, forcefully or to an otherwise enlarged extent.", parents = {"verbs"}, } labels["interfixes"] = { description = "Affixes used to join two {{{langname}}} words or morphemes together.", parents = {"morphemes"}, } labels["interjections"] = { description = "{{{langname}}} terms that express emotions, sounds, etc. as exclamations.", parents = {"lemmas"}, } labels["interrogative adjectives"] = { description = "{{{langname}}} adjectives that indicate questions.", parents = {"adjectives", {name = "interrogative pro-forms", sort = "adjectives"}}, } labels["interrogative adverbs"] = { description = "{{{langname}}} adverbs that indicate questions.", parents = {"adveb", {name = "interrogative pro-forms", sort = "adveb"}}, } labels["interrogative determiners"] = { description = "{{{langname}}} determiners that indicate questions.", parents = {"determiners", {name = "interrogative pro-forms", sort = "determiners"}}, } labels["interrogative particles"] = { description = "{{{langname}}} particles that indicate questions.", parents = {"particles", {name = "interrogative pro-forms", sort = "particles"}}, } labels["interrogative pronouns"] = { description = "{{{langname}}} pronouns that indicate questions.", parents = {"pronouns", {name = "interrogative pro-forms", sort = "pronouns"}}, } labels["intransitive verbs"] = { description = "{{{langname}}} verbs that don't require any grammatical objects.", parents = {"verbs"}, } labels["iterative verbs"] = { description = "{{{langname}}} verbs that express the repetition of an event.", parents = {"verbs"}, } labels["location adverbs"] = { description = "{{{langname}}} adverbs that indicate location.", parents = {"adveb"}, } labels["male equivalent nouns"] = { description = "{{{langname}}} nouns that refer to male beings with the same characteristics as the base noun.", parents = {"nouns with other-gender equivalents"}, } labels["manner adverbs"] = { description = "{{{langname}}} adverbs that indicate the manner, way or style in which an action is performed.", parents = {"adveb"}, } labels["modal adverbs"] = { description = "{{{langname}}} adverbs that express [[w:Linguistic modality|linguistic modality]], indicating the mood or attitude of the speaker with respect to what is being said.", parents = {"sentence adverbs"}, } labels["modal particles"] = { description = "{{{langname}}} particles that reflect the mood or attitude of the speaker, without changing the basic meaning of the sentence.", parents = {"particles"}, } labels["modal verbs"] = { description = "{{{langname}}} verbs that indicate [[grammatical mood]].", parents = {"auxiliary verbs"}, } labels["moieties"] = { description = "{{{langname}}} pairs of abstract categories separating people and the environment.", parents = {"lemmas"}, } labels["morphemes"] = { description = "{{{langname}}} word-elements used to form full words.", parents = {"lemmas"}, } labels["multiword terms"] = { description = "{{{langname}}} lemmas that are an [[WT:CFI#Idiomaticity|idiomatic]] combination of multiple words.", parents = {"lemmas"}, } labels["negative verbs"] = { description = "{{{langname}}} verbs that indicate the lack of an action.", parents = {"verbs"}, } labels["negative particles"] = { description = "{{{langname}}} particles that indicate negation.", parents = {"particles"}, } labels["negative pronouns"] = { description = "{{{langname}}} pronouns that refer to negative or non-existent references.", parents = {"pronouns"}, } labels["neutral verbs"] = { description = "{{{langname}}} verbs that indicate either or both an activity or a result of an activity", parents = {"verbs"}, } labels["nominalized adjectives"] = { description = "{{{langname}}} adjectives that are used as nouns.", parents = {"nouns", "adjectives"}, } labels["non-constituents"] = { description = "{{{langname}}} terms that are not grammatical [[constituent#Noun|constituents]], and therefore need to be combined with additional terms to form a complete phrase.", parents = {"phrases"}, } labels["noun prefixes"] = { description = "{{{langname}}} prefixes attached to a noun that display its noun class.", parents = {"prefixes"}, } labels["nouns"] = { description = "{{{langname}}} terms that indicate people, beings, things, places, phenomena, qualities or ideas.", parents = {"lemmas"}, } labels["nouns by classifier"] = { description = "{{{langname}}} nouns organized by the classifier they are used with.", parents = {{name = "nouns", sort = "classifier"}}, } labels["numerals"] = { description = "{{{langname}}} terms that quantify nouns.", parents = {"lemmas"}, } labels["object concords"] = { description = "{{{langname}}} concords used to show the grammatical object.", parents = {"concords"}, } labels["object pronouns"] = { description = "{{{langname}}} pronouns that refer to grammatical objects.", parents = {"pronouns"}, } labels["particles"] = { description = "{{{langname}}} terms that do not belong to any of the inflected grammatical word classes, often lacking their own grammatical functions and forming other parts of speech or expressing the relationship between clauses.", parents = {"lemmas"}, } labels["passive verbs"] = { description = "{{{langname}}} verbs that are usually used in passive voice.", parents = {"verbs"}, } labels["perfective verbs"] = { description = "{{{langname}}} verbs that express actions considered as completed events, as opposed to ongoing or continuous.", parents = {"verbs"}, } labels["personal pronouns"] = { description = "{{{langname}}} pronouns that are used as substitutes for known nouns.", parents = {"pronouns"}, } labels["phrasal verbs"] = { description = "{{{langname}}} verbs accompanied by particles, such as prepositions and adverbs.", parents = {"verbs", "phrases"}, } labels["phrasal prepositions"] = { description = "{{{langname}}} prepositions formed with combinations of other terms.", parents = {"prepositions", "phrases"}, } labels["pluralia tantum"] = { description = "{{{langname}}} nouns that are mostly or exclusively used in the plural form.", parents = {"nouns"}, } labels["possessional adjectives"] = { description = "{{{langname}}} adjectives that indicate that a noun is in possession of something.", parents = {"adjectives"}, } labels["possessive adjectives"] = { description = "{{{langname}}} adjectives that indicate ownership.", parents = {"adjectives"}, } labels["possessive concords"] = { description = "{{{langname}}} concords used to show possession.", parents = {"concords"}, } labels["possessive determiners"] = { description = "{{{langname}}} determiners that indicate ownership.", parents = {"determiners"}, } labels["possessive pronouns"] = { description = "{{{langname}}} pronouns that indicate ownership.", parents = {"pronouns"}, } labels["postpositional phrases"] = { description = "{{{langname}}} phrases headed by a postposition.", parents = {"phrases", "postpositions"}, } labels["postpositions"] = { description = "{{{langname}}} adpositions that are placed after their objects.", parents = {"lemmas"}, } labels["predicatives"] = { description = "{{{langname}}} elements of the predicate that supplement the subject or object of a sentence via the verb.", parents = {"lemmas"}, } labels["prefixes"] = { description = "Affixes attached to the beginning of {{{langname}}} words.", parents = {"morphemes"}, } labels["prepositional phrases"] = { description = "{{{langname}}} phrases headed by a preposition.", parents = {"phrases", "prepositions"}, } labels["prepositions"] = { description = "{{{langname}}} adpositions that are placed before their objects.", parents = {"lemmas"}, } labels["ablative prepositions"] = { description = "{{{langname}}} prepositions that cause the succeeding noun to be in the ablative case.", parents = {"prepositions"}, } labels["accusative prepositions"] = { description = "{{{langname}}} prepositions that cause the succeeding noun to be in the accusative case.", parents = {"prepositions"}, } labels["dative prepositions"] = { description = "{{{langname}}} prepositions that cause the succeeding noun to be in the dative case.", parents = {"prepositions"}, } labels["genitive prepositions"] = { description = "{{{langname}}} prepositions that cause the succeeding noun to be in the genitive case.", parents = {"prepositions"}, } labels["instrumental prepositions"] = { description = "{{{langname}}} prepositions that cause the succeeding noun to be in the instrumental case.", parents = {"prepositions"}, } labels["matrilineal moieties"] = { description = "{{{langname}}} moieties inherited from an individual's mother.", parents = {"moieties"}, } labels["nominative prepositions"] = { description = "{{{langname}}} prepositions that cause the succeeding noun to be in the nominative case.", parents = {"prepositions"}, } labels["patrilineal moieties"] = { description = "{{{langname}}} moieties inherited from an individual's father.", parents = {"moieties"}, } labels["prepositional prepositions"] = { description = "{{{langname}}} prepositions that cause the succeeding noun to be in the prepositional case.", parents = {"prepositions"}, } labels["prenouns"] = { description = "{{{langname}}} prefixes of various kinds that are attached to nouns.", parents = {"prefixes"}, } labels["preverbs"] = { description = "{{{langname}}} prefixes of various kinds that are attached to verbs.", parents = {"prefixes"}, } labels["privative verbs"] = { description = "{{{langname}}} verbs that indicate that the grammatical object is deprived of something or that something is removed from the object.", parents = {"verbs"}, } labels["pronominal adverbs"] = { description = "{{{langname}}} adverbs that are formed by combining a pronoun with a preposition.", parents = {"adveb", "prepositions", "pronouns"}, } labels["pronominal concords"] = { description = "{{{langname}}} concords that are prefixed to pronominal stems.", parents = {"concords"}, } labels["pronouns"] = { description = "{{{langname}}} terms that refer to and substitute nouns.", parents = {"lemmas"}, } labels["proper nouns"] = { description = "{{{langname}}} nouns that indicate individual entities, such as names of persons, places or organizations.", parents = {"nouns"}, } labels["punctual adverbs"] = { description = "{{{langname}}} adverbs that express a single point or span in time.", parents = {"time adverbs"}, } labels["raising verbs"] = { description = "{{{langname}}} verbs that, in a matrix or main clause, take an argument from an embedded or subordinate clause; in other words, a raising verb appears with a syntactic argument that is not its semantic argument, but is rather the semantic argument of an embedded predicate.", parents = {"verbs"}, } labels["reciprocal pronouns"] = { description = "{{{langname}}} pronouns that refer back to a plural subject and express an action done in two or more directions.", parents = {"pronouns", "personal pronouns"}, } labels["reciprocal verbs"] = { description = "{{{langname}}} verbs that indicate actions, occurrences or states directed from multiple subjects to each other.", parents = {"verbs"}, } labels["reflexive pronouns"] = { description = "{{{langname}}} pronouns that refer back to the subject.", parents = {"pronouns", "personal pronouns"}, } labels["reflexive verbs"] = { description = "{{{langname}}} verbs that indicate actions, occurrences or states directed from the grammatical subjects to themselves.", parents = {"verbs"}, } labels["relational adjectives"] = { description = "{{{langname}}} adjectives that stand in place of a noun when modifying another noun.", parents = {"adjectives"}, } labels["relational nouns"] = { description = "{{{langname}}} nouns used to indicate a relation between other two nouns by means of possession.", parents = {"nouns"}, } labels["relative adjectives"] = { description = "{{{langname}}} adjectives used to indicate [[relative clause]]s.", parents = {"adjectives", {name = "relative pro-forms", sort = "adjectives"}}, } labels["relative adverbs"] = { description = "{{{langname}}} adverbs used to indicate [[relative clause]]s.", parents = {"adveb", {name = "relative pro-forms", sort = "adveb"}}, } labels["relative determiners"] = { description = "{{{langname}}} determiners used to indicate [[relative clause]]s.", parents = {"determiners", {name = "relative pro-forms", sort = "determiners"}}, } labels["relative concords"] = { description = "{{{langname}}} concords that are prefixed to relative stems.", parents = {"concords"}, } labels["relative pronouns"] = { description = "{{{langname}}} pronouns used to indicate [[relative clause]]s.", parents = {"pronouns", {name = "relative pro-forms", sort = "pronouns"}}, } labels["relatives"] = { description = "{{{langname}}} terms that give attributes to nouns, acting grammatically as relative clauses.", parents = {"lemmas"}, } labels["repetitive verbs"] = { description = "{{{langname}}} verbs that indicate actions or events which are performed or occur again, anew or differently.", parents = {"verbs"}, } labels["resultative verbs"] = { description = "{{{langname}}} verbs that indicate a result of some action", parents = {"verbs"}, } labels["reversative verbs"] = { description = "{{{langname}}} verbs that indicate that the reversal or undoing of an action, event or state.", parents = {"verbs"}, } labels["saturative verbs"] = { description = "{{{langname}}} verbs which indicate that an action is performed to the point of saturation or satisfaction.", parents = {"verbs"}, } labels["semelfactive verbs"] = { description = "{{{langname}}} verbs that are punctual (instantaneous, momentive), perfective (treated as a unitary whole with no explicit internal temporal structure), and telic (having a boundary out of which the activity cannot be said to have taken place or continue).", parents = {"verbs"}, } labels["sentence adverbs"] = { description = "{{{langname}}} adverbs that modify an entire clause or sentence.", parents = {"adveb"}, } labels["sequence adverbs"] = { description = "{{{langname}}} conjunctive adverbs that express sequence in space or time.", parents = {"conjunctive adverbs"}, } labels["simulfixes"] = { description = "Affixes replacing positions in {{{langname}}} words.", parents = {"morphemes"}, } labels["singulative nouns"] = { description = "{{{langname}}} nouns that indicate a single item of a group of related things or beings.", parents = {"nouns"}, } labels["singularia tantum"] = { description = "{{{langname}}} nouns that are mostly or exclusively used in the singular form.", parents = {"nouns"}, } labels["stative verbs"] = { description = "{{{langname}}} verbs that define a state with no or insignificant internal dynamics.", parents = {"verbs"}, } labels["stems"] = { description = "Morphemes from which {{{langname}}} words are formed.", parents = {"morphemes"}, } labels["subordinating conjunctions"] = { description = "{{{langname}}} conjunctions that indicate relations of syntactic dependence between connected items.", parents = {"conjunctions"}, } labels["subject concords"] = { description = "{{{langname}}} concords used to show the grammatical subject.", parents = {"concords"}, } labels["subject pronouns"] = { description = "{{{langname}}} pronouns that refer to grammatical subjects.", parents = {"pronouns"}, } labels["suffixes"] = { description = "Affixes attached to the end of {{{langname}}} words.", parents = {"morphemes"}, } labels["splitting verbs"] = { description = "{{{langname}}} bisyllabic verbs that obligatorily split around a direct object or pronoun.", parents = {"verbs"}, } labels["terminative verbs"] = { description = "{{{langname}}} verbs that indicate that an action or event ceases.", parents = {"verbs"}, } labels["time adverbs"] = { description = "{{{langname}}} adverbs that indicate time.", parents = {"adveb"}, } labels["transfixes"] = { description = "Discontinuous affixes inserted within a word root.", parents = {"morphemes"}, } labels["transformative verbs"] = { description = "{{{langname}}} verbs that indicate a change of state or nature, in the subject for intransitive verbs and in the object for transitive verbs.", parents = {"verbs"}, } labels["transitive verbs"] = { description = "{{{langname}}} verbs that indicate actions, occurrences or states directed to one or more grammatical objects.", parents = {"verbs"}, } labels["uncomparable adjectives"] = { description = "{{{langname}}} adjectives that are not inflected to display different degrees of comparison.", parents = {"adjectives"}, } labels["uncomparable adverbs"] = { description = "{{{langname}}} adverbs that are not inflected to display different degrees of comparison.", parents = {"adveb"}, } labels["uncountable nouns"] = { description = "{{{langname}}} nouns that indicate qualities, ideas, unbounded mass or other abstract concepts that cannot be quantified directly by numerals.", parents = {"nouns"}, } labels["verbal nouns"] = { description = "{{{langname}}} nouns morphologically related to a verb and similar to it in meaning.", parents = {"nouns"}, } labels["verbs"] = { description = "{{{langname}}} terms that indicate actions, occurrences or states.", parents = {"lemmas"}, } labels["verbs of movement"] = { description = "{{{langname}}} verbs that indicate physical movement of the grammatical subject across a trajectory, with a starting point and an endpoint.", parents = {"verbs"}, } -- Add "POS-forming suffixes". local poses_derived_by_suffix = { "adjective", "adveb", "noun", "verb", } for _, pos in pairs(poses_derived_by_suffix) do labels[pos .. "-forming suffixes"] = { description = "{{{langname}}} suffixes that are used to derive " .. pos .. "s from other words.", parents = {"derivational suffixes"}, } end local labels2 = {} -- Add "reconstructed" subcategories; add 'umbrella_parents' key if not -- already present. for key, data in pairs(labels) do labels2[key] = data if not data.umbrella_parents then data.umbrella_parents = "Lemmas subcategories by language" end labels2["reconstructed " .. key] = { description = "{{{langname}}} " .. key .. " that have been linguistically [[Wiktionary:Reconstructed terms|reconstructed]].", umbrella_parents = "Lemmas subcategories by language", parents = {key, {name = "reconstructed terms", sort = key}} } end ----------------------------------------------------------------------------- -- -- -- RAW CATEGORIES -- -- -- ----------------------------------------------------------------------------- raw_categories["Lemmas subcategories by language"] = { description = "Umbrella categories covering topics related to lemmas.", additional = "{{{umbrella_meta_msg}}}", parents = { "Umbrella metacategories", {name = "lemmas", is_label = true, sort = " "}, }, } ----------------------------------------------------------------------------- -- -- -- HANDLERS -- -- -- ----------------------------------------------------------------------------- -- Handler for e.g. [[:Category:English phrasal verbs with particle (around)]]. table.insert(handlers, function(data) local particle = data.label:match("^phrasal verbs with particle %((.-)%)$") if particle then local tagged_text = require("Module:script utilities").tag_text(particle, data.lang, nil, "term") local link = require("Module:links").full_link({ term = particle, lang = data.lang }, "term") return { description = "{{{langname}}} {{w|phrasal verb}}s using the particle " .. link .. ".", displaytitle = "{{{langname}}} phrasal verbs with particle (" .. tagged_text .. ")", breadcrumb = tagged_text, parents = {{ name = "phrasal verbs", sort = particle }}, umbrella = false, } end end) return {LABELS = labels2, RAW_CATEGORIES = raw_categories, HANDLERS = handlers} 6fsqrpi641hhuduh6rauoe442u5q0ub Yusa:Asinis632 2 5280 13288 2022-08-01T21:05:02Z Asinis632 1829 Created page with "Ја сам Синиша Стаматовић. [[file:Fabulous inari.png|right|450п|mini|Коцка]]" wikitext text/x-wiki Ја сам Синиша Стаматовић. [[file:Fabulous inari.png|right|450п|mini|Коцка]] n7qqm6g8ttb35pillfgva1y9atcfwx9 pamukmeri 0 5281 13289 2022-08-01T21:12:03Z Asinis632 1829 Created page with "{{-tpi-}} {{attention|tpi}} ===Etymology=== From {{af|tpi|pamuk|meri}}. ===Noun=== {{head|tpi|noun}} # [[prostitute]] ===References=== * {{cite-book|2008|Christian Lehmann; Geert E. Booij; Joachim Mugdan; Stavros Skopeteas; Wolfgang Kesselheim|Morphologie / Morphology|volume=2|publisher=De Gruyter|isbn=9783110194272||1764|entry=pamukmeri|pageurl=https://books.google.com/books?id=wqikmIpNjjYC&pg=PA1764}} {{topics|tpi|Sex}}" wikitext text/x-wiki {{-tpi-}} {{attention|tpi}} ===Etymology=== From {{af|tpi|pamuk|meri}}. ===Noun=== {{head|tpi|noun}} # [[prostitute]] ===References=== * {{cite-book|2008|Christian Lehmann; Geert E. Booij; Joachim Mugdan; Stavros Skopeteas; Wolfgang Kesselheim|Morphologie / Morphology|volume=2|publisher=De Gruyter|isbn=9783110194272||1764|entry=pamukmeri|pageurl=https://books.google.com/books?id=wqikmIpNjjYC&pg=PA1764}} {{topics|tpi|Sex}} dzqzx9q464lmqa64p5yqa6j2wkgdofx Grup:tpi:Sex 14 5282 13290 2022-08-01T21:12:36Z Asinis632 1829 Created page with "{{auto cat}}" wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Module:category tree/poscatboiler 828 5283 13291 2022-08-01T21:13:16Z Asinis632 1829 Created page with "local export = {} local label_data = require("Module:category tree/poscatboiler/data") -- Category object local Category = {} Category.__index = Category function Category.new_main(frame) local self = setmetatable({}, Category) local params = { [1] = {}, [2] = {required = true}, [3] = {}, ["raw"] = {type = "boolean"}, } local args, remaining_args = require("Module:parameters").process(frame:getParent().args, params, true) self._info = {code = args[1],..." Scribunto text/plain local export = {} local label_data = require("Module:category tree/poscatboiler/data") -- Category object local Category = {} Category.__index = Category function Category.new_main(frame) local self = setmetatable({}, Category) local params = { [1] = {}, [2] = {required = true}, [3] = {}, ["raw"] = {type = "boolean"}, } local args, remaining_args = require("Module:parameters").process(frame:getParent().args, params, true) self._info = {code = args[1], label = args[2], sc = args[3], raw = args.raw, args = remaining_args} self:initCommon() if not self._data then return nil end return self end function Category:get_originating_info() local originating_info = "" if self._info.originating_label then originating_info = " (originating from label \"" .. self._info.originating_label .. "\" in module [[" .. self._info.originating_module .. "]])" end return originating_info end function Category.new(info) for key, val in pairs(info) do if not (key == "code" or key == "label" or key == "sc" or key == "raw" or key == "args" or key == "called_from_inside" or key == "originating_label" or key == "originating_module") then error("The parameter \"" .. key .. "\" was not recognized.") end end local self = setmetatable({}, Category) self._info = info if not self._info.label then error("No label was specified.") end self:initCommon() if not self._data then error("The " .. (self._info.raw and "raw " or "") .. "label \"" .. self._info.label .. "\" does not exist" .. self:get_originating_info() .. ".") end return self end export.new = Category.new export.new_main = Category.new_main function Category:initCommon() local args_handled = false if self._info.raw then -- Check if the category exists local raw_categories = label_data["RAW_CATEGORIES"] self._data = raw_categories[self._info.label] if self._data then if self._data.lang then self._lang = require("Module:languages").getByCode(self._data.lang, true) self._info.code = self._lang:getCode() end if self._data.sc then self._sc = require("Module:scripts").getByCode(self._data.sc, true) self._info.sc = self._sc:getCode() end else -- Go through raw handlers local data = { category = self._info.label, args = self._info.args or {}, called_from_inside = self._info.called_from_inside, } for _, handler in ipairs(label_data["RAW_HANDLERS"]) do self._data, args_handled = handler.handler(data) if self._data then self._data.module = self._data.module or handler.module break end end if self._data then if self._data.lang then if type(self._data.lang) ~= "string" then error("Received non-string value " .. mw.dumpObject(self._data.lang) .. " for self._data.lang, label \"" .. self._info.label .. "\"" .. self:get_originating_info() .. ".") end self._lang = require("Module:languages").getByCode(self._data.lang, true) self._info.code = self._lang:getCode() end if self._data.sc then if type(self._data.sc) ~= "string" then error("Received non-string value " .. mw.dumpObject(self._data.sc) .. " for self._data.sc, label \"" .. self._info.label .. "\"" .. self:get_originating_info() .. ".") end self._sc = require("Module:scripts").getByCode(self._data.sc, true) self._info.sc = self._sc:getCode() end end end else -- Already parsed into language + label if self._info.code then self._lang = require("Module:languages").getByCode(self._info.code, 1) else self._lang = nil end if self._info.sc then self._sc = require("Module:scripts").getByCode(self._info.sc) or error("The script code \"" .. self._info.sc .. "\" is not valid.") else self._sc = nil end -- Check if the label exists local labels = label_data["LABELS"] self._data = labels[self._info.label] -- Go through handlers if not self._data then local data = { label = self._info.label, lang = self._lang, sc = self._sc, args = self._info.args or {}, called_from_inside = self._info.called_from_inside, } for _, handler in ipairs(label_data["HANDLERS"]) do self._data, args_handled = handler.handler(data) if self._data then self._data.module = self._data.module or handler.module break end end end end if not args_handled and self._data and self._info.args and next(self._info.args) then local module_text = " (handled in [[" .. (self._data.module or "UNKNOWN").. "]])" local args_text = {} for k, v in pairs(self._info.args) do table.insert(args_text, k .. "=" .. ((type(v) == "string" or type(v) == "number") and v or mw.dumpObject(v))) end error("poscatboiler label '" .. self._info.label .. "' " .. module_text .. " doesn't accept extra args " .. table.concat(args_text, ", ")) end if self._sc and not self._lang then error("Umbrella categories cannot have a script specified.") end end function Category:substitute_template_specs(desc) if not desc then return desc end if type(desc) == "number" then desc = tostring(desc) end desc = desc:gsub("{{PAGENAME}}", mw.title.getCurrentTitle().text) desc = desc:gsub("{{{umbrella_msg}}}", "This is an umbrella category. It contains no dictionary entries, but only other, language-specific categories, which in turn contain relevant terms in a given language.") desc = desc:gsub("{{{umbrella_meta_msg}}}", 'This is an umbrella metacategory, covering a general area such as "lemmas", "names" or "terms by etymology". It contains no dictionary entries, but holds only umbrella ("by language") categories covering specific subtopics, which in turn contain language-specific categories holding terms in a given language for that same topic.') if self._lang then desc = desc:gsub("{{{langname}}}", self._lang:getCanonicalName()) desc = desc:gsub("{{{langcode}}}", self._lang:getCode()) desc = desc:gsub("{{{langcat}}}", self._lang:getCategoryName()) desc = desc:gsub("{{{langlink}}}", self._lang:makeCategoryLink()) end if self._sc then desc = desc:gsub("{{{scname}}}", self._sc:getCanonicalName()) desc = desc:gsub("{{{sccode}}}", self._sc:getCode()) desc = desc:gsub("{{{sccat}}}", self._sc:getCategoryName()) desc = desc:gsub("{{{scdisp}}}", self._sc:getDisplayForm()) desc = desc:gsub("{{{sclink}}}", self._sc:makeCategoryLink()) end if desc:find("{") then desc = mw.getCurrentFrame():preprocess(desc) end return desc end function Category:substitute_template_specs_in_args(args) if not args then return args end local pinfo = {} for k, v in pairs(args) do k = self:substitute_template_specs(k) v = self:substitute_template_specs(v) pinfo[k] = v end return pinfo end function Category:make_new(info) info.originating_label = self._info.label info.originating_module = self._data.module info.called_from_inside = true return Category.new(info) end function Category:getBreadcrumbName() local ret if self._lang or self._info.raw then ret = self._data.breadcrumb else ret = self._data.umbrella and self._data.umbrella.breadcrumb end if not ret then ret = self._info.label end if type(ret) == "string" or type(ret) == "number" then ret = {name = ret} end local name = self:substitute_template_specs(ret.name) local nocap = ret.nocap if self._sc then name = name .. " in " .. self._sc:getDisplayForm() end return name, nocap end function Category:getTOC(toc_type) local ret -- type "none" means everything fits on a single page; fall back to normal behavior (display nothing) if toc_type == "none" then return true end -- Return the textual expansion of the first existing template among the given templates, first performing -- substitutions on the template name such as replacing {{{langcode}}} with the current language's code (if any). -- If no templates exist after expansion, or if nil is passed in, return nil. If a single string is passed in, -- treat it like a one-element list consisting of that string. local function get_template_text(templates) if templates == nil then return nil end if type(templates) ~= "table" then templates = {templates} end for _, template in ipairs(templates) do if template == false then return false end template = self:substitute_template_specs(template) local template_obj = mw.title.new("Template:" .. template) if template_obj.exists then return mw.getCurrentFrame():expandTemplate{title = template_obj.text, args = {}} end end return nil end local templates, fallback_templates -- If TOC type is "full" (more than 2500 entries), do the following, in order: -- 1. look up and expand the `toc_template_full` templates (normal or umbrella, depending on whether there is -- a current language); -- 2. look up and expand the `toc_template` templates (normal or umbrella, as above); -- 3. do the default behavior, which is as follows: -- 3a. look up a language-specific "full" template according to the current language (using English if there -- is no current language); -- 3b. look up a language-specific "normal" template according to the current language (using English if there -- is no current language); -- 3c. display nothing. -- -- If TOC type is "normal" (between 200 and 2500 entries), do the following, in order: -- 1. look up and expand the `toc_template` templates (normal or umbrella, depending on whether there is -- a current language); -- 2. do the default behavior, which is as follows: -- 2a. look up a language-specific "normal" template according to the current language (using English if there -- is no current language); -- 2b. display nothing. local data_source if self._lang or self._info.raw then data_source = self._data else data_source = self._data.umbrella end if data_source then if toc_type == "full" then templates = data_source.toc_template_full fallback_templates = data_source.toc_template else templates = data_source.toc_template end end local text = get_template_text(templates) if text then return text end if text == false then return nil end text = get_template_text(fallback_templates) if text then return text end if text == false then return nil end return true end function Category:getInfo() return self._info end function Category:getDataModule() return self._data.module end function Category:canBeEmpty() if self._lang or self._info.raw then return self._data.can_be_empty else return self._data.umbrella and self._data.umbrella.can_be_empty end end function Category:isHidden() if self._lang or self._info.raw then return self._data.hidden else return self._data.umbrella and self._data.umbrella.hidden end end function Category:getCategoryName() if self._info.raw then return self._info.label elseif self._lang then local ret = self._lang:getCanonicalName() .. " " .. self._info.label if self._sc then ret = ret .. " in " .. self._sc:getDisplayForm() end return mw.getContentLanguage():ucfirst(ret) else local ret = mw.getContentLanguage():ucfirst(self._info.label) if not (self._data.umbrella and self._data.umbrella.no_by_language) then ret = ret .. " by language" end return ret end end function Category:getIntro() if self._lang or self._info.raw then return self:substitute_template_specs(self._data.intro) else return self._data.umbrella and self:substitute_template_specs(self._data.umbrella.intro) end end local function remove_lang_params(desc) desc = desc:gsub("{{{langname}}} ", "") desc = desc:gsub("{{{langcode}}} ", "") desc = desc:gsub("{{{langcat}}} ", "") return desc end function Category:getDescription(isChild) -- Allows different text in the list of a category's children local isChild = isChild == "child" local function display_title(displaytitle, lang) if type(displaytitle) == "string" then displaytitle = self:substitute_template_specs(displaytitle) else displaytitle = displaytitle(self:getCategoryName(), lang) end mw.getCurrentFrame():callParserFunction("DISPLAYTITLE", "Category:" .. displaytitle) end if self._lang or self._info.raw then if not isChild and self._data.displaytitle then display_title(self._data.displaytitle, self._lang) end if self._sc then return self:getCategoryName() .. "." else local desc = self._data.description if not isChild and desc and self._data.additional then desc = desc .. "\n\n" .. self._data.additional end return self:substitute_template_specs(desc) end else if not isChild and self._data.umbrella and self._data.umbrella.displaytitle then display_title(self._data.umbrella.displaytitle, nil) end local desc = self._data.umbrella and self._data.umbrella.description local has_umbrella_desc = not not desc if not desc then desc = self._data.description if desc then desc = remove_lang_params(desc) desc = mw.getContentLanguage():lcfirst(desc) desc = desc:gsub("%.$", "") desc = "Categories with " .. desc .. "." end end if not desc then desc = "Categories with " .. self._info.label .. " in various specific languages." end if not isChild then local additional = self._data.umbrella and self._data.umbrella.additional or not has_umbrella_desc and self._data.additional if additional then desc = desc .. "\n\n" .. remove_lang_params(additional) end desc = desc .. "\n\n{{{umbrella_msg}}}" end desc = self:substitute_template_specs(desc) return desc end end function Category:canonicalize_parents_children(cats, is_children) if not cats then return nil end if type(cats) ~= "table" then cats = {cats} end if cats.name or cats.module then cats = {cats} end if #cats == 0 then return nil end local ret = {} for _, cat in ipairs(cats) do if type(cat) ~= "table" or not cat.name and not cat.module then cat = {name = cat} end table.insert(ret, cat) end local is_umbrella = not self._lang and not self._info.raw local table_type = is_children and "extra_children" or "parents" for i, cat in ipairs(ret) do local sort_key = self:substitute_template_specs(cat.sort) local name = cat.name if cat.module then -- A reference to a category using another category tree module. if not cat.args then error("Missing .args in '" .. table_type .. "' table with module=\"" .. cat.module .. "\" for '" .. self._info.label .. "' category entry in module '" .. (self._data.module or "unknown") .. "'") end name = require("Module:category tree/" .. cat.module).new(self:substitute_template_specs_in_args(cat.args)) else if not name then error("Missing .name in " .. (is_umbrella and "umbrella " or "") .. "'" .. table_type .. "' table for '" .. self._info.label .. "' category entry in module '" .. (self._data.module or "unknown") .. "'") end if type(name) ~= "string" then -- assume it's a category object and use it directly else name = self:substitute_template_specs(name) if name:find("^Category:") then -- It's a non-poscatboiler category name. sort_key = sort_key or is_children and name:gsub("^Category:", "") or self:getCategoryName() else -- It's a label. local raw if self._info.raw or is_umbrella then raw = not cat.is_label else raw = cat.raw end local cat_code if cat.lang == false then cat_code = nil elseif cat.lang then cat_code = self:substitute_template_specs(cat.lang) elseif not raw then cat_code = self._info.code end sort_key = sort_key or is_children and name or self._info.label name = self:make_new({ label = name, code = cat_code, sc = self:substitute_template_specs(cat.sc), raw = raw, args = self:substitute_template_specs_in_args(cat.args) }) end end end sort_key = mw.ustring.upper(sort_key or is_children and " " or self._info.label) local description = is_children and self:substitute_template_specs(cat.description) or nil ret[i] = {name = name, description = description, sort = sort_key} end return ret end function Category:getParents() local is_umbrella = not self._lang and not self._info.raw if self._sc then local parent1 = self:make_new({code = self._info.code, label = "terms in " .. self._sc:getCanonicalName() .. " script"}) local parent2 = self:make_new({code = self._info.code, label = self._info.label, raw = self._info.raw, args = self._info.args}) return { {name = parent1, sort = self._sc:getCanonicalName()}, {name = parent2, sort = self._sc:getCanonicalName()}, } else local parents if is_umbrella then parents = self._data.umbrella and self._data.umbrella.parents or self._data.umbrella_parents else parents = self._data.parents end return self:canonicalize_parents_children(parents) end end function Category:getChildren() local is_umbrella = not self._lang and not self._info.raw local children = self._data.children local ret = {} if not is_umbrella and children then for _, child in ipairs(children) do child = mw.clone(child) if type(child) ~= "table" then child = {name = child} end if not child.sort then child.sort = child.name end -- FIXME, is preserving the script correct? child.name = self:make_new({code = self._info.code, label = child.name, raw = child.raw, sc = self._info.sc}) table.insert(ret, child) end end local extra_children if is_umbrella then extra_children = self._data.umbrella and self._data.umbrella.extra_children else extra_children = self._data.extra_children end extra_children = self:canonicalize_parents_children(extra_children, "children") if extra_children then for _, child in ipairs(extra_children) do table.insert(ret, child) end end if #ret == 0 then return nil end return ret end function Category:getUmbrella() if self._info.raw or not self._lang or self._sc or self._data.umbrella == false then return nil end return self:make_new({label = self._info.label}) end function Category:getAppendix() -- FIXME, this should be customizable. if not self._info.raw and self._info.label and self._lang then local appendixName = "Appendix:" .. self._lang:getCanonicalName() .. " " .. self._info.label local appendix = mw.title.new(appendixName).exists if appendix then return appendixName else return nil end else return nil end end function Category:getCatfixInfo() if self._lang or self._info.raw then if self._data.catfix == false then return nil end local lang, sc if self._data.catfix then lang = require("Module:languages").getByCode(self:substitute_template_specs(self._data.catfix), true) else lang = self._lang end if self._data.catfix_sc then sc = require("Module:scripts").getByCode(self:substitute_template_specs(self._data.catfix_sc), true) else sc = self._sc end return lang, sc else -- umbrella if not self._data.umbrella or not self._data.umbrella.catfix then return nil end local lang = require("Module:languages").getByCode(self:substitute_template_specs(self._data.umbrella.catfix), true) local sc = self:substitute_template_specs(self._data.umbrella.catfix_sc) if sc then sc = require("Module:scripts").getByCode(sc, true) end return lang, sc end end function Category:getTOCTemplateName() local lang, sc = self:getCatfixInfo() local code = lang and lang:getCode() or "en" return "Template:" .. code .. "-" .. (self._data.toctemplateprefix or "") .. "categoryTOC" end return export 3ebgs1qcb3ygyb5am2w9q88a6v2pgpr 13292 13291 2022-08-01T21:15:05Z Asinis632 1829 Scribunto text/plain local export = {} local label_data = require("Module:category tree/poscatboiler/data") -- Category object local Category = {} Category.__index = Category function Category.new_main(frame) local self = setmetatable({}, Category) local params = { [1] = {}, [2] = {required = true}, [3] = {}, ["raw"] = {type = "boolean"}, } local args, remaining_args = require("Module:parameters").process(frame:getParent().args, params, true) self._info = {code = args[1], label = args[2], sc = args[3], raw = args.raw, args = remaining_args} self:initCommon() if not self._data then return nil end return self end function Category:get_originating_info() local originating_info = "" if self._info.originating_label then originating_info = " (originating from label \"" .. self._info.originating_label .. "\" in module [[" .. self._info.originating_module .. "]])" end return originating_info end function Category.new(info) for key, val in pairs(info) do if not (key == "code" or key == "label" or key == "sc" or key == "raw" or key == "args" or key == "called_from_inside" or key == "originating_label" or key == "originating_module") then error("The parameter \"" .. key .. "\" was not recognized.") end end local self = setmetatable({}, Category) self._info = info if not self._info.label then error("No label was specified.") end self:initCommon() if not self._data then error("The " .. (self._info.raw and "raw " or "") .. "label \"" .. self._info.label .. "\" does not exist" .. self:get_originating_info() .. ".") end return self end export.new = Category.new export.new_main = Category.new_main function Category:initCommon() local args_handled = false if self._info.raw then -- Check if the category exists local raw_categories = label_data["RAW_CATEGORIES"] self._data = raw_categories[self._info.label] if self._data then if self._data.lang then self._lang = require("Module:languages").getByCode(self._data.lang, true) self._info.code = self._lang:getCode() end if self._data.sc then self._sc = require("Module:scripts").getByCode(self._data.sc, true) self._info.sc = self._sc:getCode() end else -- Go through raw handlers local data = { category = self._info.label, args = self._info.args or {}, called_from_inside = self._info.called_from_inside, } for _, handler in ipairs(label_data["RAW_HANDLERS"]) do self._data, args_handled = handler.handler(data) if self._data then self._data.module = self._data.module or handler.module break end end if self._data then if self._data.lang then if type(self._data.lang) ~= "string" then error("Received non-string value " .. mw.dumpObject(self._data.lang) .. " for self._data.lang, label \"" .. self._info.label .. "\"" .. self:get_originating_info() .. ".") end self._lang = require("Module:languages").getByCode(self._data.lang, true) self._info.code = self._lang:getCode() end if self._data.sc then if type(self._data.sc) ~= "string" then error("Received non-string value " .. mw.dumpObject(self._data.sc) .. " for self._data.sc, label \"" .. self._info.label .. "\"" .. self:get_originating_info() .. ".") end self._sc = require("Module:scripts").getByCode(self._data.sc, true) self._info.sc = self._sc:getCode() end end end else -- Already parsed into language + label if self._info.code then self._lang = require("Module:languages").getByCode(self._info.code, 1) else self._lang = nil end if self._info.sc then self._sc = require("Module:scripts").getByCode(self._info.sc) or error("The script code \"" .. self._info.sc .. "\" is not valid.") else self._sc = nil end -- Check if the label exists local labels = label_data["LABELS"] self._data = labels[self._info.label] -- Go through handlers if not self._data then local data = { label = self._info.label, lang = self._lang, sc = self._sc, args = self._info.args or {}, called_from_inside = self._info.called_from_inside, } for _, handler in ipairs(label_data["HANDLERS"]) do self._data, args_handled = handler.handler(data) if self._data then self._data.module = self._data.module or handler.module break end end end end if not args_handled and self._data and self._info.args and next(self._info.args) then local module_text = " (handled in [[" .. (self._data.module or "UNKNOWN").. "]])" local args_text = {} for k, v in pairs(self._info.args) do table.insert(args_text, k .. "=" .. ((type(v) == "string" or type(v) == "number") and v or mw.dumpObject(v))) end error("poscatboiler label '" .. self._info.label .. "' " .. module_text .. " doesn't accept extra args " .. table.concat(args_text, ", ")) end if self._sc and not self._lang then error("Umbrella categories cannot have a script specified.") end end function Category:substitute_template_specs(desc) if not desc then return desc end if type(desc) == "number" then desc = tostring(desc) end desc = desc:gsub("{{PAGENAME}}", mw.title.getCurrentTitle().text) desc = desc:gsub("{{{umbrella_msg}}}", "This is an umbrella category. It contains no dictionary entries, but only other, language-specific categories, which in turn contain relevant terms in a given language.") desc = desc:gsub("{{{umbrella_meta_msg}}}", 'This is an umbrella metacategory, covering a general area such as "lemmas", "names" or "terms by etymology". It contains no dictionary entries, but holds only umbrella ("by language") categories covering specific subtopics, which in turn contain language-specific categories holding terms in a given language for that same topic.') if self._lang then desc = desc:gsub("{{{langname}}}", self._lang:getCanonicalName()) desc = desc:gsub("{{{langcode}}}", self._lang:getCode()) desc = desc:gsub("{{{langcat}}}", self._lang:getCategoryName()) desc = desc:gsub("{{{langlink}}}", self._lang:makeCategoryLink()) end if self._sc then desc = desc:gsub("{{{scname}}}", self._sc:getCanonicalName()) desc = desc:gsub("{{{sccode}}}", self._sc:getCode()) desc = desc:gsub("{{{sccat}}}", self._sc:getCategoryName()) desc = desc:gsub("{{{scdisp}}}", self._sc:getDisplayForm()) desc = desc:gsub("{{{sclink}}}", self._sc:makeCategoryLink()) end if desc:find("{") then desc = mw.getCurrentFrame():preprocess(desc) end return desc end function Category:substitute_template_specs_in_args(args) if not args then return args end local pinfo = {} for k, v in pairs(args) do k = self:substitute_template_specs(k) v = self:substitute_template_specs(v) pinfo[k] = v end return pinfo end function Category:make_new(info) info.originating_label = self._info.label info.originating_module = self._data.module info.called_from_inside = true return Category.new(info) end function Category:getBreadcrumbName() local ret if self._lang or self._info.raw then ret = self._data.breadcrumb else ret = self._data.umbrella and self._data.umbrella.breadcrumb end if not ret then ret = self._info.label end if type(ret) == "string" or type(ret) == "number" then ret = {name = ret} end local name = self:substitute_template_specs(ret.name) local nocap = ret.nocap if self._sc then name = name .. " in " .. self._sc:getDisplayForm() end return name, nocap end function Category:getTOC(toc_type) local ret -- type "none" means everything fits on a single page; fall back to normal behavior (display nothing) if toc_type == "none" then return true end -- Return the textual expansion of the first existing template among the given templates, first performing -- substitutions on the template name such as replacing {{{langcode}}} with the current language's code (if any). -- If no templates exist after expansion, or if nil is passed in, return nil. If a single string is passed in, -- treat it like a one-element list consisting of that string. local function get_template_text(templates) if templates == nil then return nil end if type(templates) ~= "table" then templates = {templates} end for _, template in ipairs(templates) do if template == false then return false end template = self:substitute_template_specs(template) local template_obj = mw.title.new("Template:" .. template) if template_obj.exists then return mw.getCurrentFrame():expandTemplate{title = template_obj.text, args = {}} end end return nil end local templates, fallback_templates -- If TOC type is "full" (more than 2500 entries), do the following, in order: -- 1. look up and expand the `toc_template_full` templates (normal or umbrella, depending on whether there is -- a current language); -- 2. look up and expand the `toc_template` templates (normal or umbrella, as above); -- 3. do the default behavior, which is as follows: -- 3a. look up a language-specific "full" template according to the current language (using English if there -- is no current language); -- 3b. look up a language-specific "normal" template according to the current language (using English if there -- is no current language); -- 3c. display nothing. -- -- If TOC type is "normal" (between 200 and 2500 entries), do the following, in order: -- 1. look up and expand the `toc_template` templates (normal or umbrella, depending on whether there is -- a current language); -- 2. do the default behavior, which is as follows: -- 2a. look up a language-specific "normal" template according to the current language (using English if there -- is no current language); -- 2b. display nothing. local data_source if self._lang or self._info.raw then data_source = self._data else data_source = self._data.umbrella end if data_source then if toc_type == "full" then templates = data_source.toc_template_full fallback_templates = data_source.toc_template else templates = data_source.toc_template end end local text = get_template_text(templates) if text then return text end if text == false then return nil end text = get_template_text(fallback_templates) if text then return text end if text == false then return nil end return true end function Category:getInfo() return self._info end function Category:getDataModule() return self._data.module end function Category:canBeEmpty() if self._lang or self._info.raw then return self._data.can_be_empty else return self._data.umbrella and self._data.umbrella.can_be_empty end end function Category:isHidden() if self._lang or self._info.raw then return self._data.hidden else return self._data.umbrella and self._data.umbrella.hidden end end function Category:getCategoryName() if self._info.raw then return self._info.label elseif self._lang then local ret = self._lang:getCanonicalName() .. " " .. self._info.label if self._sc then ret = ret .. " in " .. self._sc:getDisplayForm() end return mw.getContentLanguage():ucfirst(ret) else local ret = mw.getContentLanguage():ucfirst(self._info.label) if not (self._data.umbrella and self._data.umbrella.no_by_language) then ret = ret .. " by language" end return ret end end function Category:getIntro() if self._lang or self._info.raw then return self:substitute_template_specs(self._data.intro) else return self._data.umbrella and self:substitute_template_specs(self._data.umbrella.intro) end end local function remove_lang_params(desc) desc = desc:gsub("{{{langname}}} ", "") desc = desc:gsub("{{{langcode}}} ", "") desc = desc:gsub("{{{langcat}}} ", "") return desc end function Category:getDescription(isChild) -- Allows different text in the list of a category's children local isChild = isChild == "child" local function display_title(displaytitle, lang) if type(displaytitle) == "string" then displaytitle = self:substitute_template_specs(displaytitle) else displaytitle = displaytitle(self:getCategoryName(), lang) end mw.getCurrentFrame():callParserFunction("DISPLAYTITLE", "Category:" .. displaytitle) end if self._lang or self._info.raw then if not isChild and self._data.displaytitle then display_title(self._data.displaytitle, self._lang) end if self._sc then return self:getCategoryName() .. "." else local desc = self._data.description if not isChild and desc and self._data.additional then desc = desc .. "\n\n" .. self._data.additional end return self:substitute_template_specs(desc) end else if not isChild and self._data.umbrella and self._data.umbrella.displaytitle then display_title(self._data.umbrella.displaytitle, nil) end local desc = self._data.umbrella and self._data.umbrella.description local has_umbrella_desc = not not desc if not desc then desc = self._data.description if desc then desc = remove_lang_params(desc) desc = mw.getContentLanguage():lcfirst(desc) desc = desc:gsub("%.$", "") desc = "Categories with " .. desc .. "." end end if not desc then desc = "Categories with " .. self._info.label .. " in various specific languages." end if not isChild then local additional = self._data.umbrella and self._data.umbrella.additional or not has_umbrella_desc and self._data.additional if additional then desc = desc .. "\n\n" .. remove_lang_params(additional) end desc = desc .. "\n\n{{{umbrella_msg}}}" end desc = self:substitute_template_specs(desc) return desc end end function Category:canonicalize_parents_children(cats, is_children) if not cats then return nil end if type(cats) ~= "table" then cats = {cats} end if cats.name or cats.module then cats = {cats} end if #cats == 0 then return nil end local ret = {} for _, cat in ipairs(cats) do if type(cat) ~= "table" or not cat.name and not cat.module then cat = {name = cat} end table.insert(ret, cat) end local is_umbrella = not self._lang and not self._info.raw local table_type = is_children and "extra_children" or "parents" for i, cat in ipairs(ret) do local sort_key = self:substitute_template_specs(cat.sort) local name = cat.name if cat.module then -- A reference to a category using another category tree module. if not cat.args then error("Missing .args in '" .. table_type .. "' table with module=\"" .. cat.module .. "\" for '" .. self._info.label .. "' category entry in module '" .. (self._data.module or "unknown") .. "'") end name = require("Module:category tree/" .. cat.module).new(self:substitute_template_specs_in_args(cat.args)) else if not name then error("Missing .name in " .. (is_umbrella and "umbrella " or "") .. "'" .. table_type .. "' table for '" .. self._info.label .. "' category entry in module '" .. (self._data.module or "unknown") .. "'") end if type(name) ~= "string" then -- assume it's a category object and use it directly else name = self:substitute_template_specs(name) if name:find("^Category:") then -- It's a non-poscatboiler category name. sort_key = sort_key or is_children and name:gsub("^Category:", "") or self:getCategoryName() else -- It's a label. local raw if self._info.raw or is_umbrella then raw = not cat.is_label else raw = cat.raw end local cat_code if cat.lang == false then cat_code = nil elseif cat.lang then cat_code = self:substitute_template_specs(cat.lang) elseif not raw then cat_code = self._info.code end sort_key = sort_key or is_children and name or self._info.label name = self:make_new({ label = name, code = cat_code, sc = self:substitute_template_specs(cat.sc), raw = raw, args = self:substitute_template_specs_in_args(cat.args) }) end end end sort_key = mw.ustring.upper(sort_key or is_children and " " or self._info.label) local description = is_children and self:substitute_template_specs(cat.description) or nil ret[i] = {name = name, description = description, sort = sort_key} end return ret end function Category:getParents() local is_umbrella = not self._lang and not self._info.raw if self._sc then local parent1 = self:make_new({code = self._info.code, label = "terms in " .. self._sc:getCanonicalName() .. " script"}) local parent2 = self:make_new({code = self._info.code, label = self._info.label, raw = self._info.raw, args = self._info.args}) return { {name = parent1, sort = self._sc:getCanonicalName()}, {name = parent2, sort = self._sc:getCanonicalName()}, } else local parents if is_umbrella then parents = self._data.umbrella and self._data.umbrella.parents or self._data.umbrella_parents else parents = self._data.parents end return self:canonicalize_parents_children(parents) end end function Category:getChildren() local is_umbrella = not self._lang and not self._info.raw local children = self._data.children local ret = {} if not is_umbrella and children then for _, child in ipairs(children) do child = mw.clone(child) if type(child) ~= "table" then child = {name = child} end if not child.sort then child.sort = child.name end -- FIXME, is preserving the script correct? child.name = self:make_new({code = self._info.code, label = child.name, raw = child.raw, sc = self._info.sc}) table.insert(ret, child) end end local extra_children if is_umbrella then extra_children = self._data.umbrella and self._data.umbrella.extra_children else extra_children = self._data.extra_children end extra_children = self:canonicalize_parents_children(extra_children, "children") if extra_children then for _, child in ipairs(extra_children) do table.insert(ret, child) end end if #ret == 0 then return nil end return ret end function Category:getUmbrella() if self._info.raw or not self._lang or self._sc or self._data.umbrella == false then return nil end return self:make_new({label = self._info.label}) end function Category:getAppendix() -- FIXME, this should be customizable. if not self._info.raw and self._info.label and self._lang then local appendixName = "Appendix:" .. self._lang:getCanonicalName() .. " " .. self._info.label local appendix = mw.title.new(appendixName).exists if appendix then return appendixName else return nil end else return nil end end function Category:getCatfixInfo() if self._lang or self._info.raw then if self._data.catfix == false then return nil end local lang, sc if self._data.catfix then lang = require("Module:languages").getByCode(self:substitute_template_specs(self._data.catfix), true) else lang = self._lang end if self._data.catfix_sc then sc = require("Module:scripts").getByCode(self:substitute_template_specs(self._data.catfix_sc), true) else sc = self._sc end return lang, sc else -- umbrella if not self._data.umbrella or not self._data.umbrella.catfix then return nil end local lang = require("Module:languages").getByCode(self:substitute_template_specs(self._data.umbrella.catfix), true) local sc = self:substitute_template_specs(self._data.umbrella.catfix_sc) if sc then sc = require("Module:scripts").getByCode(sc, true) end return lang, sc end end function Category:getTOCTemplateName() local lang, sc = self:getCatfixInfo() local code = lang and lang:getCode() or "en" return "Templet:" .. code .. "-" .. (self._data.toctemplateprefix or "") .. "categoryTOC" end return export h5hn4m47urhlt044oxgkc41uwyl6wr2 Grup:Sex 14 5284 13294 2022-08-01T21:17:03Z Asinis632 1829 Created page with "{{auto cat}}" wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Grup:en:Sex 14 5286 13295 2022-08-01T21:17:42Z Asinis632 1829 Created page with "{{auto cat}}" wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Templet:attention 10 5287 13297 2022-08-01T21:30:29Z Asinis632 1829 Created page with "<onlyinclude><!-- --><span id="attentionseeking{{{1|}}}{{{id|}}}" class="attentionseeking" lang="{{{1|}}}" {{#if:{{{2|}}}|title="{{#invoke:ugly hacks|escape_html|{{{2}}}}}"}}></span><!-- --><includeonly><!-- -->{{#if:{{{nocat|}}}||<!-- -->{{categorize<!-- -->|{{{1}}}<!-- -->|Requests for attention concerning {{langname|{{{1}}}}}<!-- -->|{{#if:{{{topic|}}}|Entries needing topical attention}}<!-- -->|sort={{{sort|}}}<!-- -->}}<!-- -->{{#if:{{{2|}}}||Cat..." wikitext text/x-wiki <onlyinclude><!-- --><span id="attentionseeking{{{1|}}}{{{id|}}}" class="attentionseeking" lang="{{{1|}}}" {{#if:{{{2|}}}|title="{{#invoke:ugly hacks|escape_html|{{{2}}}}}"}}></span><!-- --><includeonly><!-- -->{{#if:{{{nocat|}}}||<!-- -->{{categorize<!-- -->|{{{1}}}<!-- -->|Requests for attention concerning {{langname|{{{1}}}}}<!-- -->|{{#if:{{{topic|}}}|Entries needing topical attention}}<!-- -->|sort={{{sort|}}}<!-- -->}}<!-- -->{{#if:{{{2|}}}||[[Category:attention lacking explanation]]}}<!-- -->}}<!-- --></includeonly><!-- --></onlyinclude>{{documentation}} 73b8jh574kyf2hmyua9dzn5d9iydkql Grup:ja:Adveb 14 5288 13303 2022-08-01T21:43:05Z Asinis632 1829 Created page with "{{auto cat}}" wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx 13306 13303 2022-08-01T21:47:09Z Asinis632 1829 wikitext text/x-wiki {{delete}} 35r2j9t4ectnt1cmb7mlgcqvwz6h5k6 Grup:Siapan adveb 14 5289 13305 2022-08-01T21:46:24Z Asinis632 1829 Created page with "{{auto cat}}" wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx