Документация по модулю [ просмотреть ] [ изменить ] [ историю ] [ очистить ]
Реализует {{ параметры }}
- Этот модуль реализует [[Шаблон: Параметры]].- [SublimeLinter luacheck-globals: mw]местные ОПРЕДЕЛЕНИЯ = {alt = {code = 'см. WP: ALT -> ' ,dlist = 'текстовая альтернатива картинке; см. [[WP: ALT]] ' },координаты = {code = '' ,dlist = 'используя {{tl | Coord}}' },coords = {code = '' ,dlist = 'используя {{tl | Coord}}' },native_name = {code = 'если более одного, отдельно » ..'using {{Plainlist}} используйте {{lang}} и опустите native_name_lang ->' ,dlist = 'имя на местном языке; если более одного, отдельно » ..'используя {{tl | Plainlist}}, используйте {{tl | lang}} и опустите {{para | native_name_lang}}' },native_name_lang = {code = '' ,dlist = 'языковой двух- или трехбуквенный код ISO' },start_date = {code = '' ,dlist = 'используйте {{tlx | Дата начала | ГГГГ | ММ | ДД | df = y}}' },end_date = {code = '' ,dlist = 'используйте {{tlx | Дата начала | ГГГГ | ММ | ДД | df = y}}' },url = {code = '' ,dlist = 'используя {{tl | URL}}' },website = {code = '' ,dlist = 'используя {{tls | URL | example.com}}' },}местный p = {}local removeDuplicates = require ( 'Модуль: TableTools' ). removeDuplicateslocal yesno = require ( 'Модуль: Да нет' )локальная функция makeInvokeFunction ( funcName ) функция возврата ( фрейм )local getArgs = require ( 'Модуль: аргументы' ). getArgsreturn p [ funcName ] ( getArgs ( frame , { removeBlanks = false }))конецконецлокальная функция extractParams ( страница )локальный источник = mw . название . новый ( страница , 'Шаблон' ): getContent ()локальные параметры = {}для параметра в строке.gmatch ( source , '{{{(.-)% f [} | <>]' ) dotable.insert ( параметры , параметр )конецвернуть removeDuplicates ( параметры )конец карта локальной функции ( таблица , преобразование ) local returnTable = {}для к , v в парах ( TBL ) делаютreturnTable [ k ] = преобразование ( v )конецreturn returnTableконецлокальная функция strMap ( tbl , transform )local returnTable = map ( tbl , преобразовать )Возвращение table.concat ( returnTable )конецфункция p . _check ( аргументы )местный заголовок = аргументы . база или мвт . название . getCurrentTitle (). полный текствернуть string.format ('{{#invoke: Проверить неизвестные параметры | check | unknown =' ..'[[Категория: страницы, использующие% s с неизвестными параметрами]] |% s}}' , заголовок ,table.concat ( extractParams ( арг . база ), '|' ))конецфункция p . _code ( аргументы )local definitions = yesno ( аргументы . определения )local pad = yesno ( аргумент . pad )локальные параметры = extractParams ( арг . база )- Введите параметры, чтобы выровнять знаки равенства по вертикали.если прокладка, тоlocal lengthPerPara = map ( параметры , функция ( параметр )return string.len ( параметр ) end )- Lua не поддерживает <*> printf для указания ширины, по-видимомуlocal fs = string.format ( '%% -% ss' , math.max ( распаковать ( lengthPerPara )))для I , параметр в паре ( параметрах ) делаетпараметры [ i ] = string.format ( fs , параметр )конецконецместный заголовок = аргументы . база или мвт . название . getCurrentTitle (). baseTextreturn string.format ( [[ {{% s % s}} ]] , заголовок , strMap ( параметры ,функция ( и )если определения, тоreturn string.format ( '|% s =% s \ n ' , s ,ОПРЕДЕЛЕНИЯ [ я ] и ОПРЕДЕЛЕНИЯ [ я ]. код или '' )ещевернуть string.format ( '|% s = \ n ' , s )конецконец ))конецфункция p . _flatcode ( аргументы )локальные параметры = extractParams ( арг . база )местный заголовок = аргументы . база или мвт . название . getCurrentTitle (). baseTextreturn string.format ( '{{tlp |% s% s}}' , заголовок , strMap ( параметры ,функция ( и )return string.format ( '|% s {{=}} % s ' , s , s )конец ))конецфункция p . _compare ( аргументы )local Set = require ( 'Модуль: Установить' )локальная функция normaliseParams ( параметры )local paramsNorm = {}- Подготовьте метатаблицу поиска ключей, которая будет содержать оригинал- имена параметров для каждого нормализованного параметра, например- [test] = {TEST, Test}. paramIndex функционирует как Python- defaultdict, где по умолчанию - таблица.локальный paramIndex = setmetatable ({}, { __index = function ( t , k )если не rawget ( t , k ), тоrawset ( t , k , {})конецвернуть rawget ( t , k )конец })для _ , параметр в пар ( параметров ) делатьtable.insert ( paramsNorm ,string.lower ( string.gsub ( параметр , '% A' , '' )))table.insert ( paramIndex [string.lower ( string.gsub ( параметр , '% A' , '' ))], параметр )конецparamsNorm = removeDuplicates ( paramsNorm )- Перегрузить поиск ключа в paramsNorm. Пока [[Module: Set]] будет- оперировать таблицей (то есть нормализованными параметрами- array), доступ к ключу будет осуществляться через метатаблицу paramIndex.setmetatable ( paramsNorm , { __index = paramIndex })return paramsNormконецместное baseParams = extractParams ( арг . база )local otherParams = extractParams ( аргументы . прочее )local baseNormParams = normaliseParams ( Set . valueComplement (otherParams , baseParams ))местный otherNormParams = normaliseParams ( otherParams )return string.format ( [[Идентично:% sПохожий:% sНесопоставимые:% s]] ,strMap ( Set . valueIntersection ( baseParams , otherParams ),function ( v ) return string.format ( '*% s \ n ' , v ) end ),strMap ( Set . valueIntersection ( baseNormParams , otherNormParams ),функция ( v ) return string.format ( '*% s <% s [% s] \ n ' ,table.concat ( baseNormParams [ V ], ';' ),table.concat ( otherNormParams [ V ], ';' ),v )конец ),strMap ( Set . valueComplement ( otherNormParams , baseNormParams ),функция ( v ) return strMap ( baseNormParams [ v ],функция ( ы ) return string.format ( '*% s \ n ' , s ) end )конец ))конецфункция p . _demo ( аргументы )местный заголовок = аргументы . base и ( '| _template =' .. args . base ) или ''return string.format ( '{{Пример имен параметров% s |% s}}' , заголовок ,table.concat ( extractParams ( арг . база ), '|' ))конецфункция p . _dlist ( аргументы )локальные определения = YESNO ( арг . Определения , истинные )local defFormat = '; % s:% s \ n 'локальный nonDefFormat = '; % s: \ n 'если аргументы . _para тогдаdefFormat = '; {{para |% s}}:% s \ n 'nonDefFormat = '; {{para |% s}}: \ n 'конецВозвращение strMap ( extractParams ( арг . база ),функция ( и )если определения, товернуть string.format ( defFormat , s ,ОПРЕДЕЛЕНИЯ [ я ] и ОПРЕДЕЛЕНИЯ [ я ]. dlist или '' )ещевернуть string.format ( nonDefFormat , s )конецконец )конецфункция p . _dlistpara ( аргументы )аргументы . _para = истинавозврат п . _dlist ( аргументы )конецфункция p . _list ( аргументы )Возвращение strMap ( extractParams ( арг . база ),функция ( ы ) return string.format ( '*% s \ n ' , s ) end )конецстр . check = makeInvokeFunction ( '_check' )стр . код = makeInvokeFunction ( '_code' )стр . плоский код = makeInvokeFunction ( '_flatcode' )стр . compare = makeInvokeFunction ( '_compare' )стр . demo = makeInvokeFunction ( '_demo' )стр . dlist = makeInvokeFunction ( '_dlist' )стр . dlistpara = makeInvokeFunction ( '_dlistpara' )стр . список = makeInvokeFunction ( '_list' )вернуть p