Перейти до вмісту

Модуль:Ustring

Матеріал з Вікіпедії — вільної енциклопедії.
{{i}} Документація модуля[перегляд] [редагувати] [історія] [очистити кеш]

Цей модуль впроваджує всі функції з бібліотеки mw.ustring. Документацію про кожну функцію можна знайти там.

Модуль приймає нескінченну кількість аргументів. Аргументи, що передані як |s1=, |s2= тощо, читаються першими та використовуються як рядки. Всі залишені нумеровані аргументи перетворюються на числовому типу, якщо це можливо та лишаються рядком, якщо неможливо перетворити. Якщо ви хочете, щоб нумеровані (наприклад, неназвані параметри або «|1=», «|2=») аргументи лишалися рядками, то ви можете зробити екранування, вставивши \ на початку рядка.

Зверніть увагу, що MediaWiki завжди обрізає пробіли на початку та в кінці рядка в іменованих аргументах; щоб передати аргументи з огорнутими навколо пробілами, то ви повинні використовувати неназвані параметри, в яких рядки починаються з \.

Як передавати незручсчні рядки
Щоб передати це... Запишіть це Пояснення
«  0123  » |\ 123 Щоб отримати обгортальні пробіли, що оточують значення, ви повинні використовувати неназвані параметри, але вони мають починатися з \, щоб позначити, що значення не є числом.
«0123» |s1=0123 Якщо вам не потрібно залишити обгортальні пробіли, то використайте |s1= тощо.
«0123» |1=\0123 Якщо вам не потрібно явно зберігати обгортальні пробіли, то використайте |1= тощо.
В іншому шаблоні, щоб передати його параметри {{{1}}}, зберігаючи обгортальні пробіли |\{{{1}}} Повинні надати \ з невідомим вводом рядка.
В іншому шаблоні, щоб передати його параметри {{{1}}}, вилучивши обгортальні пробіли |s1={{{1}}}
В іншому шаблоні, щоб передати його параметри {{{1}}}, вилучивши обгортальні пробіли |1=\{{#if:1|{{{1}}}}}

Ви можете огорнути результат в теги. Всі інші не використані аргументи мають бути передані до frame:extensionTag

Використання

[ред. код]

{{#invoke:Ustring|function_name|arg1|arg2|...}} відповідає mw.ustring.function_name( arg1, arg2, ... )

Приклад використання mw.ustring.sub

[ред. код]

{{#invoke:Ustring|sub|s1=abcde|2|4}}

створює:

bcd

Приклад використання mw.ustring.gsub

[ред. код]

{{#invoke:Ustring|gsub|s1=1234|23|}}

створює:

14

Приклад використання mw.ustring.char

[ред. код]

&#{{#invoke:ustring|char|49|48|59}}

створює:




Приклад використання mw.ustring.match

[ред. код]

{{#invoke:Ustring|match|s1=abcde|s2=(c%w)}}

створює:

cd

Зверніть увагу: Лише перший збіг повертається. Додаткові повернення опущенні, бо значення другого повернення функції mw.ustring.gsub загалом є небажаним.

Приклад використання аргументів з тегами

[ред. код]
{{#invoke:Ustring|match
|s1={{Module:Ustring}}|%s%s%sif%snot%s[^%s]+%sthen.+%
<!--enter an actual newline character to match '\n'-->%s%s%send
|tag=syntaxhighlight|lang=lua}}

створює:

			if not fargs.tag then
				return (what(unpack(args)))		-- Outside parens truncate to first result avoiding tail call
			end
			local tagargs = {}
			for x, y in pairs(fargs) do
				if not fargsused[x] then tagargs[x] = y end
			end

Зверніть увагу, що:

<syntaxhighlight lang="lua">{{#invoke:Ustring|match
|s1={{Module:Ustring}}|%s%s%sif%snot%s[^%s]+%sthen.+%
<!--enter an actual newline character to match '\n'-->%s%s%send}}</syntaxhighlight>

створює:

{{#invoke:Ustring|match
|s1={{Module:Ustring}}|%s%s%sif%snot%s[^%s]+%sthen.+%
<!--enter an actual newline character to match '\n'-->%s%s%send}}

Помилки

[ред. код]

Помилки, що виникли через доступ до mw.ustring, повинні бути оброблені, наприклад:

{{#invoke:Ustring|xyzzy}}

повинен створювати:

Помилка скрипту: Функції «xyzzy» не існує.

та

{{#invoke:Ustring|maxPatternLength}}

повинен створювати:

Помилка скрипту: «maxPatternLength» не є функцією.

require('strict')
return setmetatable({}, {
	__index = function(t, k)
		local what = mw.ustring[k]
		if type(what) ~= "function" then
			return what
		end
		return function(frame)
			local fargs = frame.args
			local fargsused = { tag = true }
			local args = {}
			local str_i = 1
			while fargs['s' .. str_i] do
				fargsused['s' .. str_i] = true
				args[str_i] = fargs['s' .. str_i]
				str_i = str_i + 1
			end
			for i, v in ipairs(fargs) do
				fargsused[i] = true
				args[i + str_i - 1] = tonumber(v) or v:gsub("^\\", "", 1)
			end
			if not fargs.tag then
				return (what(unpack(args)))		-- Outside parens truncate to first result avoiding tail call
			end
			local tagargs = {}
			for x, y in pairs(fargs) do
				if not fargsused[x] then tagargs[x] = y end
			end
			return frame:extensionTag{name = fargs.tag, content = what(unpack(args)), args = tagargs}
		end
	end
})