Help:Extension:ParserFunctions/uk

Розширення впроваджує одинадцять додаткових функцій парсера на додачу до «», які вже присутні у MediaWiki. (Можна налаштувати конфігурацію для впровадження інших функцій парсера для обробки текстових рядків; ці функції для рядків задокументовані в .) Всі парсерні функції впроваджені цим розширенням мають таку форму:

#expr
Ця функція обчислює математичний вираз і повертає обчислене значення. Ця функція також доступна в під назвою.



Всі доступні оператори перелічені в таблиці справа, в порядку пріоритету. Дивитися Help:Calculation для детальнішої інформації про роботу кожного з операторів. Точність та формат поверненого результуючого значення відрізняються в залежності від операційної системи сервера, на якому встановлена вікі, та від формату чисел загальноприйнятого для мови сайту.

У виразах, що використовують булеву алгебру, нуль приймає значення, а всі інші значення, як додатні, так і від'ємні, приймають значення  :



Отримавши на вході порожній вираз, функція повертає порожній рядок. Некоректні вирази призводять до повернення одного чи декількох повідомлень про помилку, які можна перехопити використовуючи функцію :



Порядок операторів додавання та віднімання перед чи після числа має значення і може бути сприйнятий як додатне чи від'ємне число, а не як вираз із помилкою:



Зверніть увагу, що при використання у виразі значення поверненого магічним словом, необхідно спочатку привести це значення до «сирого» формату щоб прибрати всі пробіли між цифрами і перевести цифри до арабських. Наприклад, повертає значення, при тому що потрібним значенням є 0, яке можна отримати за допомогою. Це особливо важливо для деяких мов, де числа записуються не арабськими цифрами. Наприклад, для бенгальської мови поверне ৩০,০৬১.



Округлення
Оператор округлення округляє число зліва від нього до 1/10 в степені числа справа (в якому дробова частина відкидається).

Для округлення до більшого чи меншого цілого значення використовуються унарні оператори  та   відповідно.

Текстові рядки
Математичні вирази можуть містити лише числа, вони не можуть порівнювати текстові рядки або символи. Для цього слід використовувати функцію.



#if
Ця функція визначає чи є тестовий рядок порожнім чи ні. Текстовий рядок, що містить тільки пробільні символи, вважається порожнім.





Спершу функція перевіряє чи не є перший параметр порожнім. Якщо він не порожній, функція виводить другий параметр. Якщо параметр порожній або містить тільки пробільні символи (пробіли, символи перенесення рядка тощо), функція виводить третій параметр.



Тестовий рядок завжди інтерпретується як текстовий, математичні вирази не вираховуються:



Останній аргумент може бути відсутнім:



Функція може бути вкладеною. Для цього внутрішня функція #if у повній формі розміщується на місці параметра охоплюючої функції #if. Допускається не більше семи рівнів вкладеності, хоча це може залежати від вікі або обмеження пам'яті.
 * $code1: тестовий рядок | значення, якщо тестовий рядок не порожній | $code2: тестовий рядок | значення, якщо тестовий рядок не порожній | значення, якщо тестовий рядок порожній (або містить тільки пробільні символи) $code3



Також, можна використовувати параметр в якості тестового рядку у функції #if. Необхідно переконатися, що ви додано символ $pipe (вертикальна риска) після імені змінної. (так що, якщо параметр не має значення, то він оцінюється в порожній рядок замість рядка « »)



Див. для інших прикладів використання цієї функції парсера.

#ifeq
Ця функція парсера порівнює два введені рядки, визначає чи є вони ідентичними та повертає один з двох текстових рядків залежно від результату. Якщо вимагається більша кількість порівнянь і вихідних рядків, розгляньте використання.



Якщо обидва текстові рядки є числовими значеннями, вони порівнюються як числа:



В іншому разі порівнюється текст; це порівняння чутливе до регістру:


 * →  (порівняти з подібним прикладом вище, без лапок)
 * →  (порівняти з подібним прикладом вище, де   повертає дійсне число першим)
 * →  (порівняти з подібним прикладом вище, без лапок)
 * →  (порівняти з подібним прикладом вище, де   повертає дійсне число першим)

Як практичний приклад, розглянемо наявний , який використовує парсер для вибору між двома форматами часу: коротким та довгим. Він бере параметр як перший аргумент і порівнює з текстовим рядком «short» — порядок розміщення цих рядків не має значення, але легше читати якщо параметр іде першим. Код шаблону визначено як:



і працює таким чином:


 * → 20
 * → 40
 * → 40

#iferror
Функція приймає на вході текстовий рядок і повертає значення  якщо цей рядок містить об'єкт HTML із , який був згенерований іншою функцією парсера, зокрема  ,   або  , або був згенерований шаблоном з помилкою, такою як нескінченний цикл або рекурсія, або виник внаслідок іншої помилки.



Один чи обидва текстові рядки для повернення, можуть бути пропущені. Якщо пропущено рядок, то замість нього буде повернено значення   якщо воно не містить помилок. Якщо пропущено рядок, то у випадку помилки буде повернений порожній текстовий рядок.


 * → &zwnj;
 * → &zwnj;
 * → &zwnj;
 * → &zwnj;
 * → &zwnj;
 * → &zwnj;

#ifexpr
Ця функція обчислює математичний вираз та повертає один з двох текстових рядків залежно від логічного значення результату:



Вираз  обчислюється так само як і у функції , з використанням тих самих операторів. Результат виразу, після цього, трактується як логічне значення.

Порожній вхідний вираз трактується як :



Як сказано вище, нуль приймає значення, а будь-яке ненульове значення приймає значення  , тому ця функція еквівалентна до використання   всередині  :



за винятком порожнього виразу чи виразу із помилкою (повідомлення про помилку вважається порожнім рядком; воно не рівне нулю, тому застосовується ).



в порівнянні з



Одне чи обидва значення для повернення, можуть бути пропущені; якщо значення пропущене, замість нього повертається порожній рядок:



Boolean operators of equality or inequality operators are supported.



#ifexist
Ця функція бере на вході текстовий рядок, інтерпретує його як назву сторінку, та повертає один з двох текстових рядків залежно від того чи існує сторінка на цій вікі.



Функція повертає  якщо сторінка існує, незалежно від того чи є на ній видимий вміст чи вона є порожньою (містить тільки метадані такі як посилання на категорії,  або, але не містить видимого вмісту, або ж і взагалі є повністю порожньою). Тільки сторінки які є «червоними посиланнями» повертають значення, включаючи сторінки що існували раніше але були видалені.



Функція повертає значення   що були адаптовані та для  які задані програмним забезпеченням.



Якщо на одній сторінці перевіряється існування другої за допомогою, то перша (та на якій перевіряється) з'явиться в списку  для другої (та яка перевіряється). Тому, якщо  було би включене до цієї сторінки, то  з'явилась би в списку /Foo.

На вікі, які використовують спільний репозиторій медіафайлів (зокрема Вікісховище), функція  може бути використана для перевірки того чи існує файл із такою назвою, і функція перевірить існування файлу на репозиторії, а не на самій вікі:



Якщо була створена сторінка опису файла на цій вікі, то для всіх трьох попередніх прикладів результатом буде exists.

Функція  не працює з міжмовними посиланнями (інтервікі).

Обмеження
Функція  вважається «ресурсомісткою функцією парсера», тому кількість викликів цієї функції з однієї сторінки є обмеженою (включаючи виклики зроблені в шаблонах, що включаються до сторінки). Коли це обмеження перевищене, всі подальші виклики функції  завжди повертатимуть «false», не залежно від того чи існує сторінка чи ні. Також, сторінки із таким перевищенням обмеження додаються до Category:, чия назва може відрізнятися залежно від мови вікі.

Для деяких випадків можливо імітувати функцію «ifexist» за допомогою CSS, використовуючи селектори  (щоб вибрати посилання на неіснуючі статті) або   (щоб вибрати посилання на існуючі статті). Крім того, оскільки максимальна кількість викликів ресурсомістких функцій на одній сторінці вказана в, то можна показати більшу кількість у файлі LocalSettings.php за потреби.

ifexist і бажані сторінки
Сторінку, яка не існує та випробовується для використання #ifexist, буде додано до Бажані сторінки. Див. щодо причини цього й w:Template:Linkless exists за обхідним шляхом.

#rel2abs
Ця функція перетворює відносний шлях до файла на абсолютний.



В аргументі  дійсним є наступний синтаксис:


 * → поточний рівень
 * → піднятися на один рівень
 * → опуститися на один рівень у підкаталог /foo

Якщо  не задано, замість нього буде використана повна назва поточної сторінки:



Неправильний синтаксис, такий як  або , ігнорується. Оскільки не більше двох повних зупинок поспіль дозволено, то послідовності на кшталт цих можуть бути використані для відокремлення послідовних інструкцій:



#switch
''Див. також: w:Help:Switch parser function''

Ця функція порівнює вхідний аргумент із декількома текстовими рядками, і якщо збіг знайдено, повертає значення поставлене у відповідність до знайденого рядка.

Приклади:



Функція # switch з тегами частково включення може використовуватись в конфігураційних файлах, що дає змогу користувачам незнайомим з шаблонами переглядати та змінювати конфігуровані елементи.

За замовчуванням
Результат  повертається якщо жоден   не збігається із  :



У цьому синтаксисі результат за замовчуванням повинен бути останнім параметром і не повинен містити сирий знак рівності (знак рівності без ). Якщо це так, то розглядатиметься як порівняння випадків, і жодний текст не виводитиметься, якщо жодний випадок не відповідає. Це тому що значення за замовчуванням не було визначене (порожнє). Проте, якщо випадок відповідає, то асоційований із ним рядок буде повернуто.



Або можна прямо вказати результат за замовчуванням вказавши « » в якості.

Результати за замовчуванням вказані таким способом можна розмістити будь-де всередині функції:



Якщо результат  не вказано і не знайдено випадку що збігається із рядком для порівняння, повертається порожній рядок:



Групування результатів
Можна зробити «провалювання» (об'єднання) одних  в інші. Тоді декілька  повернуть той самий. Це мінімізує повторення коду.

Тут випадки 2, 3 та 4 повертають однаковий результат ; Обоє випадки 6 та 7 повернуть. « » в останньому параметрі може бути опущений у вищенаведеному випадку.

Використання з параметрами
Функція може бути використана з параметрами як тестовий рядок. У цьому випадку необов'язково розміщувати вертикальну риску після імені параметру, оскільки дуже малоймовірно, що ви виберете встановити випадок із рядком « ». (Це значення, яке параметр матиме за замовчуванням, якщо вертикальна риска відсутня, а параметр не існує чи має значення. Див. .)



У вищенаведеному випадку якщо  дорівнює , то функція поверне. Якщо ж дорівнює, то функція поверне. Якщо параметр порожній або не існує, то функція поверне.

Як у розділі вище, випадки можуть поєднуватися й давати єдиний результат.



Тут, якщо  дорівнює ,   чи  , то функція поверне. Якщо ж дорівнює, то функція поверне. Якщо параметр порожній або не існує, то функція поверне.

На додачу, результат за замовчуванням може бути опущений, якщо ви не бажаєте нічого повертати, якщо значення тестового параметру не відповідає жодному випадку.



У цьому випадку функція повертає порожній рядок, якщо  не існує чи не дорівнює   або , у цьому випадку вона повертає   або.

Це має той самий ефект, що й оголошення порожнім результату за замовчуванням.



Якщо з деяких причин ви вирішили встановити випадок як « », то функція поверне результат такого випадку, коли параметр не існує чи не має значення. Параметр повинен існувати та мати будь-яке значення, крім рядка « » для повернення результату функції за замовчуванням.


 * (якщо  не існує чи порожнє)
 * →  Foo 
 * (якщо  має значення « »):
 * →  Bar 
 * (якщо  має значення « »):
 * →  Foo 

В такому гіпотетичному випадку слід додати до параметра вертикальну риску.

Нюанси порівняння
Так само як і в, якщо рядок для порівнянна та випадок є числами, вони порівнюються як числа. В іншому випадку вони вважаються текстовими рядками чутливими до реєстру:





може бути порожнім текстовим рядком:



Як тільки знайдено збіг, всі подальші  ігноруються:



Буквальне включення знаку рівності
Текстові рядки випадків не можуть містити знаків рівності. Щоб обійти це обмеження, створіть шаблон = що міститиме лише знак рівності —, або замість символу рівності вставте його HTML-код.

Приклад:

Заміна #ifeq
Функція  може використовуватись для зниження рівня вкладеності.

Наприклад:



є еквівалентними до



тобто глибокого вкладення, лінійного:

З іншого боку, заміна switch може бути складною чи непрактичною для IF, вкладених в обидві гілки (показано з альтернативами відступів з обох боків), утворюючи повне симетричне дерево:

#time
Ця функція парсера приймає дату та/або час (за Грегоріанським календарем) і форматує їх відповідно до заданого синтаксису. Можна задати об'єкт дати/часу; за замовчуванням береться значення магічного слова, яке містить час коли поточна сторінка в останнє трансформувалась в HTML.



Список допустимих кодів форматування наведено в таблиці справа. Будь-який символ в текстовому рядку для форматування, який не розпізнано, включається до результату без змін; це стосується також і пробілів (для інтерпритації коду системі вони не потрібні). Існує два способи уникнення трактування символу як коду форматування: До того ж, подвійний символ  трактується я один символ «x».
 * 1) Обернена коса риска після якої йде символ, трактується як просто цей символ;
 * 2) Символи всередині подвійних лапок так і залишаються символами, а лапки відкидаються.

Оскільки список кодів форматування продовжує розвиватися (з підтримкою нових календарів або нових полів дати, обчислених і відформатованих по-іншому), ви повинні екранувати всі літерні символи (а не лише літери ASCII, які зараз використовуються в кодах форматування), які потрібно передати через незмінне.

На жаль, наразі одинарні лапки ASCII все ще не розпізнаються як проста альтернатива для позначення буквального тексту до підтримуваних на даний момент подвійних лапок ASCII (наприклад, подвійні лапки є обов’язковими для інших видів використання, як-от розмежування значень рядка в JSON, C, C++…) і зворотні косі риски (які також потрібно екранувати в рядкових константах, які використовуються багатьма мовами, включаючи JSON, C, C++, PHP, JavaScript, Lua). Таким чином, ви все одно не можете вставити будь-які буквальні подвійні лапки, не екрануючи їх за допомогою зворотної косої риски (або замість них ви можете використовувати інші фігурні, кутові чи квадратні лапки).



можна задавати в будь-якому форматі який допускається у функції strtotime мови PHP. Час можна вказувати як абсолютно (наприклад ), так і відносно (наприклад , тобто «+20 годин»). Absolute (e.g. ), relative (e.g.  ), and combined times (e.g.  ) are accepted.


 * &rarr; 
 * &rarr; 
 * &rarr; 
 * &rarr; 
 * &rarr; 
 * &rarr; 
 * &rarr; 

у форматі ISO 639-3 дозволяє відобразити результат обраною мовою:



Параметр  визначає, чи об'єкт дата/час позначає місцевий часовий пояс, чи UTC.

Це булеві параметри: їхнє значення визначається приведенням значення аргументу (докладніше про приведення рядків до булевих значень див. офіційну документацію PHP).

Докладніше див. наступні приклади:





Час Unix можна використовувати для підрахунку дати, якщо поставити перед ним символ.



Дати можна вказувати не тільки повністю, але і частково; функція доповнить частини дати яких не вистачає, використовуючи значення для поточного моменту:



Чотиризначне число завжди трактується як рік, і ніколи як години та хвилини:



Шестизначне число трактується як години, хвилини та секунди, якщо це можливо, інакше як помилка (не як рік та місяць):


 * →  Введене значення трактується як час, а не рік і місяць.
 * →  Попри те що 19:60:09 не є коректним часом, 196009 не трактується як вересень 1960 року.

Функція може здійснювати деякі перетворення дати:



Довжина вхідних даних для функції  має обмеження в 6000 символів.

Проблема із часовими поясами
Існує недолік в роботі функції #time (а саме у класі «DateTime» мови PHP, який використовується цією функцією) який не дозволяє нецілі значення в якості зміщення в годинах для часових поясів. Це не стосується випадків для часових поясів із зміщенням у цілу кількість годин, таких як EDT. Наприклад:


 * &rarr;

Але Індія має часовий зсув +5.5 годин від UTC, тому застосування її часового поясу не дозволить правильно обчислити відносний зсув часового поясу. Відбудеться ось що:


 * &rarr;

Щоб уникнути цієї проблеми, просто вкажіть зміщення часу у хвилинах чи секундах, наприклад:


 * &rarr;
 * &rarr;

(Тім Старлінг, розробник цієї функції, запропонував синтаксис для вирішення цієї проблеми.)

#timel
Ця функція є ідентичною до, окрім того що вона використовує місцевий час для поточної вікі (який налаштований в ), якщо час не вказано.

Синтаксис функції наступний:





Наприклад, див. наступні приклади:





#titleparts
Ця функція поділяє назву сторінки на сегменти, що розділені символами косої риски. Після цього деякі із цих сегментів повертаються в якості результату.



Якщо кількість сегментів, що треба повернути не вказано, то вона отримує значення за замовчуванням «0», яке повертає всі сегменти від сегмент з якого почати до кінця. Якщо не вказано сегмент з якого почати або для нього вказане значення «0», то аргумент отримує значення за замовчуванням «1»:


 * →  See also.
 * →  See also.

Від'ємні значення допускаються в обох аргументах. Якщо від'ємне значення вказане для кількість сегментів, що треба повернути, то функція відрізує вказану кількість сегментів від кінця. При від'ємному значенні для сегмент з якого почати, сегменти рахуються з кінця:


 * →  Відрізує один сегмент від кінця текстового рядка. Див. також.
 * →   Відрізує всі 4 сегменти від кінця рядка
 * →   Відрізує 5 сегментів від кінця рядка (що більше ніж існує)
 * →   Повертає останній сегмент. Див. також.
 * →   Відрізує один сегмент від кінця рядка, після чого повертає другий сегмент і все після нього, що залишилось
 * →   Бере другий сегмент і все після нього, після чого відрізує один сегмент від кінця

Перед обробкою параметр pagename є HTML-розкодованим: якщо він містить деякі стандартні сутності символів HTML, то вони перетворяться у прості символи (внутрішньо закодовані в UTF-8, тобто те саме кодування, що й на початковій сторінці MediaWiki, за допомогою цієї функції парсера).


 * Наприклад, будь-яке входження,   чи   у pagename буд замінене на.
 * Жодних інших перетворень із HTML у простий текст не здійснюється, тому теги HTML залишаються неушкодженими на цьому початковому етапі навіть, якщо вони недійсні у заголовках сторінок.

Потім розкодована назва сторінки канонізується у стандартну, підтримувану MediaWiki, якомога більше:


 * 1) Всі підкреслення автоматично замінюються пробілами:
 * →  Не bah_boo, попри підкреслення в оригіналі.
 * 1) Рядок ділиться до 25 разів; подальші риски ігноруються, і 25-й елемент міститиме решту рядка. Рядок також обмежений 255 символами, адже він розцінюється як заголовок сторінки:
 * Якщо з деяких причин вам потрібно проштовхнути цю функцію до даної межі, хоча й дуже малоймовірно, то можливо обійти обмеження 25 розділенням шляхом вкладання викликів функції:
 * 1) Нарешті, перший підрядок починається з великої літери згідно з налаштуваннями великих літер локальної вікіпедії (якщо такий підрядок також починається з локальної назви простору назв, то назва простору назв також нормалізована).
 * 1) Нарешті, перший підрядок починається з великої літери згідно з налаштуваннями великих літер локальної вікіпедії (якщо такий підрядок також починається з локальної назви простору назв, то назва простору назв також нормалізована).
 * 1) Нарешті, перший підрядок починається з великої літери згідно з налаштуваннями великих літер локальної вікіпедії (якщо такий підрядок також починається з локальної назви простору назв, то назва простору назв також нормалізована).

{{Warning|1= Певні символи, заборонені в назвах сторінок, змусять #titleparts не парсити рядок.


 * → {{#titleparts: {one/two} | 1 | 1 }}. Не виробляє очікуване: {one
 * → {{#titleparts: page/123 | 1 | 2 }}. Не працює, тому що квадратні дужки заборонені в назвах сторінок і ця функція парсера не обробляє посилання, вбудовані в її вхідний параметр «pagename», навіть, коли вони використовують синтаксис MediaWiki чи будь-які інші теги HTML або MediaWiki.
 * → "{{#titleparts: red/#00FF00/blue| 1 | 3 }}". Не працює, тому що «#» також заборонений у назвах сторінок.

}}

Рядкові функції
Всі ці функції інтегровані з розширення StringFunctions, але доступні тільки, якщо адміністратор встановив   у.

Всі ці функції працюють у складності за часом O(n), що убезпечує їх від DoS-атак.

#len
Функція #len повертає довжину даного рядка. Синтаксисом є:

Повернутим значенням завжди є кількість символів у початковому «рядку» (після розширень викликів шаблонів, але до перетворення в HTML). Якщо рядок не заданий, повернутим значенням є нуль.

#pos
Функція парсера #pos повертає позицію даного шуканого виразу в рядку. Синтаксисом є:

Параметр offset, якщо заданий, каже початкову позицію, де ця функція повинна почати пошук.

Якщо шуканий вираз знайдено, то повернутим значенням є ціле число, починаючи з нуля, першої позиції в рядку.

Якщо шуканий вираз не знайдено, то функція повертає порожній рядок.

#rpos
Функція парсера #rpos повертає останню позицію даного шуканого виразу в рядку. Синтаксисом є:

Якщо шуканий вираз знайдено, то повернутим значенням є ціле число, починаючи з нуля, останньої позиції в рядку.

Якщо шуканий вираз не знайдено, то функція повертає –1.

#sub
Функція #sub повертає підрядок даного рядка. Синтаксисом є:

Параметр start, якщо додатній (або нуль), визначає індекс, починаючи з нуля, першого повернутого символу.

Приклад: повертає.

повертає.

Якщо параметр start від'ємний, визначає кількість символів з кінця, які слід повернути.

Приклад: повертає.

Параметр length, якщо присутній і додатній, визначає максимальну довжину повернутого рядка.

Приклад: повертає.

Якщо параметр length від'ємний, він визначає, скільки символів будуть опущені з кінця рядка.

Приклад: повертає.

Якщо параметр start від'ємний, він визначає кількість символів з кінця, які слід повернути. Параметр length, якщо присутній і додатній, визначає максимальну довжину повернутого рядка з початкової точки.

Приклад: повертає.

#count
Функція #count повертає кількість разів, коли даний підрядок з’являється в наданому тексті.

#replace
Функція #replace повертає даний рядок, де всі входження шуканого виразу замінені виразом заміни.

Якщо search term не вказаний або порожній, то шукатиметься одиночний пробіл.

Якщо replacement term не вказаний або порожній, то всі входження search term буде вилучено з рядка.

Поточний синтаксис не передбачає перемикача чутливості до регістру. Але можна як обхідний шлях застосувати магічні слова форматування. (приміром, тут_ваш_текст ) Так, якщо слід прибрати слово «Category:» із певного рядку незалежно від регістру літер, ви можете записати:
 * Нечутлива до регістру заміна:

Недоліком є те, що увесь вивід буде в нижньому регістрі (малими літерами). Якщо потрібно зберегти регістр літер після заміни, слід використовувати кілька рівнів вкладення функції (тобто кілька викликів заміни).

#explode
Функція #explode розбиває заданий рядок на частини й повертає одну з цих частин. Синтаксис такий:

Параметр delimiter містить рядок-маску для розділення рядку string на частини. Рядок delimiter не ввійде до жодної частини, а якщо два фрагменти delimiter стоять поряд, буде створено порожню частину рядку. Якщо цей параметр не вказано, використовується один пропуск. Параметр limit доступний лише в ParserFunctions, його немає в окремій версії StringFunctions; він дозволяє обмежити кількість отриманих частин, тоді залишок тексту буде приєднаний до останньої частини.

Параметр position вказує, яку частину слід повернути. Номери частин починаються з 0. Якщо цей параметр не вказано, буде повернуто першу частину (частину номер 0). Негативне значення параметру position дозволяє вести відлік частин у зворотному напрямку, від кінця. В такому разі номер -1 матиме остання частина. Приклади:


 * повертає
 * повертає
 * повертає
 * повертає

Повертається значення частини номер position. Якщо частин менше, ніж вимагає цей номер, повертається порожній рядок.

#urldecode
перетворює екрановані символи з 'URL-закодованого' рядку назад на читабельний текст. Синтаксис такий:

Примітки:
 * Ця функція безпосередньо використовує PHP-функцію urldecode.
 * Коди символів можна знайти на www.w3schools.com.
 * Зворотну функція,, інтегровано до MediaWiki починаючи з версії 1.18; приклади наведено в.
 * urldecode імпортовано зі Stringfunctions у 2010 комітом 1b75afd18d3695bdb6ffbfccd0e4aec064785363

Обмеження
Цей модуль додає три глобальні налаштування:


 * $wgStringFunctionsLimitSearch
 * $wgStringFunctionsLimitReplace
 * $wgStringFunctionsLimitPad

Вони застосовуються для обмеження значень окремих параметрів певних функцій, щоб гарантувати часову складність O(n) виконання функцій, що дає захист від DoS-атак.

$wgStringFunctionsLimitSearch
Це налаштування стосується #pos, #rpos, #replace і #explode. Всі ці функції шукають підрядок в більшому рядку, що дає часову складність O(n*m) і, отже, підвищує вразливість до DoS-атак. Встановлення цього налаштування в достатньо мале число обмежує часову складність до O(n).

Це налаштування обмежує максимальну довжину рядку, який можна шукати.

Значення за замовчуванням 30 (багатобайтових) символів.

$wgStringFunctionsLimitReplace
Це налаштування стосується #replace. Ця функція замінює всі входження одного рядку до іншого, що може швидко згенерувати великий обсяг даних, тобто підвищує вразливість до DoS-атак. Налаштування обмежує довжину рядку, який використовується для замін.

Значення за замовчуванням 30 (багатобайтових) символів.

Підстановка
Функції парсера можуть бути підставлені. Для цього вкажіть префікс  перед знаком решітки у виклику функції:


 * → код   буде вставлений до вікітексту оскільки сторінка існує.

Підстановка не працює в ; ви можете використати &hellip;  з цією метою.

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

Вставка символів вертикальної риски до таблиць
Функції парсера спотворять синтаксис та вертикальні риски, розцінюючи всі сирі символи вертикальних рисок як роздільники параметрів. Для уникнення цього більшість вікіпедій використовували шаблон $template, вмістом якого був тільки сирий символ вертикальної риски, починаючи з MW 1.24 замінило цей kludge. Це «ховає» вертикальну риску від парсера MediaWiki, забезпечуючи те, що він не розглянеться до того, як усі шаблони та змінні на сторінці не будуть розширені. Потім він інтерпретується як рядом таблиці чи роздільник колонки. Альтернативно, синтаксис сирої таблиці HTML може бути використано, хоча це менш інтуїтивно та ухильніше до помилок. To avoid this, most wikis used a template    :! with its contents only a raw pipe character, since MW 1.24 a  replaced this kludge. This 'hides' the pipe from the MediaWiki parser, ensuring that it is not considered until after all the templates and variables on a page have been expanded. It will then be interpreted as a table row or column separator. Alternatively, raw HTML table syntax can be used, although this is less intuitive and more error-prone.

Ви також можете екранувати символ «pipe» для відображення як простий, неінтерпретований символ за допомогою сутності HTML:.

Прибирання пробільних символів
Пробільні символи, включаючи символи нового рядка, символи табуляції та пробіли, прибираються із початку та з кінця всіх параметрів всіх функцій парсера. Якщо при порівнянні текстових рядків, пробільні символи в початку чи в кінці текстового рядка, що є аргументом функції, все ж таки потрібні, цей текстовий рядок можна помістити у подвійні лапки.



Щоб уникнути прибирання пробільних символів в аргументах функції #if можна скористатися шаблоном m:Template:If або використати &lt; nowiki &gt; &lt; /nowiki &gt; замість пробілів.


 * → foofoo
 * → foofoo

Однак, цей метод може бути використаний для рендерингу тільки єдиного пробільного символу, оскільки парсер стискає багато пробільних символів у рядку в один.




 * || → || foofoo 
 * }

У цьому прикладі стиль  використовується, щоб примусово зберігати пробіли браузером, але навіть із ним пробіли не показуються. Це стається тому, що пробіли are stripped програмним забезпеченням, до надсилання у браузер.

Можливо обійти цю поведінку, замінивши whitespaces на  (розривний пробіл) або   (нерозривний пробіл), адже вони не модифікуються програмним забезпеченням:


 * →  foofoo 
 * → foofoo

Beware that not all parameters are created equal. In ParserFunctions, whitespace at the beginning and end is always stripped. In templates, whitespace at the beginning and end is stripped for named parameters and named unnamed parameters but not from unnamed parameters:


 * → foofoo
 * → foofoo
 * → foofoo

Див. також

 * m:Help:Calculation
 * m:Help:Newlines and spaces
 * m:Help:Comparison between ParserFunctions syntax and TeX syntax
 * , an (incomplete) list of parser functions added by core and extensions.
 * Module:String що замінив
 * Parser functions for Wikibase (the extensions that enables Wikidata): d:Special:MyLanguage/Wikidata:How to use data on Wikimedia projects
 * Module:String що замінив
 * Parser functions for Wikibase (the extensions that enables Wikidata): d:Special:MyLanguage/Wikidata:How to use data on Wikimedia projects
 * Parser functions for Wikibase (the extensions that enables Wikidata): d:Special:MyLanguage/Wikidata:How to use data on Wikimedia projects