Modulo:Scripts
Versione del 3 feb 2018 alle 10:53 di Erutuon (discussione) (that was incorrect, but it turns out there aren't even any scripts whose canonical names contain "script", so it didn't cause problems)
La documentazione per questo modulo può essere creata in Modulo:Scripts/man
local export = {} local Script = {} function Script:getCode() return self._code end function Script:getCanonicalName() return self._rawData.canonicalName end function Script:getOtherNames() return self._rawData.otherNames or {} end function Script:getParent() return self._rawData.parent end function Script:getSystems() if not self._systemObjects then local m_systems = require("Module:writing systems") self._systemObjects = {} for _, sys in ipairs(self._rawData.systems or {}) do table.insert(self._systemObjects, m_systems.getByCode(sys)) end end return self._systemObjects end --function Script:getAllNames() -- return self._rawData.names --end function Script:getType() return "script" end function Script:getCategoryName() local name = self._rawData.canonicalName -- If the name already has "code" or "semaphore" in it, don't add it. -- No names contain "script". if name:find("[Cc]ode$") or name:find("[Ss]emaphore$") then return name else return name .. " script" end end function Script:getWikipediaArticle() return self._rawData.wikipedia_article or self:getCategoryName() end function Script:getCharacters() if self._rawData.characters then return self._rawData.characters else return nil end end function Script:countCharacters(text) if not self._rawData.characters then return 0 else local _, num = mw.ustring.gsub(text, "[" .. self._rawData.characters .. "]", "") return num end end function Script:getDirection() local direction = self._rawData.direction if not direction then return nil else return direction end end function Script:getRawData() return self._rawData end function Script:toJSON() local ret = { canonicalName = self:getCanonicalName(), categoryName = self:getCategoryName(), code = self._code, otherNames = self:getOtherNames(), type = self:getType(), } return require("Module:JSON").toJSON(ret) end Script.__index = Script function export.makeObject(code, data) return data and setmetatable({ _rawData = data, _code = code }, Script) or nil end function export.getByCode(code) if code == "IPAchar" then require("Module:debug").track("IPAchar") end return export.makeObject(code, mw.loadData("Module:scripts/data")[code]) end function export.getByCanonicalName(name) local code = mw.loadData("Module:scripts/by name")[name] if not code then return nil end return export.makeObject(code, mw.loadData("Module:scripts/data")[code]) end -- Find the best script to use, based on the characters of a string. function export.findBestScript(text, lang) if not text or not lang or not lang.getScripts then return export.getByCode("None") end local scripts = lang:getScripts() if not scripts[2] then return scripts[1] end --[=[ Remove any HTML entities; catfix function in [[Module:utilities]] adds tagging to a no-break space ( ), which contains Latin characters; hence Latin was returned as the script if "Latn" is one of the language's scripts. ]=] text = string.gsub(text, "&[a-zA-Z0-9]+;", "") -- Try to match every script against the text, -- and return the one with the most matching characters. local bestcount = 0 local bestscript = nil -- Get length of text minus any spacing or punctuation characters. -- Counting instances of UTF-8 character pattern is faster than mw.ustring.len. local _, length = string.gsub(mw.ustring.gsub(text, "[%s%p]+", ""), "[\1-\127\194-\244][\128-\191]*", "") if length == 0 then return export.getByCode("None") end for i, script in ipairs(scripts) do local count = script:countCharacters(text) if count >= length then return script end if count > bestcount then bestcount = count bestscript = script end end if bestscript then return bestscript end -- No matching script was found. Return "None". return export.getByCode("None") end return export