Перейти к навигации Перейти к поиску
Документация по модулю [ просмотреть ] [ изменить ] [ историю ] [ очистить ]
Документация для программистов шаблонов
Эта страница является мягким редиректом .
Исходный код этого скрипта взят из апстрима , в данном случае de.wikipedia . |
- [= [TemplatePar 14 февраля 2015 г.Утилита параметров шаблона* утверждать* проверить* считать* countNotEmpty* вниз ()* матч* действительный* проверять()* TemplatePar ()знак равно- Модульные глобалыlocal TemplatePar = { }local MessagePrefix = "lua-module-TemplatePar-"местный L10nDef = {}L10nDef . en = { badPattern = "& # 35; invoke: синтаксическая ошибка шаблона TemplatePar" , dupOpt = "& # 35; invoke: TemplatePar повторяющийся необязательный параметр" , dupRule = "& # 35; invoke: ключ / шаблон конфликта TemplatePar" , empty = "Ошибка в шаблоне * неопределенное значение для обязательного" , invalid = "Ошибка в шаблоне * недопустимый параметр" , invalidPar = "& # 35; invoke: недопустимый параметр TemplatePar" , minmax = "& # 35; invoke: TemplatePar min> max" , missing = "& # 35; invoke: Отсутствует библиотека TemplatePar" , multiSpell = "Ошибка в шаблоне * множественное написание параметра" , noMSGnoCAT = "& # 35; invoke: TemplatePar ни сообщение, ни категория" , noname = "& # 35; invoke: TemplatePar отсутствует имя параметра" , notFound = "Ошибка в шаблоне * отсутствует страница" , tooLong = "Ошибка в шаблоне * слишком длинный параметр" , tooShort = "Ошибка в шаблоне * слишком короткий параметр" , undefined = "Ошибка в шаблоне * отсутствует обязательный параметр" , unknown = "Ошибка в шаблоне * неизвестное имя параметра" , unknownRule = "& # 35; invoke: Неизвестное правило TemplatePar"}L10nDef . de = { badPattern = "& # 35; invoke: TemplatePar Syntaxfehler des pattern" , dupOpt = "& # 35; invoke: TemplatePar Optionsparameter wiederholt" , dupRule = "& # 35; invoke: ключ / шаблон TemplatePar Konflikt" , empty = "Fehler bei Vorlage * Pflichtparameter ohne Wert" , invalid = "Fehler bei Vorlage * Parameter ungültig" , invalidPar = "& # 35; invoke: TemplatePar Ungültiger Parameter" , minmax = "& # 35; invoke: TemplatePar min> max" , multiSpell = "Fehler bei Vorlage * Mehrere Parameter-Schreibweisen" , noMSGnoCAT = "& # 35; invoke: TemplatePar weder Meldung noch Kategorie" , noname = "& # 35; invoke: TemplatePar Parameter nicht angegeben" , notFound = "Fehler bei Vorlage * Seite fehlt" , tooLong = "Fehler bei Vorlage * Parameter zu lang" , tooShort = "Fehler bei Vorlage * Parameter zu kurz" , undefined = "Fehler bei Vorlage * Pflichtparameter fehlt" , unknown = "Fehler bei Vorlage * Parametername unbekannt" , unknownRule = "& # 35; invoke: TemplatePar Unbekannte Regel"}local Patterns = { [ "ASCII" ] = "^ [- ~] * $" , [ "ASCII +" ] = "^ [- ~] + $" , [ "ASCII + 1" ] = "^ [! - ~] + $" , [ "n" ] = "^ [% -]? [0-9] * $" , [ "n> 0" ] = "^ [0-9] * [1-9] [0-9] * $" , [ "N +" ] = "^ [% -]? [1-9] [0-9] * $" , [ "N> 0" ] = "^ [1-9] [0-9] * $" , [ "x" ] = "^ [0-9A-Fa-f] * $" , [ "x +" ] = "^ [0-9A-Fa-f] + $" , [ "X" ] = "^ [0-9A-F] * $" , [ "X +" ] = "^ [0-9A-F] + $" , [ "0,0" ] = "^ [% -]? [0-9] * ,? [0-9] * $" , [ "0,0+" ] = "^ [% -]? [0-9] +, [0-9] + $" , [ "0,0+?" ] = "^ [% -]? [0-9] + ,? [0-9] * $" , [ "0.0" ] = "^ [% -]? [0-9] * [%.]? [0-9] * $" , [ "0.0+" ] = "^ [% -]? [0-9] +%. [0-9] + $" , [ "0,0+?" ] = "^ [% -]? [0-9] + [%.]? [0-9] * $" , [ ".0+" ] = "^ [% -]? [0-9] * [%.]? [0-9] + $" , [ "ID" ] = "^ [A-Za-z]? [A-Za-z_0-9] * $" , [ "ID +" ] = "^ [A-Za-z] [A-Za-z_0-9] * $" , [ "ABC" ] = "^ [AZ] * $" , [ "ABC +" ] = "^ [AZ] + $" , [ "Abc" ] = "^ [AZ] * [az] * $" , [ "Abc +" ] = "^ [AZ] [az] + $" , [ "abc" ] = "^ [az] * $" , [ "abc +" ] = "^ [az] + $" , [ "aBc +" ] = "^ [az] + [AZ] [A-Za-z] * $" , [ "w" ] = "^% S * $" , [ "w +" ] = "^% S + $" , [ "base64" ] = "^ [A-Za-z0-9% + /] * $" , [ "base64 +" ] = "^ [A-Za-z0-9% + /] + $" , [ "aa" ] = "[% a% a]. * [% a% a]" , [ "pagename" ] = string.format ( "^ [^ # <> %% [%%] | {}% c-% c% c] + $" , 1 , 31 , 127 ), [ "+" ] = "% S"}локальный шаблон CJK = falseлокальная функция содержит CJK ( s ) - Присутствует ли какой-нибудь персонаж CJK? - Предварительное условие: - s - строка - Постусловие: - Вернуть false, если нет CJK - Использует: -> <шаблонCJK - mw.ustring.char () - mw.ustring.match () местный r = false если не patternCJK, то patternCJK = mw . ustring . символ ( 91 , 13312 , 45 , 40959 , 131072 , 45 , 178207 , 93 ) конец если мв . ustring . match ( s , patternCJK ), затем г = правда конец вернуть гконец - содержитCJK ()локальная функция объекта ( принять , попытка ) - Проверьте строку как возможное имя файла или другую исходную страницу - Предварительное условие: - accept - строка; требование -- файл - файл + -- файл: - файл: + -- изображение - изображение + -- изображение: - изображение: + - попытка - строка; для тестирования - Постусловие: - Вернуть ключевое слово ошибки или false - Использует: - Модуль: FileMedia - FileMedia.isType () местный р если попытка и попытка ~ = "" тогда местный повезло , FileMedia = pcall ( требуется , «Модуль: FileMedia» ) если type ( FileMedia ) == "table", то FileMedia = FileMedia . FileMedia () local s , live = accept : match ( "^ ([az] +) (:?)% +? $" ) если жив, то если FileMedia . isType ( попытка , с ), затем если FileMedia . isFile ( попытка ), затем г = ложь еще r = "notFound" конец еще r = "недействительно" конец elseif FileMedia . isType ( попытка , с ), затем г = ложь еще r = "недействительно" конец еще r = "отсутствует" конец elseif accept : match ( "% + $" ) затем r = "пустой" еще г = ложь конец вернуть гконец - объект ()локальная фабрика функций ( скажем ) - Получить локализованную строку сообщения на языке содержимого - Предварительное условие: - говорят - струна; ID сообщения - Постусловие: - Вернуть строку сообщения - Использует: -> MessagePrefix -> L10nDef - mw.language.getContentLanguage () - mw.message.new () местный c = mw . язык . getContentLanguage (): getCode () местный m = mw . сообщение . новый ( MessagePrefix .. скажем ) местный r = false если m : isBlank (), то местный l10n = L10nDef [ c ] если не l10n то l10n = L10nDef [ "ru" ] конец r = l10n [ сказать ] еще m : inLanguage ( c ) г = м : простой () конец если не г, то r = string.format ( "((((% s)))" , скажем ) конец вернуть гконец - фабрика ()локальная функция отказоустойчивости ( рассказ , сканирование ) - Проверка на совпадение (возможно, определенная пользователем с синтаксической ошибкой) - Предварительное условие: - рассказ - струна; значение параметра - скан - строка; шаблон - Постусловие: - Возвращает ноль, если не совпадает, иначе не ноль - Использует: - mw.ustring.match () вернуть мв . ustring . матч ( рассказ , скан )конец - отказоустойчивый () сбой локальной функции ( спецификация , подозрение , опции ) - Отправить локализованное сообщение об ошибке - Предварительное условие: - spec - строка; ID сообщения - подозреваемый - строка или ноль; Дополнительная информация - параметры - таблица или ноль; необязательные детали - options.template - Постусловие: - Строка возврата - Использует: -- фабрика() местный r = завод ( спецификация ) если type ( options ) == "table", то если type ( options . template ) == "строка", то если # опции . template > 0, тогда r = string.format ( "% s (% s)" , r , параметры . шаблон ) конец конец конец если подозреваешь, то r = string.format ( "% s:% s" , r , подозрительно ) конец вернуть гконец - отказ ()локальная функциональная ошибка ( магазин , ключ ) - Добавить ключ в строку коллекции и вставить разделитель - Предварительное условие: - store - строка или ноль или ложь; строка коллекции - ключ - строка или число; быть добавленным - Постусловие: - строка возврата; расширенный местный р местные с если type ( key ) == "число", то s = tostring ( ключ ) еще s = ключ конец если хранить то r = string.format ( "% s;% s" , store , s ) еще г = с конец вернуть гконец - ошибка () возможна локальная функция ( анализ , параметры , сокр. ) - Проверить содержание значения - Предварительное условие: - анализировать - строка для анализа - параметры - таблица или ноль; необязательные детали - options.pattern - options.key - options.say - abbr - true: сокращенное сообщение об ошибке - Постусловие: - Возвращаемая строка с сообщением об ошибке, как настроено; - false, если правильный или ответ не разрешен - Использует: -> Узоры -- отказ() - mw.text.trim () -- средство() - отказоустойчивый () - содержитCJK () местный r = false местный s = false местное шоу = ноль локальное сканирование = ложь если type ( options . pattern ) == "строка", то если варианты . ключ тогда r = сбой ( "dupRule" , ложь , параметры ) еще scan = параметры . шаблон конец еще если type ( options . key ) == "строка", то s = mw . текст . обрезать ( опции . ключ ) еще s = "+" конец если s ~ = "*", то scan = Шаблоны [ s ] конец если type ( scan ) == "строка", то если s == "n" или s == "0,0" или s == "0,0", то если не анализировать : сопоставить ( "[0-9]" ) и не анализировать : сопоставить ( "^% s * $" ) тогда сканирование = ложь если варианты . скажи тогда show = string.format ( "'% s'" , варианты . скажем ) конец если аббр, то r = показать еще r = сбой ( "недопустимый" , показать , параметры ) конец конец конец elseif s ~ = "*" тогда local op , n , plus = s : match ( "([<! =>] =?) ([- 0-9] [% S] *) (+?)" ) если оп, то п = ToNumber ( п ) если п, то локальный я = ToNumber ( анализ ) если я тогда если op == "<", то я = ( я < п ) elseif op == "<=" тогда я = ( я <= п ) elseif op == ">" тогда я = ( я > п ) elseif op == "> =" тогда я = ( я > = п ) elseif op == "==" тогда я = ( я == п ) elseif op == "! =" тогда я = ( я ~ = п ) еще п = ложь конец конец если не я, то r = "недействительно" конец иначе если плюс то r = "undefined" конец elseif s : match ( "^ image% +?:? $" ) или s : match ( "^ file% +?:? $" ) затем r = объект ( s , анализировать ) п = верно elseif s : match ( "langW?% +?" ) тогда п = "язык"- lang lang +- langW langW + конец если не n и не r, то r = "unknownRule" конец если г, то если варианты . скажи тогда show = string.format ( "'% s'% s" , параметры . скажем , s ) еще показать = s конец если аббр, то r = показать еще r = сбой ( r , показать , варианты ) конец конец конец конец если сканировать то местный юридический , got = pcall ( отказоустойчивый , анализировать , сканировать ) если законно то если не получил то если s == "aa", то got = containsCJK ( анализировать ) конец если не получил то если варианты . скажи тогда show = string.format ( "'% s'" , варианты . скажем ) конец если аббр, то r = показать еще r = сбой ( "недопустимый" , показать , параметры ) конец конец конец еще r = сбой ( "badPattern" , String.Format ( "% s ***% s" , сканирование , есть ), варианты ) конец конец вернуть гконец - выполнимо ()местная функция подачи ( стог сена , иголка ) - Найдите иголку на карте стога сена - Предварительное условие: - стог сена - стол; карта ключевых значений - игла - любая; идентификатор - Постусловие: - Вернуть истину, если найден местный k , v для к , v в парах ( стог ) делают если k == игла, то вернуть истину конец конец - для k, v вернуть ложьконец - накормил () выборка локальной функции ( свет , опции ) - Вернуть обычную таблицу со всеми параметрами - Предварительное условие: - светлый - правда: включение шаблона; false: #invoke - варианты - таблица; необязательные детали - options.low - Постусловие: - таблица возврата; только пробельные значения как false - Использует: - TemplatePar.downcase () - mw.getCurrentFrame () - рамка: getParent () местный g , k , v местный r = { } если варианты . тогда низко g = TemplatePar . вниз ( варианты ) еще г = мвт . getCurrentFrame () если свет тогда г = г : getParent () конец г = г . аргументы конец если type ( g ) == "table", то г = { } для k , v в парах ( g ) делаем если type ( v ) == "строка", то если v : match ( "^% s * $" ), то v = ложь конец еще v = ложь конец если type ( k ) == "число", то k = tostring ( k ) конец r [ k ] = v конец - для k, v еще г = г конец вернуть гконец - fetch () фигура локальной функции ( добавление , опции ) - Расширить параметры правилом из #invoke strings - Предварительное условие: - append - строка или ноль; запрошенное правило - варианты - таблица; Детали - ++ .key - ++. шаблон - Постусловие: - Таблица последовательности возврата местные r = параметры если type ( append ) == "строка", то местная история = мв . текст . обрезать ( добавить ) local sub = story : match ( "^ / (. *% S) / $" ) если type ( sub ) == "строка", то sub = sub : gsub ( "%%!" , "|" ) sub = sub : gsub ( "%%% (% (" , "{{" ) sub = sub : gsub ( "%%%)%)" , "}}" ) варианты . шаблон = суб варианты . ключ = ноль еще варианты . ключ = история варианты . шаблон = ноль конец конец вернуть гконец - цифра () заполнение локальной функции ( указано ) - Разделить строку требований, разделенную знаком '=' - Предварительное условие: - указано - строка или ноль; запрошенный набор параметров - Постусловие: - Таблица последовательности возврата - Использует: - mw.text.split () местный р если указано то местный я , с г = мвт . текст . разделить ( указано , "% s * =% s *" ) для i = # r , 1 , - 1 сделать s = r [ я ] если # s == 0, то table.remove ( г , я ) конец конец - для i, -1 еще г = { } конец вернуть гконец - заполнить () завершение локальной функции ( отправка , параметры , фрейм ) - Завершить сообщение - Предварительное условие: - submit - строка или false или nil; непустое сообщение об ошибке - параметры - таблица или ноль; необязательные детали - options.format - options.preview - options.cat - options.template - кадр - объект, или ложь - Постусловие: - Возвращает строку или ложь - Использует: -- фабрика() местный r = false если отправить, то local opt , s местный ленивый = ложь местное шоу = ложь если type ( options ) == "table", то opt = параметры show = opt . формат ленивый = ( показать == "" или показать == "0" или показать == "-" ) s = опт . предварительный просмотр если type ( s ) == "строка" и s ~ = "" и s ~ = "0" и s ~ = "-", тогда если ленив, то показать = "" ленивый = ложный конец если не кадр, то frame = mw . getCurrentFrame () конец если frame : preprocess ( "{{REVISIONID}}" ) == "", то если s == "1", то показать = "*" еще показать = s конец конец конец еще opt = { } конец если ленив, то если не опт . кот тогда r = string.format ( "% s% s" , отправить , фабрика ( "noMSGnoCAT" ) ) конец еще r = отправить конец если г и не ленив, то местный я если не показать или показать == "*", то show = "<span class = \" error \ " > @@@ </span>" конец i = show : find ( "@@@" , 1 , истина ) если я тогда - Нет gsub (), поскольку r может содержать "% 3" (например, URL) r = string.format ( "% s% s% s" , показать : sub ( 1 , i - 1 ), г , показать : sub ( i + 3 ) ) еще r = показать конец конец s = опт . Кот если type ( s ) == "строка", то если опт . errNS тогда местный ns = mw . название . getCurrentTitle (). пространство имен локальная й = тип ( опт . errNS ) если st == "строка", то local space = string.format ( ". * %% s% d %% s. *" , нс ) локальные пространства = String.Format ( "% s" , опт . errNS ) если пробелы : совпадение ( пробел ), то опт . errNS = ложь конец elseif st == "table" тогда для i = 1 , # опт . ошибки делать если опт . errNS [ i ] == ns, тогда опт . errNS = ложь перерыв - для меня конец конец - для я конец конец если опт . errNS тогда г = "" еще если не г, то г = "" конец если s : find ( "@@@" ), то если тип ( опт . шаблон ) == "строка", то s = s : GSUB ( "@@@" , опт . шаблон ) конец конец местный я местные кошки = mw . текст . split ( s , "% s * #% s *" ) для i = 1 , # кошки делают s = mw . текст . обрезать ( кошки [ i ] ) если # s > 0, то r = string.format ( "% s [[Категория:% s]]" , r , s ) конец конец - для я конец конец конец вернуть гконец - финализировать ()локальный поиск функций ( стог сена , иголка ) - Найдите иголку в последовательности стога сена - Предварительное условие: - стог сена - стол; последовательность ключевых имен, в нижнем регистре, если низкий - игла - любая; ключевое имя - Постусловие: - Вернуть истину, если найден местный я для i = 1 , # стог сена делать если стог сена [ i ] == иголка, то вернуть истину конец конец - для я вернуть ложьконец - искатель () исправление локальной функции ( действительно , долг , получено , опции ) - Выполнить анализ параметров - Предварительное условие: - действительный - таблица; уникальная последовательность известных параметров - дежурный - стол; последовательность обязательных параметров - получил - стол; последовательность текущих параметров - параметры - таблица или ноль; необязательные детали - Постусловие: - Вернуть строку в соответствии с настройками; пусто, если допустимо - Использует: - искатель () -- вина() -- отказ() -- кормили() местный k , v местный r = false для к , v в парах ( есть ) сделать если не искатель ( действительно , k ), то r = неисправность ( r , k ) конец конец - для k, v если г, то r = сбой ( "неизвестно" , string.format ( "'% s'" , r ), варианты ) else - все имена действительны местный я , с для i = 1 , # обязанность делать s = обязанность [ i ] если не накормил ( получил , с ) то r = неисправность ( r , s ) конец конец - для я если г, то r = сбой ( «не определено» , r , параметры ) else - все обязательный подарок для i = 1 , # обязанность делать s = обязанность [ i ] если не получил [ s ] то r = неисправность ( r , s ) конец конец - для я если г, то r = сбой ( "пусто" , r , варианты ) конец конец конец вернуть гконец - исправить ()локальная функциональная квартира ( коллекция , опции ) - Вернуть все элементы таблицы с нижней строкой - Предварительное условие: - коллекция - стол; k = v пар - параметры - таблица или ноль; дополнительные сведения об обмене сообщениями - Постусловие: - Таблица возврата, может быть пуста; или строка с сообщением об ошибке. - Использует: - mw.ustring.lower () -- вина() -- отказ() местный k , v местный r = { } местный е = ложь для к , v в парах ( сборник ) делать если type ( k ) == "строка", то k = mw . ustring . нижний ( k ) если r [ k ], то e = неисправность ( e , k ) конец конец r [ k ] = v конец - для k, v если е, то r = отказ ( "multiSpell" , e , варианты ) конец вернуть гконец - плоский ()локальная функция сворачивания ( опции ) - Объедините две таблицы, создайте новую последовательность, если обе не пусты - Предварительное условие: - варианты - таблица; Детали - options. обязательная последовательность оставить без изменений - options.optional последовательность, которую нужно добавить - options.low в нижнем регистре ожидается - Постусловие: - Вернуть объединенную таблицу или строку сообщения в случае ошибки - Использует: - искатель () -- вина() -- отказ() -- плоский() местный i , e , r , s локальная база = параметры . обязательный локальное расширение = параметры . необязательный если # base == 0, то if # extend == 0 тогда г = { } еще r = продлить конец еще if # extend == 0 тогда r = база еще е = ложь для i = 1 , # продлить do s = продлить [ я ] если искатель ( база , с ), то e = неисправность ( e , s ) конец конец - для я если е, то r = отказ ( "dupOpt" , e , параметры ) еще г = { } для i = 1 , # база do table.insert ( r , base [ i ] ) конец - для я для i = 1 , # продлить do table.insert ( r , расширить [ i ] ) конец - для я конец конец конец если варианты . low и введите ( r ) == "table", затем r = плоский ( r , варианты ) конец вернуть гконец - сложить () форма локальной функции ( свет , опции , рамка ) - Запустить анализ параметров в текущей среде - Предварительное условие: - светлый - правда: включение шаблона; false: #invoke - параметры - таблица или ноль; необязательные детали - опции. обязательные - options.optional - кадр - объект, или ложь - Постусловие: - Возвращаемая строка с сообщением об ошибке, как настроено; - ложь, если действительна - Использует: -- складывать() -- принести() -- исправить() - финализировать () местная пошлина , r если type ( options ) == "table", то если тип ( параметры . обязательный ) ~ = "таблица", то варианты . обязательный = { } конец пошлина = варианты . обязательный если тип ( параметры . необязательно ) ~ = "таблица", то варианты . необязательный = { } конец r = fold ( варианты ) еще options = { } обязанность = { } г = { } конец если type ( r ) == "table", то local got = fetch ( свет , параметры ) если type ( got ) == "table", то r = fix ( r , duty , got , options ) еще r = получил конец конец вернуть finalize ( r , options , frame )конец - форма () формат локальной функции ( анализ , опции ) - Проверить действительность значения - Предварительное условие: - анализировать - строка для анализа - параметры - таблица или ноль; необязательные детали - options.say - options.min - options.max - Постусловие: - Возвращаемая строка с сообщением об ошибке, как настроено; - false, если правильный или ответ не разрешен - Использует: -- достижимый() -- отказ() локальный r = выполнимо ( анализировать , варианты , ложь ) местное шоу если варианты . min, а не r, тогда если type ( options . min ) == "number", то если type ( options . max ) == "number", то если варианты . max < options . мин тогда r = сбой ( "minmax" , string.format ( "% d>% d" , варианты . мин , варианты . макс ), варианты ) конец конец if # анализировать < options . min, а не r, тогда show = "<" .. options . мин если варианты . скажи тогда show = string.format ( "% s '% s'" , показать , параметры . скажем ) конец r = отказ ( "tooShort" , показать , параметры ) конец еще r = ошибка ( «invalidPar» , «min» , параметры ) конец конец если варианты . макс, а не r тогда если type ( options . max ) == "number", то если # анализировать > параметры . макс тогда show = ">" .. options . Максимум если варианты . скажи тогда show = string.format ( "% s '% s'" , показать , параметры . скажем ) конец r = отказ ( "слишком долго" , показать , параметры ) конец еще r = ошибка ( «invalidPar» , «max» , параметры ) конец конец вернуть гконец - формат ()локальная функция отформатирована ( назначение , доступ , опции ) - Проверить достоверность одного конкретного параметра в коллекции - Предварительное условие: - задание - сбор - access - id параметра в коллекции - параметры - таблица или ноль; необязательные детали - Постусловие: - Возвращаемая строка с сообщением об ошибке, как настроено; - false, если правильный или ответ не разрешен - Использует: - mw.text.trim () - формат () -- отказ() местный r = false если тип ( назначение ) == "таблица", то местная история = задание . args [ доступ ] или "" если type ( access ) == "номер", то история = мв . текст . обрезать ( рассказ ) конец если type ( options ) ~ = "table", то options = { } конец варианты . say = доступ r = формат ( история , параметры ) конец вернуть гконец - форматированный ()местная функциональная отделка ( рамка , действие ) - Подготовьте оценку #invoke для .assert () или .valid () - Предварительное условие: - рамка - объект; #invoke environment - действие - «утверждать» или «действителен» - Постусловие: - Возвращаемая строка с сообщением об ошибке или "" - Использует: -- форма() -- отказ() - финализировать () - TemplatePar.valid () - TemplatePar.assert () местные параметры = { обязательный = { "1" }, необязательный = { "2" , "кот" , "errNS" , "низкий" , "макс" , "мин" , "формат" , "превью" , "template" }, template = string.format ( "& # 35; invoke:% s |% s |" , "TemplatePar" , действие ) } local r = form ( ложь , параметры , фрейм ) если не г, то местные с options = { cat = frame . аргументы . кошка , errNS = кадр . аргументы . errNS , низкий = рама . аргументы . низкий , формат = фрейм . аргументы . формат , предварительный просмотр = кадр . аргументы . предварительный просмотр , шаблон = рамка . аргументы . шаблон } options = figure ( frame . args [ 2 ], options ) если type ( frame . args . min ) == "строка", то s = рамка . аргументы . мин : совпадение ( "^% s * ([0-9] +)% s * $" ) если s, то варианты . мин = ToNumber ( ы ) еще r = сбой ( "invalidPar" , "min =" .. кадр . аргументы . мин , варианты ) конец конец если type ( frame . args . max ) == "строка", то s = рамка . аргументы . max : match ( "^% s * ([1-9] [0-9] *)% s * $" ) если s, то варианты . макс = ToNumber ( ы ) еще r = сбой ( "invalidPar" , "max =" .. кадр . аргументы . макс , варианты ) конец конец если г, то r = завершить ( r , параметры , рамка ) еще s = рамка . args [ 1 ] или "" г = ToNumber ( ы ) если ( г ) то s = r конец если действие == "действителен", то r = TemplatePar . действительный ( s , параметры , рамка ) elseif action == "assert" тогда r = TemplatePar . assert ( s , "" , параметры ) конец конец конец вернуть r или ""конец - отделка ()TemplatePar . assert = функция ( анализировать , добавлять , параметры ) - Выполнять анализ параметров одной строки - Предварительное условие: - анализировать - строка для анализа - append - string: добавить сообщение об ошибке с добавлением <br /> - false или nil: вывести ошибку с сообщением - варианты - таблица; необязательные детали - Постусловие: - Возвращаемая строка с сообщением об ошибке, как настроено; - ложь, если действительна - Использует: - формат () локальный r = формат ( анализировать , параметры ) если ( г ) то if ( type ( append ) == "строка" ) то если ( добавить ~ = "" ), то r = string.format ( "% s <br />% s" , добавить , r ) конец еще ошибка ( г , 0 ) конец конец вернуть гконец - TemplatePar.assert ()TemplatePar . check = function ( параметры ) - Запустить анализ параметров в текущей среде шаблона - Предварительное условие: - параметры - таблица или ноль; необязательные детали - опции. обязательные - options.optional - Постусловие: - Возвращаемая строка с сообщением об ошибке, как настроено; - ложь, если действительна - Использует: -- форма() форма возврата ( true , options , false )конец - TemplatePar.check ()TemplatePar . счетчик = функция () - Вернуть количество параметров шаблона - Постусловие: - Возврат числа, начиная с 0 - Использует: - mw.getCurrentFrame () - рамка: getParent () местный k , v местный r = 0 местный t = mw . getCurrentFrame (): getParent () местный o = t . аргументы для к , v в паре ( о ) сделать г = г + 1 конец - для k, v вернуть гконец - TemplatePar.count ()TemplatePar . countNotEmpty = функция () - Возвращает количество параметров шаблона с большим количеством пробелов - Постусловие: - Возврат числа, начиная с 0 - Использует: - mw.getCurrentFrame () - рамка: getParent () местный k , v местный r = 0 местный t = mw . getCurrentFrame (): getParent () местный o = t . аргументы для к , v в паре ( о ) сделать если не v : match ( "^% s * $" ), то г = г + 1 конец конец - для k, v вернуть гконец - TemplatePar.countNotEmpty ()TemplatePar . downcase = функция ( параметры ) - Вернуть все параметры шаблона с именем в нижнем регистре - Предварительное условие: - параметры - таблица или ноль; дополнительные сведения об обмене сообщениями - Постусловие: - Таблица возврата, может быть пуста; или строка с сообщением об ошибке. - Использует: - mw.getCurrentFrame () - рамка: getParent () -- плоский() местный t = mw . getCurrentFrame (): getParent () возврат квартиры ( т . аргументы , варианты )конец - TemplatePar.downcase ()TemplatePar . действительный = функция ( доступ , параметры , фрейм ) - Проверить валидность одного конкретного параметра шаблона - Предварительное условие: - access - id параметра в включении шаблона - строка или число - параметры - таблица или ноль; необязательные детали - рамка - объект; #invoke environment - Постусловие: - Возвращаемая строка с сообщением об ошибке, как настроено; - false, если правильный или ответ не разрешен - Использует: - mw.text.trim () - TemplatePar.downcase () - рамка: getParent () - форматированный () -- отказ() - финализировать () локальный r = тип ( доступ ) если r == "строка", то г = мвт . текст . обрезать ( доступ ) если # r == 0, то г = ложь конец elseif r == "число" тогда r = доступ еще г = ложь конец если г, то местные параметры если type ( options ) ~ = "table", то options = { } конец если варианты . тогда низко params = TemplatePar . вниз ( варианты ) еще params = frame : getParent () конец r = форматированный ( параметры , доступ , параметры ) еще r = отказ ( "без названия" , ложь , параметры ) конец вернуть finalize ( r , options , frame )конец - TemplatePar.valid ()TemplatePar . verify = function ( параметры ) - Выполните анализ параметров #invoke - Предварительное условие: - параметры - таблица или ноль; необязательные детали - Постусловие: - Возвращаемая строка с сообщением об ошибке, как настроено; - ложь, если действительна - Использует: -- форма() форма возврата ( false , options , false )конец - TemplatePar.verify ()- Обеспечить внешний доступместный p = {}функция p . assert ( фрейм ) - Выполнить анализ параметров для какой-то одной строки - Предварительное условие: - рамка - объект; #invoke environment - Постусловие: - Возвращаемая строка с сообщением об ошибке или "" - Использует: - отделка () вернуть отделку ( рамка , "отстаивать" )конец - .assert ()функция p . чек ( рамка ) - Проверить правильность параметров шаблона - Предварительное условие: - рамка - объект; #invoke environment - Постусловие: - Возвращаемая строка с сообщением об ошибке или "" - Использует: -- форма() -- наполнять() local options = { optional = { "все" , "opt" , "кот" , "errNS" , "низкий" , "формат" , "превью" , "template" }, template = "& # 35; invoke: TemplatePar | check |" } local r = form ( ложь , параметры , фрейм ) если не г, то options = { обязательный = заливка ( фрейм . аргументы . все ), необязательный = заливка ( frame . args . opt ), кошка = рамка . аргументы . кошка , errNS = кадр . аргументы . errNS , низкий = рама . аргументы . низкий , формат = фрейм . аргументы . формат , предварительный просмотр = кадр . аргументы . предварительный просмотр , шаблон = рамка . аргументы . шаблон } r = форма ( истина , параметры , рамка ) конец вернуть r или ""конец - .check ()функция p . количество ( кадр ) - Подсчитать количество параметров шаблона - Постусловие: - Возвращает строку с цифрами, включая "0" - Использует: - TemplatePar.count () возврат в строку ( TemplatePar . count () )конец - .count ()функция p . countNotEmpty ( кадр ) - Подсчитать количество параметров шаблона, которые не являются пустыми - Постусловие: - Возвращает строку с цифрами, включая "0" - Использует: - TemplatePar.countNotEmpty () возврат в строку ( TemplatePar . countNotEmpty () )конец - .countNotEmpty ()функция p . матч ( кадр ) - Комбинированный анализ параметров и их значений - Постусловие: - Возвращаемая строка с сообщением об ошибке или "" - Использует: - mw.text.trim () - mw.ustring.lower () -- отказ() -- форма() - TemplatePar.downcase () -- фигура() -- достижимый() -- вина() - финализировать () местный r = false местные параметры = { cat = frame . аргументы . кошка , errNS = кадр . аргументы . errNS , низкий = рама . аргументы . низкий , формат = фрейм . аргументы . формат , предварительный просмотр = кадр . аргументы . предварительный просмотр , шаблон = рамка . аргументы . шаблон } местный k , v , s местные параметры = { } для к , v в парах ( кадр . арг ) делают если type ( k ) == "число", то s , v = v : match ( "^ * ([^ =] +) * = * (% S. *% S *) * $» ) если s, то s = mw . текст . обрезка ( и ) если s == "" тогда s = ложь конец конец если s, то если варианты . тогда низко s = mw . ustring . нижний ( и ) конец если params [ s ], то s = params [ s ] s [ # s + 1 ] = v еще params [ s ] = { v } конец еще r = ошибка ( "invalidPar" , tostring ( k ), параметры ) перерыв - для k, v конец конец конец - для k, v если не г, то s = { } для к , V в паре ( Params ) делает s [ # s + 1 ] = k конец - для k, v варианты . необязательный = s r = форма ( истина , параметры , рамка ) конец если не г, то локальный errMiss , errValues , Отсутствие , правило локальные targs = frame : getParent (). аргументы варианты . необязательный = ноль если варианты . тогда низко targs = TemplatePar . вниз () еще targs = кадр : getParent (). аргументы конец errMiss = ложь errValues = false для к , V в паре ( Params ) делает варианты . скажи = k errValue = false s = targs [ k ] если s, то если s == "" тогда недостаток = правда еще Отсутствие = ложь конец еще s = "" недостаток = правда конец для г , правил в паре ( v ) делать options = цифра ( правило , параметры ) r = выполнимо ( s , варианты , верно ) если г, то если не хватает, то если errMiss, то errMiss = string.format ( "% s, '% s'" , errMiss , k ) еще errMiss = string.format ( "'% s'" , k ) конец ElseIf не errMiss то errValues = ошибка ( errValues , r ) конец перерыв - для r, правило конец конец - для s, правило конец - для k, v r = ( errMiss или errValues ) если г, то если errMiss, то r = отказ ( "неопределено" , errMiss , параметры ) еще r = сбой ( "недопустимый" , errValues , параметры ) конец r = завершить ( r , параметры , рамка ) конец конец вернуть r или ""конец - .match ()функция p . действительный ( фрейм ) - Проверить валидность одного конкретного параметра шаблона - Предварительное условие: - рамка - объект; #invoke environment - Постусловие: - Возвращаемая строка с сообщением об ошибке или "" - Использует: - отделка () возвратная отделка ( рамка , "действительна" )конец - .valid ()функция p . TemplatePar () - Получить доступ к функциям для модулей - Постусловие: - Таблица возврата с функциями return TemplateParконец - .TemplatePar ()вернуть p