Help:Extension:ParserFunctions/ru

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

#expr
Эта функция вычисляет математическое выражение и возвращает вычисленное значение. Эта функция также доступна в через функцию.



Доступные операторы перечислены справа в порядке очередности. Дополнительные сведения о функции каждого оператора см. в Справка:Вычисления. Точность и формат возвращаемого результата будут варьироваться в зависимости от операционной системы сервера, на котором выполняется вики, и числового формата языка сайта.

При вычислении с помощью булева алгебры ноль вычисляется как, а любое не нулевое значение, положительное или отрицательное, вычисляется как  :



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



Порядок сложения и вычитания операндов до или после числа имеет смысл и может рассматриваться как положительное или отрицательное значение, а не как операнд с ошибочным вводом:



Обратите внимание, что при использовании вывода Волшебных слов, вы должны raw-форматировать их, чтобы удалить запятые и перевести цифры. Например, результаты в, когда мы хотим 0, которые можно получить с помощью. Это особенно важно в некоторых языках, где цифры переводятся. Например, в бенгальском языке производит ৩০,০৬১.



Округление
Округление число слева до кратного 1/10, возведенного в степень, с показателем степени, равным усеченному значению числа, заданного справа.

Для округления увеличением или уменьшением используйте унарные  или   соответственно.

Строки
Выражения работают только с числовыми значениями, они не могут сравнивать строки или символы. Вместо этого можно использовать.



#if
Функция определяет, является тестовая строка пустой или нет. Строка, содержащая только пробелы, считается пустой.





Эта функция сначала проверяет, не пуст ли первый параметр. Если первый параметр не пуст, то функция выводит второй аргумент. Если первый параметр пуст или содержит только пробельные символы (пробелы, новые строки и т. д.) он отображает третий аргумент.



Тестовая строка всегда интерпретируется как чистый текст, поэтому математические выражения не вычисляются:



Последний параметр (ложь) может быть опущен:



Функция может быть вложенной. Для этого вложите внутреннюю функцию #if в ее полном виде вместо параметра заключающей функции #if. Возможно до семи уровней вложенности, хотя это может зависеть от Вики или ограничения памяти.

Вы также можете использовать параметр в качестве тестовой строки в операторе #if. Вы должны убедиться, что вы добавляете  (символ pipe) после имени переменной. (Таким образом, если параметр не имеет значения, он вычисляется в пустую строку вместо строки " ".)



Дополнительные примеры этой функции парсера см. в разделе.

#ifeq
Эта функция парсера сравнивает две входные строки, определяет, идентичны ли они, и возвращает одну из двух строк на основе результата. Если требуется больше сравнений и выходных строк, рассмотрите возможность использования.



Если обе строки являются допустимыми числовыми значениями, то строки сравниваются численно:



В противном случае сравнение производится как текст; это сравнение чувствительно к регистру:


 * →  (сравните с аналогичным примером выше, без кавычек)
 * →  (сравните с аналогичным примером выше, с , возвращающим сначала допустимое число)
 * →  (сравните с аналогичным примером выше, без кавычек)
 * →  (сравните с аналогичным примером выше, с , возвращающим сначала допустимое число)

В качестве практического примера рассмотрим существующий , использующий синтаксический анализатор для выбора между двумя стандартными временами, коротким и длинным. Он принимает параметр в качестве первого входного сигнала для сравнения со строкой "short" – но его проще читать, если параметр идет первым. Код шаблона определяется как:



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


 * → 20
 * → 40
 * → 40

#iferror
Эта функция принимает входную строку и возвращает один из двух результатов; функция возвращает значение, если входная строка содержит HTML-объект с  , генерируемый другими функциями синтаксического анализатора, такими как  ,   и  , шаблоны ошибки, такие как циклы и рекурсии, и другие "отказоустойчивые" ошибки парсера.



Одна или обе возвращаемые строки могут быть опущены. Если строка  опущена, то   возвращается, если она не ошибочна. Если строка  также опущена, то при ошибке возвращается пустая строка:


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

#ifexpr
Эта функция вычисляет математическое выражение и возвращает одну из двух строк в зависимости от логического значения результата:



Входные данные  вычисляются точно так же, как и для   выше, причем доступны те же операторы. Выходные данные затем вычисляются как логическое выражение.

Пустое входное выражение принимает значение :



Как упоминалось выше, нулевое значение равно, а любое не нулевое значение равно  , поэтому эта функция эквивалентна функциям   и  , использующихся одновременно:



за исключением пустого или неправильного входного выражения (сообщение об ошибке обрабатывается как пустая строка; оно не равно нулю, поэтому мы получаем ).

сравнение

Одно или оба возвращаемых значения могут быть опущены; если соответствующая ветвь оставлена пустой, выходные данные не выводятся.:



#ifexist
Эта функция принимает входную строку, интерпретирует ее как заголовок страницы и возвращает одно из двух значений в зависимости от того, существует ли страница в локальной Вики.



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



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



Если страница проверяет цель с помощью, то эта страница появится в списке  для целевой страницы. Поэтому, если код  был включен на этой странице, /Foo будет содержать.

В вики, использующих общий медиа-репозиторий,  можно использовать для проверки, был ли файл загружен в репозиторий, но не в саму Вики:

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

не работает с интервики-ссылками.

#ifexist ограничения
считается "дорогой функцией парсера"; только ограниченное число может быть включено на каждой отдельной странице (включая функции внутри трансклюзованных шаблонов). При превышении этого предела любые дополнительные функции  автоматически возвращают Ложь, независимо от того, существует ли целевая страница или нет, и страница классифицируется в Category:. Название может варьировать в зависимости от языка содержимого Вики.

В некоторых случаях можно эмулировать эффект #ifexist с помощью css, используя селекторы  (для выбора ссылок на несуществующие страницы) или   (для выбора ссылок на существующие страницы). Кроме того, поскольку количество данных функций парсера, которые могут быть использованы на одной странице, контролируется, можно также увеличить лимит в LocalSettings.php, если нужно.

#ifexist и разыскиваемые страницы
Страница, которая не существует и проверена на использование #ifexist, будет в конечном итоге на Разыскиваемые страницы.

#rel2abs
Эта функция преобразует относительный путь к файлу в абсолютный путь к файлу.



Во входных данных  допустим следующий синтаксис:
 * → текущий уровень
 * → "подняться на один уровень вверх"
 * → "опустится на один уровень вниз в подкаталог /foo"

Если  не указан, вместо него будет использоваться полное имя страницы:



Недопустимый синтаксис, например  или , игнорируются. Поскольку допускается не более двух последовательных полных остановок, такие последовательности могут использоваться для разделения последовательных операторов:



#switch
Эта функция сравнивает одно входное значение с несколькими тестовыми случаями, возвращая связанную строку, если найдено совпадение.

Примеры:




 * 1) switch с тегами частичной трансклюзии может создавать конфигурационный файл, который позволяет редактору, незнакомому с шаблонным кодированием, просматривать и редактировать настраиваемые элементы.

По умолчанию
возвращается, если строка  не совпадает с  :



В этом синтаксисе результат по умолчанию должен быть последним параметром и не должен содержать необработанный знак равенства.



Кроме того, результат по умолчанию может быть явно объявлен с  строкой " ".

Результаты по умолчанию, объявленные таким образом, могут быть размещены в любом месте функции:



Если параметр  опущен и не выполняется сопоставление, то   не возвращается:



Группировка результатов
Возможен 'провал' значения, где  строки возвращают одинаковые   строки. Это сводит к минимуму дублирование.

Здесь случаи 2, 3 и 4 возвращают ; случаи 6 и 7 оба возвращают

Поведение сравнения
Как и в случае с, сравнение производится численно, если и строка сравнения, и проверяемая строка регистра являются числовыми; или как чувствительная к регистру строка в противном случае:





Строка  может быть пустой:

Как только совпадение найдено, последующие  игнорируются:

Необработанные знаки равенства
Строки "Случай" не могут содержать необработанные знаки равенства. Чтобы обойти это, создайте шаблон =, содержащий один знак равенства:, или замените знак равенства html-кодом.

Пример:





Для простого примера использования этой функции в реальной жизни проверьте Template:NBA color. Два сложных примера можно найти в и w:Template:BOTREQ.

Замена #ifeq
не может быть использован, чтобы уменьшить глубину расширения.

Например: эквивалентно т.е. глубокая вложенность, линейная:

С другой стороны, замена переключателя может быть сложной/непрактичной для #if, вложенных в обе ветви (показано с альтернативами отступа, отступами с обеих сторон), что делает полное симметричное дерево:

#time
This parser function takes a date and/or time (in the Gregorian calendar) and formats it according to the syntax given. A date/time object can be specified; the default is the value of the magic word  – that is, the time the page was last rendered into HTML.



The list of accepted formatting codes is given in the table to the right. Any character in the formatting string that is not recognized is passed through unaltered; this applies also to blank spaces (the system does not need them for interpreting the codes). There are also two ways to escape characters within the formatting string: In addition, the digraph  is interpreted as a single literal "x".
 * 1) A backslash followed by a formatting character is interpreted as a single literal character
 * 2) Characters enclosed in double quotes are considered literal characters, and the quotes are removed.



The  can be in any format accepted by PHP's strtotime function. Both absolute (eg ) and relative (eg  ) times are accepted.


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

The  in ISO 639-3 (?) allows the string to be displayed in the chosen language

The  parameter specifies if the date/time object refers to the local timezone or to UTC.

This is a boolean parameters: its value is determined by casting the value of the argument (see the official PHP documentation for details on how string are cast to boolean values).

See the following examples for details:





If you've calculated a Unix timestamp, you may use it in date calculations by pre-pending an  symbol.



Full or partial absolute dates can be specified; the function will "fill in" parts of the date that are not specified using the current values:



A four-digit number is always interpreted as a year, never as hours and minutes:

A six-digit number is interpreted as hours, minutes and seconds if possible, but otherwise as an error (not, for instance, a year and month):
 * →  Input is treated as a time rather than a year+month code.
 * →  Although 19:60:09 is not a valid time, 196009 is not interpreted as September 1960.

The function performs a certain amount of date mathematics:



The total length of the format strings of the calls of  is limited to 6000 characters.

Вопрос часового пояса
There is a bug in this #time parser function (more specifically in PHP DateTime) that does not allow the passing-in of non-integers as relative time zone offsets. This issue does not apply when using an on-the-hour time zone, such as EDT. For example:
 * &rarr;

However, India is on a +5.5 hours time offset from UTC, and thus using its time zone will not normally allow the correct calculation of a relative time zone offset. Here's what happens: To workaround this issue, simply convert the time into minutes or seconds, like this:
 * &rarr;
 * &rarr;
 * &rarr;

(Tim Starling, the developer of this function, provided the exact syntax for this solution.)

#timel
This function is identical to, when the   parameter is set to  , so it always uses the local time of the wiki (as set in ).

Syntax of the function is:



For instance, see the following examples:



#titleparts
This function separates a page title into segments based on slashes, then returns some of those segments as output.



If the number of segments to return parameter is not specified, it defaults to "0", which returns all the segments from the first segment to return (included). If the first segment to return parameter is not specified or is "0", it defaults to "1":


 * →  See also.
 * →  See also.

Negative values are accepted for both values. Negative values for the number of segments to return parameter effectively 'strips' segments from the end of the string. Negative values for the first segment to return translates to "start with this segment counting from the right":


 * →  Strips one segment from the end of the string. See also.
 * →   Strips all 4 segments from the end of the string
 * →   Strips 5 segments from the end of the string (more than exist)
 * →   Returns last segment. See also.
 * →   Strips one segment from the end of the string, then returns the second segment and beyond
 * →   Start copying at the second last element; strip one segment from the end of the string

Before processing, the pagename parameter is HTML-decoded: if it contains some standard HTML character entities, they will be converted to plain characters (internally encoded with UTF-8, i.e. the same encoding as in the MediaWiki source page using this parser function).


 * For example, any occurrence of,  , or   in pagename will be replaced by.
 * No other conversion from HTML to plain text is performed, so HTML tags are left intact at this initial step even if they are invalid in page titles.

Then the decoded pagename is canonicalized into a standard page title supported by MediaWiki, as much as possible:


 * 1) All underscores are automatically replaced with spaces:
 * →  Not bah_boo, despite the underscore in the original.
 * 1) The string is split a maximum of 25 times; further slashes are ignored and the 25th element will contain the rest of the string. The string is also limited to 255 characters, as it is treated as a page title:
 * If for whatever reason you needed to push this function to its limit, although very unlikely, it is possible to bypass the 25 split limit by nesting function calls:
 * 1) Finally the first substring is capitalized according to the capitalization settings of the local wiki (if that substring also starts by a local namespace name, that namespace name is also normalized).
 * 1) Finally the first substring is capitalized according to the capitalization settings of the local wiki (if that substring also starts by a local namespace name, that namespace name is also normalized).
 * 1) Finally the first substring is capitalized according to the capitalization settings of the local wiki (if that substring also starts by a local namespace name, that namespace name is also normalized).

{{Warning|1= Certain characters that are illegal in a page title will cause #titleparts to not parse the string:


 * → {{#titleparts: {one/two} | 1 | 1 }}. Does not produce the expected: {one
 * → {{#titleparts: page/123 | 1 | 2 }}. Does not work because brackets are illegal in page titles and this parser function does not process links embedded in its input pagename parameter, even when they use the MediaWiki syntax, or any other HTML or MediaWiki tags.
 * → "{{#titleparts: red/#00FF00/blue| 1 | 3 }}". Does not work because "#" is also illegal in page titles.

}}

Подстановка
Parser functions can be substituted by prefixing the hash character with :


 * → the code   will be inserted in the wikitext since the page exists.

Substitution does not work within, you can use &hellip;  for this purpose.

Перенаправления
Especially   could be handy in  to pages including dates, but this does not work.

Escaping pipe characters in tables
Parser functions will mangle syntax and pipe characters, treating all the raw pipe characters as parameter dividers. 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.

You can also escape the pipe character for display as a plain, uninterpreted character using an HTML entity:.

Stripping whitespace
Whitespace, including newlines, tabs, and spaces, is stripped from the beginning and end of all the parameters of these parser functions. If this is not desirable, comparison of strings can be done after putting them in quotation marks.



To prevent the trimming of then and else parts, see m:Template:If. Some people achieve this by using &lt; &gt;  &lt; /nowiki &gt; instead of spaces.


 * → foofoo
 * → foofoo

However, this method can be used to render a single whitespace character only, since the parser squeezes multiple whitespace characters in a row into one.




 * || → || foofoo 
 * }

In this example, the  style is used to force the whitespace to be preserved by the browser, but even with it the spaces are not shown. This happens because the spaces are stripped by the software, before being sent to the browser.

It is possible to workaround this behavior replacing whitespaces with  (breakable space) or   (non-breakable space), since they are not modified by the software:


 * →  foofoo 
 * → foofoo

См. также

 * m:Help:Calculation
 * m:Help:Newlines and spaces
 * m:Help:Comparison between ParserFunctions syntax and TeX syntax
 * Module:String obsoleting
 * Module:String obsoleting
 * Module:String obsoleting