Module:script utilities: difference between revisions

From Wiktionary, the free dictionary
Jump to navigation Jump to search
Content deleted Content added
parameter for removing text direction marks
direction markers not necessary (I think) because of properties of classes in MediaWiki:Common.css; so markers should be off by default
Line 19: Line 19:


-- Wrap text in the appropriate HTML tags with language and script class.
-- Wrap text in the appropriate HTML tags with language and script class.
function export.tag_text(text, lang, sc, face, noRTL)
function export.tag_text(text, lang, sc, face, RTL)
if not sc then
if not sc then
sc = require("Module:scripts").findBestScript(text, lang)
sc = require("Module:scripts").findBestScript(text, lang)
end
end
if not noRTL then noRTL = false end
if not RTL then RTL = false end
if sc:getCode() == "Imag" then
if sc:getCode() == "Imag" then
Line 30: Line 30:
end
end
-- Add text direction control characters before and after.
local direction = sc:getDirection()
local direction = sc:getDirection()
if direction == 'rtl' and not noRTL then
if direction == 'rtl' and RTL then
text = '‏' .. text .. '‎'
text = '‏' .. text .. '‎'
end
end

Revision as of 07:30, 5 February 2017

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, RTL)

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


local export = {}

-- Implements [[Template:lang]]
function export.lang_t(frame)
	local args = frame:getParent().args
	NAMESPACE = mw.title.getCurrentTitle().nsText
	
	local lang = args[1]; if lang == "" then lang = nil end
	local text = args[2] or ""
	local sc = args["sc"]; if sc == "" then sc = nil end
	local face = args["face"]; if face == "" then face = nil end
	
	lang = lang 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 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)
	
	return export.tag_text(text, lang, sc, face)
end

-- Wrap text in the appropriate HTML tags with language and script class.
function export.tag_text(text, lang, sc, face, RTL)
	if not sc then
		sc = require("Module:scripts").findBestScript(text, lang)
	end
	
	if not RTL then RTL = false end
	
	if sc:getCode() == "Imag" then
		face = nil
	end
	
	-- Add text direction control characters before and after.
	local direction = sc:getDirection()
	
	if direction == 'rtl' and RTL then
		text = '‏' .. text .. '‎'
	end
	
	-- Add a script wrapper
	if face == "term" then
		return '<i class="' .. sc:getCode() .. ' mention" lang="' .. lang:getCode() .. '">' .. text .. '</i>'
	elseif face == "head" then
		return '<strong class="' .. sc:getCode() .. ' headword" lang="' .. lang:getCode() .. '">' .. text .. '</strong>'
	elseif face == "hypothetical" then
		return '<span class="hypothetical-star">*</span><i class="' .. sc:getCode() .. ' hypothetical" lang="' .. lang:getCode() .. '">' .. text .. '</i>'
	elseif face == "bold" then
		return '<b class="' .. sc:getCode() .. '" lang="' .. lang:getCode() .. '">' .. text .. '</b>'
	elseif face == nil then
		return '<span class="' .. sc:getCode() .. '" lang="' .. lang:getCode() .. '">' .. 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()
	
	-- 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