Module:scripts/templates: difference between revisions

From Wiktionary, the free dictionary
Jump to navigation Jump to search
Content deleted Content added
allow putting getCanonicalName in force_detect parameter of findBestScript to get canonical name, somewhat like getByCode
m remove no-longer-need 'etym_lang = true' setting (manually assisted)
Tag: Manual revert
 
(10 intermediate revisions by 4 users not shown)
Line 2: Line 2:


function export.exists(frame)
function export.exists(frame)
return require("Module:scripts").getByCode(
local args = frame.args
require("Module:parameters").process(frame.args, {
local sc = args[1] or error("Script code has not been specified. Please pass parameter 1 to the module invocation.")
[1] = {required = true}
})[1]
sc = require("Module:scripts").getByCode(sc)
) and "1" or ""
if sc then
return "1"
else
return ""
end
end
end


function export.getByCode(frame)
function export.getByCode(frame)
return require("Module:language-like").templateGetByCode(
local args = frame.args
local sc = require("Module:scripts").getByCode(args[1], 1, "disallow nil")
require("Module:parameters").process(frame.args, {
[1] = {required = true, type = "script"},

[2] = {required = true},
return require("Module:language-like").templateGetByCode(sc, args,
[3] = {}
}),
function(itemname)
function(itemname)
if itemname == "countCharacters" then
if itemname == "countCharacters" then
local text = args[3] or ""
local text = args[3] or ""
return sc:countCharacters(text)
return args[1]:countCharacters(text)
end
end
end
end
Line 29: Line 26:


function export.getByCanonicalName(frame)
function export.getByCanonicalName(frame)
local sc = require("Module:scripts").getByCanonicalName(
local args = frame.args
require("Module:parameters").process(frame.args, {
local sc = args[1] or error("Script name (parameter 1) has not been specified.")
[1] = {required = true}
})[1]
sc = require("Module:scripts").getByCanonicalName(sc)
)
return sc and sc:getCode() or "None"
if sc then
return sc:getCode()
else
return "None"
end
end
end


function export.findBestScript(frame)
function export.findBestScript(frame)
local args = frame.args
local args = require("Module:parameters").process(frame.args, {
[1] = {required = true},
local text = args[1] or error("Text to analyse (parameter 1) has not been specified.")
[2] = {required = true, type = "language"},
local lang = args[2] or error("Language code (parameter 2) has not been specified.")
[3] = {}
local force_detect = args[3]
})
local getCanonicalName = false
if force_detect == "" then
if args[3] == "getCanonicalName" then
return args[2]:findBestScript(args[1]):getCanonicalName()
force_detect = nil
elseif force_detect == "getCanonicalName" then
force_detect = nil
getCanonicalName = true
end
lang = require("Module:languages").getByCode(lang, true)
local sc = require("Module:scripts").findBestScript(text, lang, force_detect)
if getCanonicalName then
return sc:getCanonicalName()
else
else
return sc:getCode()
return args[2]:findBestScript(args[1]):getCode()
end
end
end
end

Latest revision as of 00:57, 26 June 2024

This module provides access to Module:scripts from templates, so that they can make use of the information stored there.

Exported functions

exists

{{#invoke:scripts/templates|exists|script code}}

Check whether a script code exists and is valid. It will return "1" if the script code exists, and the empty string "" if it does not.

This is rarely needed, because a script error will result when someone uses a code that is not valid, so you do not need this just to check for errors. However, in case you need to decide different actions based on whether a certain parameter is a script code or something else, this function can be useful.

getByCode

{{#invoke:scripts/templates|getByCode|script code|item to look up|index}}

Queries information about a script code.

  • The script code should be one of the codes that is defined in Module:scripts data. If it is missing or does not exist, the result will be a script error.
  • The item is the name of one of the pieces of data that is stored for a script, such as getCanonicalName or getCategoryName. If no item has been provided, the result will be a script error.
  • The index is optional, and is used for items that are lists, such as getOtherNames. It selects which item in the list to return. On items that are single strings, like getCanonicalName, it has no effect. If no index is given, the default will be 1 (the first subitem). If an index is given that is higher than the number of items in the list, the result will be an empty string.

For example, to request the default (canonical) name of the script whose code is Latn:

{{#invoke:scripts/templates|getByCode|Latn|getCanonicalName}}
  • Result: Latin

To request its second name, if any:

{{#invoke:scripts/templates|getByCode|Latn|getOtherNames|1}}
  • Result: Roman

See also


local export = {}

function export.exists(frame)
	return require("Module:scripts").getByCode(
		require("Module:parameters").process(frame.args, {
			[1] = {required = true}
		})[1]
	) and "1" or ""
end

function export.getByCode(frame)
	return require("Module:language-like").templateGetByCode(
		require("Module:parameters").process(frame.args, {
			[1] = {required = true, type = "script"},
			[2] = {required = true},
			[3] = {}
		}),
		function(itemname)
			if itemname == "countCharacters" then
				local text = args[3] or ""
				return args[1]:countCharacters(text)
			end
		end
	)
end

function export.getByCanonicalName(frame)
	local sc = require("Module:scripts").getByCanonicalName(
		require("Module:parameters").process(frame.args, {
			[1] = {required = true}
		})[1]
	)
	return sc and sc:getCode() or "None"
end

function export.findBestScript(frame)
	local args = require("Module:parameters").process(frame.args, {
		[1] = {required = true},
		[2] = {required = true, type = "language"},
		[3] = {}
	})
	if args[3] == "getCanonicalName" then
		return args[2]:findBestScript(args[1]):getCanonicalName()
	else
		return args[2]:findBestScript(args[1]):getCode()
	end
end

return export