Module:script utilities: difference between revisions
add tracking for "hypothetical" face: I'm curious where it's used, or if it's used at all |
if no links are found, replace any spaces with newlines: for Mongolian-scriptp usage examples containing no links |
||
(One intermediate revision by the same user not shown) | |||
Line 31: | Line 31: | ||
if not sc then |
if not sc then |
||
sc = require("Module:scripts").findBestScript(text, lang) |
sc = require("Module:scripts").findBestScript(text, lang) |
||
end |
|||
-- Replace space characters with newlines in Mongolian-script text, which is written top-to-bottom. |
|||
if sc and sc:getDirection() == "down" then |
|||
if not mw.ustring.find(text, "[[", nil, true) then |
|||
text = mw.ustring.gsub( |
|||
text, |
|||
" +", |
|||
"<br>" |
|||
) |
|||
end |
|||
text = mw.ustring.gsub( |
|||
text, |
|||
"(|)([^%]]+)(%]%])", |
|||
function(a, b, c) |
|||
b = mw.ustring.gsub(b, " +", "<br>") |
|||
return a .. b .. c |
|||
end |
|||
) |
|||
text = mw.ustring.gsub( |
|||
text, |
|||
"(%]%]) +(%[%[)", |
|||
"%1<br>%2" |
|||
) |
|||
end |
end |
||
Revision as of 13:43, 8 May 2017
- The following documentation is located at Module:script utilities/documentation. [edit]
- Useful links: subpage list • links • transclusions • testcases • sandbox (diff)
This module provides access to Module:scripts from templates, so that they can make use of the information stored there. It also provides a number of functions that can be used by other modules.
Data is found in Module:script utilities/data.
Exported functions
export.lang_t
function export.lang_t(frame)
This function lacks documentation. Please add a description of its usages, inputs and outputs, or its difference from similar functions, or make it local to remove it from the function list.
export.tag_text
function export.tag_text(text, lang, sc, face, class)
This function lacks documentation. Please add a description of its usages, inputs and outputs, or its difference from similar functions, or make it local to remove it from the function list.
export.request_script
function export.request_script(lang, sc)
This function lacks documentation. Please add a description of its usages, inputs and outputs, or its difference from similar functions, or make it local to remove it from the function list.
export.template_rfscript
function export.template_rfscript(frame)
This function lacks documentation. Please add a description of its usages, inputs and outputs, or its difference from similar functions, or make it local to remove it from the function list.
is_Latin_script
function is_Latin_script(sc)
This function lacks documentation. Please add a description of its usages, inputs and outputs, or its difference from similar functions, or make it local to remove it from the function list.
See also
- Module:scripts — script related code
- Module:scripts/data — script data module
- Module:JSON data — for exporting all the script data at once
local export = {}
-- Used by [[Template:lang]]
function export.lang_t(frame)
params = {
[1] = {},
[2] = { allow_empty = true, default = "" },
["sc"] = {},
["face"] = {},
["class"] = {},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local NAMESPACE = mw.title.getCurrentTitle().nsText
local lang = args[1] or (NAMESPACE == "Template" and "und") or error("Language code has not been specified. Please pass parameter 1 to the template.")
lang = require("Module:languages").getByCode(lang) or require("Module:languages").err(lang, 1)
local text = args[2]
local sc = args["sc"]
sc = (sc and (require("Module:scripts").getByCode(sc) or error("The script code \"" .. sc .. "\" is not valid.")) or nil)
local face = args["face"]
return export.tag_text(text, lang, sc, face, class)
end
-- Wrap text in the appropriate HTML tags with language and script class.
function export.tag_text(text, lang, sc, face, class)
if not sc then
sc = require("Module:scripts").findBestScript(text, lang)
end
-- Replace space characters with newlines in Mongolian-script text, which is written top-to-bottom.
if sc and sc:getDirection() == "down" then
if not mw.ustring.find(text, "[[", nil, true) then
text = mw.ustring.gsub(
text,
" +",
"<br>"
)
end
text = mw.ustring.gsub(
text,
"(|)([^%]]+)(%]%])",
function(a, b, c)
b = mw.ustring.gsub(b, " +", "<br>")
return a .. b .. c
end
)
text = mw.ustring.gsub(
text,
"(%]%]) +(%[%[)",
"%1<br>%2"
)
end
if sc:getCode() == "Imag" then
face = nil
end
local function class_attr(classes)
table.insert(classes, 1, sc:getCode())
if class and class ~= '' then
table.insert(classes, class)
end
return 'class="' .. table.concat(classes, ' ') .. '"'
end
local function tag_attr(...)
return class_attr({...}) .. ' ' .. 'lang="' .. lang:getCode() .. '"'
end
-- Add a script wrapper
if face == "term" then
return '<i ' .. tag_attr('mention') .. '>' .. text .. '</i>'
elseif face == "head" then
return '<strong ' .. tag_attr('headword') .. '>' .. text .. '</strong>'
elseif face == "hypothetical" then
-- [[Special:WhatLinksHere/Template:tracking/script-utilities/face/hypothetical]]
require("Module:debug").track("script-utilities/face/hypothetical")
return '<span class="hypothetical-star">*</span><i ' .. tag_attr('hypothetical') .. '>' .. text .. '</i>'
elseif face == "bold" then
return '<b ' .. tag_attr() .. '>' .. text .. '</b>'
elseif face == nil then
return '<span ' .. tag_attr() .. '>' .. text .. '</span>'
else
error("Invalid script face \"" .. face .. "\".")
end
end
-- Add a notice to request the native script of a word
function export.request_script(lang, sc)
local scripts = lang.getScripts and lang:getScripts() or error('The language "' .. lang:getCode() .. '" does not have the method getScripts. It may be unwritten.')
-- By default, request for "native" script
local cat_script = "native"
local disp_script = "script"
-- If the script was not specified, and the language has only one script, use that.
if not sc and #scripts == 1 then
sc = scripts[1]
end
-- Is the script known?
if sc then
-- If the script is Latin, return nothing.
if is_Latin_script(sc) then
return ""
end
if sc:getCode() ~= scripts[1]:getCode() then
disp_script = sc:getCanonicalName()
end
-- The category needs to be specific to script only if there is chance
-- of ambiguity. This occurs when lang=und, or when the language has
-- multiple scripts.
if lang:getCode() == "und" or scripts[2] then
cat_script = sc:getCanonicalName()
end
else
-- The script is not known.
-- Does the language have at least one non-Latin script in its list?
local has_nonlatin = false
for i, val in ipairs(scripts) do
if not is_Latin_script(val) then
has_nonlatin = true
break
end
end
-- If there are non-Latin scripts, return nothing.
if not has_nonlatin then
return ""
end
end
local category = ""
if mw.title.getCurrentTitle().nsText ~= "Template" then
category = "[[Category:" .. lang:getCanonicalName() .. " terms needing " .. cat_script .. " script]]"
end
return "<small>[" .. disp_script .. " needed]</small>" .. category
end
function export.template_rfscript(frame)
local args = frame.args
local lang = args[1] or error("The first parameter (language code) has not been given")
local sc = args["sc"]; if sc == "" then sc = nil end
lang = require("Module:languages").getByCode(lang) or error("The language code \"" .. lang .. "\" is not valid.")
sc = (sc and (require("Module:scripts").getByCode(sc) or error("The script code \"" .. sc .. "\" is not valid.")) or nil)
local ret = export.request_script(lang, sc)
if ret == "" then
error("This language is written in the Latin alphabet. It does not need a native script.")
else
return ret
end
end
function is_Latin_script(sc)
return (sc:getCode():find("Latn", nil, true)) or sc:getCode() == "Latinx"
end
return export