Модуль:Escape/документація
Це підсторінка документації модуля Модуль:Escape. Вона містить інформацію про використання, категорії та інший вміст, що не є частиною оригінальної сторінки модуля. |
Цей модуль позначений як К:реліз, готовий до загального вжитку (43). Він досягнув стадії готовності й вважається, що вільний від помилок і може використовуватись всюди, де знадобиться. Його можна вживати на допоміжних сторінках та інших сторінках Вікіпедії як можливість для навчання новачків. Аби зменшити навантаження на сервери та некоректний показ сторінок, його можна вдосконалювати в рамцях чернеткового тестування[en], а не з застосуванням спроб і помилок. |
Використання
[ред. код]Цей модуль розроблений з метою забезпечення екранування рядків налаштовувальним і ефективним способом. Він працює за допомогою заміни символів, що передують вашому символу (або фразі) екранування. Є два варіанти виклику цього модуля:
З іншого модуля:
local esc = require('Module:Escape') esc:char(символ (або послідовність символів) екранування) local to_escape = esc:text(рядок) код, що замінює або видаляє неекрановані символи local result = esc:undo(to_escape)
З шаблону:
{{invoke:Escape|main|mode=функція|char=символ (або послідовність символів) екранування|текст}}
В шаблоні, найкориснішою функцією є kill
.
Цей модуль в основному призначений для використання в інших модулях. Однак, всі функції можуть бути викликані в просторі шаблону, використовуючи |mode=функція, яку ви хочете викликати
після чого йдуть аргументи функції.
Усі функції модуля (тобто будь-яка функція крім main()) повинні бути викликані через використання дві крапки (:), наприклад, esc:char('%')
або esc:kill{'{{example|\\}}}', '}'} == '{{example|}'
escape:text() | Ця функція приймає лише один аргумент: Рядок. Усі символи в цьому рядку, що передують набору послідовності в escape:char(), будуть замінені на символи-заповнювачі (placeholders), що можуть бути перетворені назад в ті символи функцією escape:undo() |
---|---|
escape:undo() | Приймає два аргументи:
|
escape:kill() | Це, в основному, відповідає виклику string.gsub() над рядком, який повернула функція escape:text(), та передача цього результату в функцію escape:undo() в один етап. Приймає три аргументи:
|
escape:char() | Основне використання цієї функції є ініціалізація шаблонів для пошуку рядка на наявність послідовності екранування. Вона приймає два аргументи, першим є символ екранування, а другий — таблиця аргументів (додатково). Стандартно, цей модуль використовує \ як символ екранування. Щоб замінити символ екранування на { , ви можете зробити require('Module:Escape'):char('{') (або esc:char('{') (припускаючи, що ви зберігаєте таблицю, повернути цим модулем, в локальній змінній esc )).
Коли функція викликається без другого аргументу, то char() поверне таблицю, що мітить функції. Це дозволяє наступне: наприклад, У більшості випадків рідко є необхідність встановлювати СкороченняЯкщо надано другий аргумент, який є таблицею, що містить пару {ключ = значення}, де ключ є Зверніть увагу, що якщо надано кілька пар ключ—значення, то лише один можна буде виконати. |
Застереження
[ред. код]- Коли використовується послідовність екранування, що складається з кількох символів, то цей модуль лише позначає їх, використовуючи байтове значення першого символу. Тому, escape:undo() виведе з екранування, наприклад, всі символи, що екрановані через «e» та «esc», якщо використано обидві послідовності. На практиці, однак це не є проблемою, бо кілька послідовностей екранування є дуже рідкісним випадком, окрім, коли ви переходите між кількома мовними кодами. (У будь-якому разі, кілька послідовностей екранування з кількох символів, що починаються з одного символу, є просто поганою практикою .)
- Через те, що байтові значення зберігаються як числа, то не рекомендуються використовувати числа як послідовність екранування (хоча вони можуть нормально працювати).
- Байтові значення заповнювачів розділяються символами повернення ('\r'), які вибрані, тому, що вони взагалі рідко використовуються, та практично ніколи не використовують окремо від '\n'; до того ж він відрізняється від маркерів, що створюються
<nowiki>...</nowiki>
абоmw.text.nowiki()
(які використовують символ видалення). Щоб встановити інший символ розділення, то включіть пару ключ—значення{safeChr = альтернативний символ}
в таблиці, що ви передаєте до escape:char().
Швидкість
[ред. код]Нижче наведено тести продуктивності...
коли виконується наступна функція модуля:
function p.test_kill500(frame)
local esc = require('Module:Escape')
for k = 1, 500 do
local v = esc:kill(p.test_string2(), 'test')
end
return os.clock(esc)
end
0.05246
коли повторюється наступний рядок 500 разів у шаблоні:
{{#invoke:Escape|main|mode=kill|{{#invoke:Escape/тести|test_string2}}|test}}
0.767
Весь час в секундах. Час тесту (x500) з модулем обраховується, коли ви завантажує цю сторінку документації (зазвичай, результат між 0.02 та 0.07). Час тесту (x500) з шаблоном був записаний 15 січня 2015 в англійській Вікіпедії.
Приклади
[ред. код]Шаблон
[ред. код]Оригінал:
[ред. код]test { test {\{ test, \test, \{,test\ \ \ {\
Використовуючи внутрішній метод для видалення {
:
[ред. код]{{#invoke:Escape|main|mode=kill|test { test {\{ test, \test, \{,test\ \ \ {\|{}}
test test { test, test, {,test \
{{#invoke:Escape|main|mode=undo|{{replace|{{#invoke:Escape|main|mode=text|test { test {\{ test, \test, \{,test\ \ \ {\}}|{|}}}}
test test { test, test, {,test \
Без видалення {
між екранованою/неекранованою (символ екранування не відновлено) частиною:
[ред. код]{{#invoke:Escape|main|mode=undo
|{{#invoke:Escape|main|mode=text|test { test {\{ test, \test, \{,test\ \ \ {\}}
}}
test { test {{ test, test, {,test {\
Відновлення до оринігалу пілся екранування
[ред. код]{{#invoke:Escape|main|mode=undo
|{{#invoke:Escape|main|mode=text|test { test {\{ test, \test, \{,test\ \ \ {\}}
|\
}}
test { test {\{ test, \test, \{,test\ \ \ {\
Видалення слова test
, якщо воно не екрановане, а потім розміщення іншого символу екранування на місці старого символу екранування (для використання чогось іншого):
[ред. код]Зверніть увагу: Символ '%' є спеціальним в Lua, тому використовуйте '%%', якщо хочете його використати як символ екранування. В інших випадках, достатньо одного символа (чи слова).
{{#invoke:Escape|main|mode=kill
|test { test {\{ test, \test, \{,test\ \ \ {\
|test
|%%
}}
{ {%{ , %test, %{,% % % {\
Модуль
[ред. код]Ось декілька прикладів виводу з консолі налагодження під редактором модуля:
local escape = require('Module:Escape') test3 = escape:char('\\'):text(test2) test4 = escape:char('{', {undo = test3}) test4 = escape:char('\\', {undo = test3}) test5 = escape:char('{', {undo = test4}) =escape:undo(test3)--не працює, бо символ екранування досі встановлено як '{' в поточній сесії =escape:undo(test4) =escape:char('\\'):undo(test3) =escape:char('{', {undo = escape:char('\\'):undo(test3)}) =test == escape:char('{', {undo = escape:char('\\'):undo(test3)}) =test == escape:char('{', {undo = escape:char('\\'):undo(test3, '\\')}) local t = 'test { test {\\{ test, \\test, \\{,test\\ \\ \\ {\\' local e = require('Module:Escape') local tk0 = escape:kill(t, '{') |
Це сторінка документації для Модуль:Escape