Циклопедия скорбит по жертвам террористического акта в Крокус-Сити (Красногорск, МО)

Циклопедия:Синтаксис фильтров MediaWiki

Материал из Циклопедии
Перейти к навигации Перейти к поиску

Правила фильтров MediaWiki составляются на C/Java/Perl-подобном языке.

Литералы[править]

Литерал можно задать, поместив его в кавычки (для строк) или вводя напрямую (справедливо для целых и дробных чисел). Допускается использование разрывов строк с помощью \n, табуляций с указанием \t.

Примеры:

"Это строка"

'Это тоже строка'

'Это строка\t с табуляцией'

'Эта строка восхвал\'яет Зелева'

'А здесь присутствует\n перевод строки'

5678

5.678

-10

Комментарии[править]

Комментарии определяются следующим образом:

/* Комментарий */

Переменные[править]

Фильтр злоупотреблений передаёт парсеру различные переменные. Эти переменные можно получить, введя их имя в месте, где будут работать литералы. В журнале злоупотреблений можно просмотреть переменные, связанные с каждым запросом.

Примеры:

USER_EDITCOUNT

ARTICLE_RECENT_CONTRIBUTORS

Существует возможность определять пользовательские переменные. Для этого после названия переменной необходимо поставить знак :=, а в конце ;.

Пример:

line1:="(\{\{(r|R)eflist|\{\{(r|R)efs|<references\s?/>|</references\s?>)";

Списки задаются следующим образом:

a_list := [ 5, 6, 7];

Стандартные переменные[править]

Название переменной Описание Тип данных Значения
timestamp Unix-время изменения
accountname Имя учётной записи (при создании учётной записи) string
action Действие string 'edit'
'move'
'createaccount'
'autocreateaccount'
'delete'
'upload'
added_lines Добавленные строки string
edit_delta Изменение размера страницы при правке (в байтах) integer
edit_diff Унифицированная разница изменений правки
new_size Новый размер страницы (в байтах) integer
old_size Старый размер страницы (в байтах) integer
removed_lines Удалённые строки string
summary Описание правки string
article_articleid ID страницы (значение доступно при просмотре HTML-кода страницы, располагается в wgArticleId) integer 0 для новых страниц
article_namespace Пространство имён страницы integer Значение пространства имени в MediaWiki
article_text Название страницы (без пространства имён) string
article_prefixedtext Полное название страницы string
moved_from_articleid ID переименовываемой страницы integer
moved_from_namespace Пространство имён переименовываемой страницы integer Значение пространства имени в MediaWiki
moved_from_text Название переименовываемой страницы (без пространства имён) string
moved_from_prefixedtext Полное название переименовываемой страницы string
moved_to_articleid ID целевой страницы переименования integer
moved_to_namespace Пространство имён целевой страницы переименования integer Значение пространства имени в MediaWiki
moved_to_text Название целевой страницы переименования (без пространства имён) string
moved_to_prefixedtext Полное название целевой страницы переименования string
user_editcount Число правок участника integer
user_age Возраст учётной записи в секундах integer Для IP равен 0
user_name Имя учётной записи string
user_groups Группы (включая неявные), в которых состоит участник string
user_emailconfirm Время подтверждения адреса электронной почты date В формате YYYYMMDDHHMMSS
old_wikitext Старый викитекст, до правки страницы string
new_wikitext Новый викитекст, после правки страницы string
added_links Все внешние ссылки, добавленные в правке string
removed_links Все внешние ссылки, удалённые в правке string
all_links Все внешние ссылки в новом тексте string
new_text Новый текст страницы, очищенный от разметки string
new_html Разобранный HTML-код новой версии string
article_restrictions_edit Уровень защиты страницы от правок string
article_restrictions_move Уровень защиты страницы от переименований string
article_recent_contributors Последние десять редакторов страницы string
old_links Ссылки на странице до правки string
minor_edit Была ли правка отмечена как малое изменение boolean true; false; 0; 1
file_sha1 SHA1-хэш содержания файла

Простые сравнения[править]

Переменные можно сравнивать с другими переменными или литералами с помощью следующего синтаксиса:

  • < и > возвращает значение true, когда левый операнд меньше или больше правого соответственно.
  • <= и >= возвращает значение true, когда левый операнд не больше или не меньше правого соответственно.
  • == (или =) и != возвращает значение true, если левый операнд равен или не равен правому соответственно.
  • === и !== возвращает значение true, если левый операнд равен или не равен правому соответственно, и имеет или не имеет такой же тип данных, что и правый операнд, соответственно.
Пример Результат
3 == 4 false
5 != 9 true
10 > 11 false
10 < 11 true
0 == False true
0 === False false

Арифметические операции[править]

В фильтрах MediaWiki применяются следующие арифметические операции:

  • + складывает операнды.
  • - вычитает правый операнд из левого.
  • * умножает операнды.
  • / делит левый операнд на правый.
  • ** возводит левый операнд в степень, указанную в правом операнде.
  • % возвращает остаток от деления левого операнда на правый.
Пример Результат
2 ** 5 32
9 % 4 1

Слияние строк[править]

Объединение, или конкатенация строк осуществляется посредством применения знака + для двух символьных строк или переменных со значением string.

Ключевые слова[править]

  • like (или matches) возвращает значение true, если левый операнд соответствует глобальному шаблону правого операнда.
  • in возвращает значение true, если правый операнд содержит левый.
  • rlike (или regex) и irlike возвращает значение true, если левый операнд содержит регулярное выражение правого операнда (irlike не чувствителен к регистру). Система использует PCRE.
  • contains.
  • if ... then ... else ... end — оператор условия.
  • ... ? ... : ... — тернарный оператор.
  • true, false и null.
Пример Результат
"1234" like "12?4" true
"1234" like "12*" true
"foo" in "foobar" true
"foo" regex "\w+" true

Функции[править]

Название Описание
length(string) Длина строки.
lcase(string) Переводит все символы строки в нижний регистр.
ccnorm(string) Производит нормализацию неоднозначных символов.
rmdoubles(string) Удаляет повторяющиеся символы.
specialratio(string) Возвращает результат деления количества специальных символов на общее число символов.
norm(string) Осуществляет нормализацию.
count(needle, haystack) Возвращает число вхождений первой строки во вторую.
rcount(needle, haystack) Эквивалента предыдущей функции, однако манипулирует с регулярнгыми выражениями.
rmwhitespace(text) Удаляет пробелы.
rmspecials(text) Удаляет специальные символы.
ip_in_range(ip, range) Проверяет, входит ли указанный IP-адрес в указанный диапазон. Если да, то возвращает значение true.
contains_any(haystack, needle1, needle2, ...) Возвращает true, если первая строка содержит любой из следующих аргументов. Число аргументов неограниченно.
substr(subject, offset, length) Возвращает часть строки путём смещения от второго аргумента на длину, указанную в третьем аргументе. Третий аргумент необязателен.
strpos(haystack, needle) Возвращает позицию первого вхождения второй строки в первую. Функция может возвращать 0, если вторая строка находится в начале первой, поэтому предпочтительнее использование операторов === и !==.
str_replace(subject, search, replace) Заменяет все значения search в строке subject на replace.
set_var(var,value) Устанавливает переменную с заданным значением.

Логические операции[править]

  • x & y — И. Возвращает true, если верны все условия.
  • x | y — ИЛИ. Возвращает true, если верно хотя бы одно из условий.
  • x ^ y — ИСКЛЮЧАЮЩЕЕ ИЛИ. Возвращает true, если верно только одно из условий.
  • !x — НЕ. Возвращает true, если условие не верно.
   x       y     x & y   x | y   x ^ y     !x       !y   
0 0 0 0 0 1 1
0 1 0 1 1 1 0
1 0 0 1 1 0 1
1 1 1 1 0 0 0

Приоритетность операций[править]

Операции, как правило, выполняются слева направо, но существует определённый порядок, по которому они будут выполняться. Как только расширение не может проверить одно из условий фильтра, оно останавливает проверку остальных и переходит к следующему фильтру.

Порядок выполнения операций:

  1. Всё, что заключено в круглые скобки ( и ) воспринимается как единое целое.
  2. Включение переменных/литералов в соответствующие данные.
  3. Вызовы функций.
  4. Унарный + и унарный - (определяющий положительное или отрицательное значение, например, -5).
  5. Ключевые слова.
  6. Логическая инверсия (!x).
  7. Возведение в степень.
  8. Умножение, деление и остаток от деления.
  9. Сложение и вычитание.
  10. Сравнения: <, >, ==.
  11. Логические операции: (&, |, ^, in).

Ссылки[править]