Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску
Документация по модулю [ просмотреть ] [ изменить ] [ историю ] [ очистить ]

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

Шаблоны обслуживания, такие как {{ Требуется цитирование }} или {{ Refimprove }}, ни в коем случае нельзя заменять. Уловка, которую следует избегать, заключается в том, чтобы заменить включенную форму шаблоном.

Инфобоксы должны использовать Module: Unsubst-infobox , как и любые другие шаблоны с параметрами, перечисленными по умолчанию в формате блока.

Использование [ править ]

Чтобы превратить шаблон в самозаменяющийся шаблон, оберните существующий код шаблона следующим образом:

{{SAFESUBST: <noinclude /> # invoke: Unsubst || $ B = [... существующий код шаблона ...]}}

Вики-текст, отображаемый без подстановки, должен быть обозначен как «$ B». Все остальные параметры, переданные в #invoke, будут скопированы в сгенерированный вызов шаблона как значения по умолчанию. Если значение любого из этих параметров по умолчанию равно __DATE__, это значение в сгенерированном вызове шаблона будет текущим месяцем и годом.

Некоторые шаблоны имеют, <noinclude>но не имеют соответствия </noinclude>в конце шаблона. В таких случаях недостающее </noinclude>должно быть добавлено перед финалом }}.

Расширенный [ править ]

{{SAFESUBST: <noinclude /> # invoke: Unsubst || $ params = [параметры] | $ aliases = [псевдонимы] | $ flags = [flags] | $ B = [... существующий код шаблона ...]}}

Из-за ограничений Lua параметры обычно упорядочиваются случайным образом при замене шаблона. |$params=можно использовать в #invoke: Unsubst для перечисления параметров шаблона по порядку, через запятую (например egg,bacon,sausage,cheese,spam). Пронумерованные параметры должны быть перед другими в списке. Любые оставшиеся параметры добавляются в конец сгенерированного вызова.

Псевдонимы параметров могут быть перечислены в |$aliases=(и не должны указываться в |$params=) и будут заменены автоматически. Каждый псевдоним и его замена должны быть отформатированы как alias>replacement, и каждая из этих пар должна быть разделена запятыми (например œuf>egg,melt>cheese). Обратите внимание, что этот параметр может работать как с, так и без него |$params=.

Параметр |$flags=может использоваться для изменения других аспектов поведения модуля; записи разделяются запятыми. Допустимые флаги: override(позволяет параметрам в #invoke: иметь приоритет над параметрами в исходном вызове шаблона); keep-whitespace(предотвращает удаление пробелов из безымянных параметров); и remove-empty(удаляет пустые параметры).

Этими параметрами можно управлять с помощью функций синтаксического анализатора для предоставления более сложных опций (обратите внимание, что в параметрах должна быть также указана любая функция синтаксического анализатора, шаблон или вызов модуля SAFESUBST:<noinclude />).

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

Рассмотрим шаблон Template: пример, содержащий следующий код:

{{SAFESUBST: <noinclude /> # invoke: Unsubst || foo = bar | date = __ DATE__ | $ B = [... Код шаблона находится здесь ...]}}
local  checkType  =  require ( 'libraryUtil' ). checkTypeместный  p  =  {}местное  BODY_PARAM  =  '$ B'local  specialParams  =  {[ '$ params' ]  =  'список параметров' ,[ '$ aliases' ]  =  'псевдонимы параметров' ,[ '$ flags' ]  =  'флаги' ,[ '$ B' ]  =  'содержимое шаблона'}функция  p . основной ( каркас ,  корпус )- Если мы выполняем подстановку, эта функция возвращает вызов шаблона, а если- нет, возвращает тело шаблона. Тело шаблона можно указать в- параметр body или параметр шаблона, определенный в- Переменная BODY_PARAM. Эту функцию можно вызвать из Lua или из- #invoke.- Вернуть тело шаблона, если мы не выполняем подстановку.если  не  мв . isSubsting (),  затемесли  body  ~ =  nil,  товернуть  телоelseif  кадр . args [ BODY_PARAM ]  ~ =  ноль,  тогдавозвратный  фрейм . аргументы [ BODY_PARAM ]ещеошибка ( string.format ("содержимое шаблона не указано (используйте параметр '% s' из #invoke)" ,BODY_PARAM),  2 )конецконец- Проверка работоспособности фрейм-объекта.если  type ( frame )  ~ =  'table'или  введите ( frame . getParent )  ~ =  'function'или  нет  кадра : getParent ()тогдаошибка («аргумент №1 для 'main' должен быть объектом фрейма с родителем»  .."рамка доступна" ,2)конец- Найдите имя вызова.local  mTemplateInvocation  =  require ( 'Модуль: вызов шаблона' )локальное  имя  =  mTemplateInvocation . имя ( фрейм : getParent (): getTitle ())- Объединить переданные аргументы с переданными значениями по умолчаниюместные  аргументы  =  {}если  string.find (  ',' .. ( frame . args [ '$ flags' ]  или  '' ) .. ',' ,  ',% s * переопределяет% s *,'  ),  тодля  k ,  v  в  парах (  frame : getParent (). args  )  делаемargs [ k ]  =  vконецдля  к ,  v  в  парах (  кадр . арг  )  делаютесли  не  specialParams [ k ],  тоесли  v  ==  '__DATE__'  тоv  =  mw . getContentLanguage (): formatDate (  'F Y'  )конецargs [ k ]  =  vконецконецещедля  к ,  v  в  парах (  кадр . арг  )  делаютесли  не  specialParams [ k ],  тоесли  v  ==  '__DATE__'  тоv  =  mw . getContentLanguage (): formatDate (  'F Y'  )конецargs [ k ]  =  vконецконецдля  k ,  v  в  парах (  frame : getParent (). args  )  делаемargs [ k ]  =  vконецконец- Параметры обрезки, если не указано иноеесли  не  string.find (  ',' .. ( frame . args [ '$ flags' ]  или  '' ) .. ',' ,  ',% s * keep% -whitespace% s *,'  )  тогдадля  k ,  v  в  парах (  args  )  do  args [ k ]  =  mw . ustring . match ( v ,  '^% s * (. *)% s * $' )  или  ''  конецконец- Получение информации из псевдонимов параметровлокальные  псевдонимы  =  {}если  рамка . args [ '$ aliases' ]  тогдалокальный  список  =  mw . текст . split (  frame . args [ '$ aliases' ],  '% s *,% s *'  )для  k ,  v  в  ipairs (  список  )  сделатьместный  tmp  =  mw . текст . split (  v ,  '% s *>% s *'  )псевдонимы [ tonumber ( mw . ustring . match ( tmp [ 1 ],  '^ [1-9] [0-9] * $' ))  или  tmp [ 1 ]]  =  (( tonumber ( mw . ustring . match ( tmp [ 2 ],  '^ [1-9] [0-9] * $' )))  или  tmp [ 2 ])конецконецдля  к ,  v  в  пар (  псевдонимами  )  делаютесли  args [ k ]  и  (  не  args [ v ]  или  args [ v ]  ==  ''  ),  тоargs [ v ]  =  args [ k ]конецargs [ k ]  =  нольконец- Удалите пустые параметры, если они указаныif  string.find (  ',' .. ( frame . args [ '$ flags' ]  или  '' ) .. ',' ,  ',% s * remove% -empty% s *,'  )  тогдаместный  tmp  =  0для  k ,  v  в  ipairs (  args  )  делаемесли  v  ~ =  ''  или  (  args [ k + 1 ]  и  args [ k + 1 ]  ~ =  ''  )  или  (  args [ k + 2 ]  and  args [ k + 2 ]  ~ =  ''  ),  тоtmp  =  kещеперерывконецконецдля  k ,  v  в  парах (  args  )  делаемесли  v  ==  '',  тоесли  нет  ( type ( k )  ==  'number'  и  k  <  tmp ),  то  args [ k ]  =  nil  endконецконецконец- Параметры заказаесли  рамка . args [ '$ params' ]  тогдалокальные  параметры ,  tmp  =  mw . текст . split (  frame . args [ '$ params' ],  '% s *,% s *'  ),  {}для  k ,  v  в  ipairs ( params )  делаемv  =  ToNumber ( мвт . ustring . сопрягать ( v ,  '^ [1-9] [0-9] * $' ))  или  vесли  args [ v ],  то  tmp [ v ],  args [ v ]  =  args [ v ],  nil  endконецдля  k ,  v  в  парах ( args )  do  tmp [ k ],  args [ k ]  =  args [ k ],  nil  endargs  =  tmpконецвернуть  mTemplateInvocation . вызов ( имя ,  аргументы )конецp [ '' ]  =  p . main  - для обратной совместимостивернуть  p