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

В англоязычной Википедии этот модуль вызывается , см. Документацию по этому шаблону для инструкций по использованию.{{Maplink}}

Применение

Стандартное использование
Просто используйте {{ Maplink }}, который передает свои параметры в основную функцию этого модуля .
Из другого модуля
  1. Импортируйте этот модуль, например local mf = require('Module:Mapframe')
  2. Передайте таблицу имен / значений параметров функции _main . См. Документацию {{ Maplink }} для получения информации об именах и описаниях параметров. Напримерlocal mapframe = mf._main(parameters)
  3. Предварительно обработайте вывод _main перед его возвратом, напримерreturn frame:preprocess(mapframe)

Настроить на другой вики

  1. Создайте шаблон и модуль:
    • Импортируйте этот модуль и его шаблон в эту вики (или скопируйте код, указав авторство в сводке редактирования). При желании дайте им имя, которое имеет смысл на языке этой вики.
    • В Викиданных добавьте их к элементам Q52554979 и Q27882107.
  2. Локализуйте модуль
    • Отредактируйте верхние биты модуля между комментариями -- ##### Localisation (L10n) settings #####и -- #### End of L10n settings ####, заменив значения между " "символами локальными значениями (при необходимости)
  3. Добавить документацию
    • в шаблон (например, путем перевода Template: Maplink / doc , корректировки по мере необходимости в соответствии с любыми локализациями, сделанными на предыдущем шаге)
    • в модуль (пожалуйста, переведите / переведите эти инструкции, чтобы википедия, читающая вашу вики, но не английскую Википедию, также могла установить модуль и шаблон на другой вики).

- Примечание. Первоначально написано в английской Википедии по адресу https://en.wikipedia.org/wiki/Module:Mapframe.- [[---------------------------------------------- ------------------------------ ##### Настройки локализации (L10n) ##### Замените значения в кавычках ("") локализованными значениями-------------------------------------------------- --------------------------]] -местный  L10n  =  {}- Modue зависимостилокальный  трансклюдер  - локальная копия https://www.mediawiki.org/wiki/Module:Transcluder загружается лениво- "Module: No globals" не следует использовать, по крайней мере, до тех пор, пока все другие модули, которым требуется этот модуль, не будут использовать глобальные объекты.- Имена параметров шаблона (только для ненумерованных версий)- Укажите каждую в виде отдельной строки или таблицы строк (псевдонимов)- Псевдонимы проверяются слева направо, т.е. `{" one "," two "}` эквивалентно использованию `{{{one | {{{two |}}}}}} `в шаблонеL10n . para  =  {display =  "дисплей" ,type =  "тип" ,id  =  {  "id" ,  "ids"  },from =  "из" ,raw =  "сырой" ,title =  "название" ,description =  "description" ,strokeColor  =  {  "цвет обводки" ,  "цвет обводки"  },strokeWidth =  "ширина обводки" ,strokeOpacity  =  "непрозрачность обводки" ,fill  =  "заливка" ,fillOpacity  =  "непрозрачность заливки" ,Coord =  "координата" ,marker =  "маркер" ,markerColor =  {  "цвет-маркера" ,  "цвет-маркера"  },markerSize  =  "размер маркера" ,radius  =  {  "radius" ,  "radius_m"  },radiusKm  =  "radius_km" ,radiusFt  =  "radius_ft" ,radiusMi  =  "radius_mi" ,Edge  =  "края" ,text =  "текст" ,icon =  "значок" ,zoom =  "масштабирование" ,frame =  "кадр" ,равнина =  "равнина" ,frameWidth =  "ширина кадра" ,frameHeight =  "высота кадра" ,frameCoordinates  =  {  "координаты кадра" ,  "  координаты кадра" },frameLatitude  =  {  " широта кадра" ,  "широта кадра"  },frameLongitude  =  {  "frame-long" ,  "frame-longitude"  },frameAlign  =  "выравнивание кадра" ,switch  =  "переключатель" ,overlay  =  "наложение" ,overlayBorder  =  "граница наложения" ,overlayHorizontalAlignment  =  "выравнивание по горизонтали наложения" ,overlayVerticalAlignment  =  "вертикальное выравнивание оверлея" ,overlayHorizontalOffset  =  "смещение по горизонтали наложения" ,overlayVerticalOffset  =  "вертикальное смещение наложения"}- Имена других шаблонов, из которых этот модуль может извлекать координатыL10n . template  =  {Координаты  =  {  - шаблон координат, а также шаблоны с выходными данными, содержащими {{координаты}}«Координаты» ,  «Координаты / песочница» ,«Строка NRHP» ,  «Строка / песочница NRHP» ,"WikidataCoord" ,  "WikidataCoord / sandbox" ,  "WikidataCoord" ,  "Wikidata corrective"}}-- Сообщения об ошибкахL10n . error  =  {badDisplayPara  =  «Недопустимый параметр отображения» ,noCoords  =  "Координаты должны быть указаны в Викиданных или в |"  ..  (  введите ( L10n . пара . координаты ) ==  'таблица'  и  L10n . para . координаты [ 1 ]  или  L10n . пара . координаты  )  ..  "=" ,wikidataCoords  =  "Координаты не найдены в Викиданных" ,noCircleCoords  =  "Координаты центра круга должны быть указаны или доступны через Викиданные" ,<name> negativeRadius>  =  "Радиус круга должен быть положительным числом" ,noRadius  =  "Необходимо указать радиус окружности" ,<negativeEdges>  =  "Края круга должны быть положительным числом" ,noSwitchPara  =  "Найдено только одно значение переключателя в |"  ..  (  тип ( L10n . Пункт . Переключатель ) ==  'стол'  и  L10n . Пункт . Переключатель [ 1 ]  или  L10n . Пункт . Переключатель  )  ..  "=" ,oneSwitchLabel  =  "Найден только один ярлык в |"  ..  (  тип ( L10n . Пункт . Переключатель ) ==  'стол'  и  L10n . Пункт . Переключатель [ 1 ]  или  L10n . Пункт . Переключатель  )  ..  "=" ,noSwitchLists  =  "По крайней мере, один параметр должен иметь SWITCH: list" ,switchMismatches  =  "Все SWITCH: списки должны иметь одинаковое количество значений" , - Жетоны «% s» и «% d» будут заменены строками и числами при использованииoneSwitchValue  =  "Найдено только одно значение переключателя в |% s =" ,lesserSwitchLabels  =  "Найдено% d значений переключателя, но только% d меток в |"  ..  (  тип ( L10n . Пункт . Переключатель ) ==  'стол'  и  L10n . Пункт . Переключатель [ 1 ]  или  L10n . Пункт . Переключатель  )  ..  "=" ,noNamedCoords  =  "В% s не найдены именованные координаты"}- Прочие струныL10n . str  =  {- допустимые значения для параметра отображения, например (| display = inline) или (| display = title) или (| display = inline, title) или (| display = title, inline)inline =  "встроенный" ,title =  "название" ,dsep =  "," , - разделитель между строкой и заголовком (запятая в примере выше)- допустимые значения для параметра типаline =  "line" , - геолинии (например, дорога)shape =  "shape" , - объект геоформ (например, штат или провинция)shapeInverse =  "shape-inverse" , - объект геомаски (обратный геофигуре)data =  "data" , - страница данных geoJSON в Commonspoint =  "point" , - одноточечный объект (координаты)circle  =  "circle" ,  - круговая область вокруг точкиnamed  =  "named" ,  - все названные координаты в статье или разделе- Ключевое слово для обозначения списка переключателей. НЕ ДОЛЖНЫ использовать специальные символы ^ $ ()%. [] * + -?переключатель  =  "ПЕРЕКЛЮЧАТЕЛЬ" ,- допустимые значения для параметров значка, рамки и простогоaffirmedWords  =  '' .. table.concat ({"добавить" ,"добавлено" ,"подтвердить" ,"подтверждено" ,"включить" ,"включен" ,"на" ,"правда" ,"да" ,"у"},  '' ) .. '' ,decinedWords  =  '' .. table.concat ({"упадок" ,"отклонено" ,"исключить" ,"исключено" ,"ложь" ,"нет" ,"не" ,"нет" ,"п" ,"выкл" ,"опустить" ,"опущено" ,"удалить" ,"удаленный"},  '' ) .. ''}- Значения по умолчанию для параметровL10n . defaults  =  {дисплей =  L10n . ул . встроенный ,text =  "Карта" ,frameWidth =  "300" ,frameHeight =  "200" ,frameAlign  =  "право" ,markerColor =  "5E74F3" ,markerSize =  ноль ,strokeColor =  "# ff0000" ,strokeWidth =  6 ,Edge  =  32 ,  - количество ребер, используемых для аппроксимации кругаoverlayBorder  =  "сплошной белый 1px" ,overlayHorizontalAlignment  =  "право" ,overlayHorizontalOffset  =  "0" ,overlayVerticalAlignment  =  "дно" ,overlayVerticalOffset  =  "0"}- #### Конец настроек L10n ####- [[---------------------------------------------- ------------------------------ Полезные методы-------------------------------------------------- --------------------------]] -local  util  =  {}- [[Ищет значение параметра на основе идентификатора (ключ из таблицы L10n.para) инеобязательно суффикс для параметров, которые могут иметь суффикс (например, type2 - это типс суффиксом 2).@param {table} args пары "ключ-значение" с именами параметров и их значениями@param {строка} param_id id для имени параметра (ключ из таблицы L10n.para)@param {строка} [суффикс] суффикс для имени параметра@returns {string | nil} значение параметра, если найдено, или nil, если не найдено]] -функция  утилит . getParameterValue ( аргументы ,  param_id ,  суффикс )суффикс  =  суффикс  или  ''если  type (  L10n . para [ param_id ]  )  ~ =  'table',  товернуть  аргументы [ L10n . para [ param_id ] .. суффикс ]конецдля  _i ,  paramAlias  в  ipairs ( L10n . para [ param_id ])  сделатьесли  args [ paramAlias .. суффикс ],  товернуть  аргументы [ paramAlias .. суффикс ]конецконецвернуть  нольконец- [[Обрезать пробелы в аргументах и ​​удалить пустые аргументы. Также исправьте управляющие символы.@param {таблица} argsTable@returns {table} обрезанная таблица аргументов]] -функция  утилит . trimArgs ( argsTable )local  cleanArgs  =  {}для  ключа ,  вал  в  паре ( argsTable )  делатьесли  type ( val )  ==  'string',  тоval  =  val : match ( '^% s * (.-)% s * $' )если  val  ~ =  ''  то- управляющие символы внутри json должны быть экранированы, но удалить их проще- См. Также T214984- Однако * не * удаляйте управляющие символы из викитекста, иначе вы сломаете маркеры полосы.cleanArgs [ ключ ]  =  ( не  Util . matchesParam ( 'текст' ,  ключ ))  и  вал : GSUB ( '% с' , '' )  или  ValконецещеcleanArgs [ ключ ]  =  valконецконецвернуть  cleanArgsконец- [[Проверьте, соответствует ли имя параметра нелокализованному ключу параметра@param {строка} ключ - нелокализованное имя параметра для поиска@param {строка} name - локализованное имя параметра для проверки@param {string | nil} - необязательный суффикс, применяемый к значениям из ключа локализации.@returns {boolean} истина, если имя соответствует параметру, иначе ложь]] -функция  утилит . matchParam ( ключ ,  имя ,  суффикс )локальный  параметр  =  L10n . пара [ ключ ]суффикс  =  суффикс  или  ''если  type ( param )  ==  'table',  тодля  _ ,  v  в  парах ( пары )  делатьесли  ( v  ..  суффикс )  ==  имя,  то  верните  истину  конецконецвернуть  ложьконецreturn  (( параметр  ..  суффикс )  ==  имя )конец- [[Проверить, подтверждено ли значение (одно из значений в L10n.str.affirmedWords)@param {строка} val Проверяемое значение@returns {boolean} истина, если подтверждена, иначе ложь]] -функция  утилит . isAffirmed ( val )если  не ( вал ) ,  то  вернуть  ложный  конецвернуться  string.find ( l10n . ул . affirmedWords ,  '' .. Вэл .. '' ,  1 ,  истинный  )  и  истинный  или  ЛОЖЬконец- [[Проверить, отклонено ли значение (одно из значений в L10n.str.declinedWords)@param {строка} val Проверяемое значение@returns {boolean} true, если отклонено, иначе false]] -функция  утилит . isDeclined ( val )если  не ( вал ) ,  то  вернуть  ложный  конецвернуться  string.find ( l10n . ул . declinedWords  ,  '' .. Вэл .. '' ,  1 ,  истинный  )  и  истинный  или  ЛОЖЬконец- [[Проверить, соответствует ли имя шаблона известным шаблонам координат или оболочкам(в L10n.template.coord). При проверке имя нормализуется, поэтому, например, именаВсе "Coord", "Coord" и "Coord" возвращают значение true.@param {строка} имя@returns {boolean} истина, если это шаблон или оболочка координат, иначе ложь]] -функция  утилит . isCoordTemplateOrWrapper ( имя )имя  =  мв . текст . обрезать ( имя )локальный  inputTitle  =  mw . название . новый ( имя ,  'Шаблон' )если  не  inputTitle,  товернуть  ложьконец- Создание (или повторное использование) объектов mw.title для каждого известного шаблона / оболочки координат.- Сохраняются в L10n.template.title, поэтому их не нужно воссоздавать- каждый раз, когда эта функция вызываетсяесли  не  L10n . шаблон . названия  тогдаL10n . шаблон . title  =  {}для  _ ,  v  в  парах ( L10n . шаблон . коорд )  делатьtable.insert ( L10n . шаблон . заголовки ,  mw . title . new ( v ,  'Шаблон' ))конецконецдля  _ ,  templateTitle  в  парах ( L10n . шаблон . названий )  делатьесли  мв . название . равно ( inputTitle ,  templateTitle ),  затемвернуть  истинуконецконецвернуть  ложьконец- [[Рекурсивно извлекайте шаблоны координат, у которых есть параметр имени.@param {строка} вики-текст@returns {table} последовательность таблиц шаблонов координат]] -функция  утилит . extractCoordTemplates ( викитекст )локальный  выход  =  {}локальные  шаблоны  =  mw . ustring . gmatch ( wikitext ,  '{% b {}}' )локальные  подшаблоны  =  {}для  шаблона  в  шаблонах  делаемлокальное  templateName  =  mw . ustring . совпадение ( шаблон ,  '{{([^} |] +)' )локальное  имяParam  =  mw . ustring . совпадение ( шаблон ,  "|% s * имя% s * =% s * [^} |] +" )если  утилит . isCoordTemplateOrWrapper ( templateName ),  затемесли  nameParam,  то  table.insert ( output ,  template )  endelseif  mw . ustring . find ( mw . ustring . sub ( template ,  2 ),  "{{" ),  затемлокальная  subOutput  =  Util . extractCoordTemplates ( mw . ustring . sub ( шаблон ,  2 ))для  _ ,  т  в  парах ( subOutput )  делатьtable.insert ( вывод ,  t )конецконецконец- убедитесь, что в координатах не используется отображение заголовкадля  к ,  v  в  парах ( выход )  делаютвыход [ k ]  =  mw . ustring . gsub ( v ,  "|% s * display% s * = [^ |}] +" ,  "| display = inline" )конецвозвратный  выводконец- [[Получает все именованные координаты со страницы или раздела страницы.@param {string | nil} page Имя страницы или name # section, чтобы получить именованные координаты из. Если имя не указано, то есть #section или nil или пустая строка, тогда будет использоваться текущая страница.@ возвращает {таблицу} последовательность таблиц {координаты, название, описание}, где координаты координаты в формате, подходящем для # util.parseCoords, имя - строка, а описание - строка (координаты в формате, подходящем для отображения читателю). Если по какой-то причине имя не может быть найдено, описание равно нулю, а имя содержит координаты формата отображения.@throws {L10n.error.noNamedCoords}, если именованные координаты не найдены.]] -функция  утилит . getNamedCoords ( страница )если  transcluder  ==  nil,  то- лениво загружать [[Module: Transcluder]], поэтому он включается только на страницах,- фактически использовать именованные координатыtranscluder  =  require ( "Модуль: Transcluder" )конецместные  части  =  mw . текст . разделить ( страница  или  "" ,  "#" ,  истина )local  name  =  parts [ 1 ]  ==  ""  и  mw . название . getCurrentTitle (). prefixedText  или  части [ 1 ]локальный  раздел  =  части [ 2 ]локальная  pageWikitext  =  transcluder . получить ( раздел  и  имя .. "#" .. раздел  или  имя )местное  coordTemplates  =  Util . extractCoordTemplates ( pageWikitext )если  # correTemplates  ==  0,  то  ошибка ( string.format ( L10n . error . noNamedCoords ,  page  или  name ),  0 )  endлокальный  кадр  =  mw . getCurrentFrame ()local  sep  =  "________"локальная  expandedContent  =  кадр : предобработки ( table.concat ( coordTemplates ,  сентябрь ))локальные  расширенные  шаблоны =  mw . текст . сплит ( расширенное содержимое ,  сеп )местный  namedCoords  =  {}для  _ ,  расширенный шаблон  в  парах ( расширенные шаблоны )  сделатьместная  координата  =  mw . ustring . совпадение ( расширенный шаблон ,  "<span class = \" geo% -dec \ " .-> (.-) </span>" )если  скоординировано  томестное  имя  =  (- имя, указанное шаблоном оболочки, например [[Article | Name]]мв . ustring . совпадение ( расширенный шаблон ,  "<span class = \" mapframe% -coord% -name \ " > (.-) </span>" )  или- имя передано в шаблон координатмв . ustring . совпадение ( расширенный шаблон ,  "<span class = \" fn org \ " > (.-) </span>" )  или- по умолчанию координаты, если имя не может быть полученосогласовывать)местное  описание  =  имя  ~ =  координаты  и  координатыместная  координата  =  mw . ustring . gsub ( координаты ,  «[°]» ,  «_» )table.insert ( namedCoords ,  { Coord = координаты ,  name = name ,  description = description })конецконецif  # namedCoords  ==  0,  то  ошибка ( string.format ( L10n . error . noNamedCoords ,  page  или  name ),  0 )  endвернуть  namedCoordsконец- [[Анализируйте значения координат из параметров, переданных в URL-адресе GeoHack (например,//tools.wmflabs.org/geohack/geohack.php?pagename=Example¶ms=1_2_N_3_4_W_ или//tools.wmflabs.org/geohack/geohack.php?pagename=Example¶ms=1.23_S_4.56_E_)или строка без URL в том же формате (например, `1_2_N_3_4_W_` или` 1.23_S_4.56_E_`)@param {строка} coords строка, содержащая координаты@returns {number, number} широта, долгота]] -функция  утилит . parseCoords ( координаты )местные  координатыесли  мв . ustring . find ( coords ,  "params =" ,  1 ,  true )  затем- предотвратить ложные совпадения из имени страницы, например? pagename = Lorem_S._IpsumcoordsPatt  =  'params = ([_%.% d] + [NS] [_%.% d] + [EW]) »еще- на самом деле это не адрес геохака, просто тот же форматcoordsPatt  =  '[_%.% d] + [NS] [_%.% d] + [EW]'конецместные  части  =  mw . текст . split (( mw . ustring . match ( coords ,  coordsPatt )  или  '' ),  '_' )локальная  lat_d  =  ToNumber ( части [ 1 ])local  lat_m  =  tonumber ( parts [ 2 ])  - ноль, если координаты в десятичном форматеlocal  lat_s  =  lat_m  and  tonumber ( parts [ 3 ])  - ноль, если координаты либо в десятичном формате, либо только в градусах и минутахместный  lat  =  lat_d  +  ( lat_m  или  0 ) / 60  +  ( lat_s  или  0 ) / 3600если  части [ # parts / 2 ]  ==  'S',  тоширота  =  широта  *  - 1конецлокальная  long_d  =  ToNumber ( части [ 1 + # части / 2 ])local  long_m  =  tonumber ( parts [ 2 + # parts / 2 ])  - ноль, если координаты в десятичном форматеlocal  long_s  =  long_m  и  tonumber ( parts [ 3 + # parts / 2 ])  - ноль, если координаты либо в десятичном формате, либо только в градусах и минутахлокальный  long  =  long_d  +  ( long_m  или  0 ) / 60  +  ( long_s  или  0 ) / 3600если  parts [ # parts ]  ==  'W',  тодлинный  =  длинный  *  - 1конецвернуть  широту ,  долготуконец- [[Получить координаты из элемента Викиданных@param {строка} item_id Идентификатор элемента Викиданных (число Q)@returns {number, number} широта, долгота@throws {L10n.error.noCoords}, если item_id недействителен или элемент не существует@throws {L10n.error.wikidataCoords}, если элемент не имеет P625 оператор (координаты), либо ему присвоено значение «нет значения»]] -функция  утилит . wikidataCoords ( item_id )если  нет  ( item_id  и  mw . wikibase . isValidEntityId ( item_id )  и  mw . wikibase . entityExists ( item_id )),  тоошибка ( L10n . error . noCoords ,  0 )конецместные  координаты  =  mw . викибаза . getBestStatements ( идентификатор_элемента ,  'P625' )если  не  coordStatements  или  # coordStatements  ==  0 ,  тоошибка ( L10n . error . wikidataCoords ,  0 )конецlocal  hasNoValue  =  (  CoordStatements [ 1 ]. mainsnak  и  ( CoordStatements [ 1 ]. mainsnak . snaktype  ==  'novalue'  или  CoordStatements [ 1 ]. mainsnak . snaktype  ==  'somevalue' )  )если  hasNoValue,  тоошибка ( L10n . error . wikidataCoords ,  0 )конецlocal  wdCoords  =  CoordStatements [ 1 ] [ 'mainsnak' ] [ 'значение данных' ] [ 'значение' ]Возвращение  ToNumber ( wdCoords [ 'широта' ]),  ToNumber ( wdCoords [ 'долгота' ])конец- [[Создает многоугольник, напоминающий круг@param {number} широта, широта@param {number} долгота Долгота@param {number} radius Радиус в метрах@param {number} n Количество ребер многоугольника@returns {table} последовательность таблиц {широта, долгота}, где широта и долгота - это числа]] -функция  утилит . circleToPolygon ( lat ,  long ,  radius ,  n )  - n - количество ребер- На основе https://github.com/gabzim/circle-to-polygon, лицензия ISCлокальная  функция  смещения ( CLAT ,  CLON ,  расстояние ,  подшипник )местный  lat1  =  math.rad ( cLat )локальный  lon1  =  math.rad ( cLon )local  dByR  =  distance  /  6378137  - расстояние, деленное на 6378137 (радиус земли) wgs84местный  лат  =  math.asin (math.sin ( lat1 )  *  math.cos ( dByR )  +math.cos ( lat1 )  *  math.sin ( dByR )  *  math.cos ( пеленг ))локальный  lon  =  lon1  +  math.atan2 (math.sin ( подшипник )  *  math.sin ( dByR )  *  math.cos ( lat1 ),math.cos ( dByR )  -  math.sin ( лат1 )  *  math.sin ( лат ))Возвращение  { math.deg ( долгота ),  math.deg ( лат )}конецместные  координаты  =  {};локальный  i  =  0 ;пока  я  <  п  делаюtable.insert ( координаты ,Смещение ( лат ,  длинные ,  радиус ,  ( 2 * math.pi * я * - 1 ) / п ))я  =  я  +  1конецtable.insert ( координаты ,  смещение ( латы ,  длинный ,  радиус ,  0 ))вернуть  координатыконец- [[Получите количество пар ключ-значение в таблице, которое может не быть последовательностью.@param {table} т@returns {number} количество пар "ключ-значение"]] -функция  утилит . tableCount ( т )местный  счетчик  =  0для  k ,  v  в  парах ( t )  делаемcount  =  count  +  1конец счетчик возвратаконец- [[Для таблицы, в которой значениями являются все таблицы, возвращает либо util.tableCountвложенных таблиц, если они все одинаковы, или ноль, если они не все одинаковы.@param {table} т@returns {number | nil} количество пар ключ-значение подтаблицы или ноль, если подтаблицы иметь разные подсчеты]] -функция  утилит . subTablesCount ( t )местный  счетчик  =  нольдля  k ,  v  в  парах ( t )  делаемесли  count  ==  nil,  тоcount  =  util . tableCount ( v )elseif  count  ~ =  util . tableCount ( v ),  затемвернуть  нольконецконец счетчик возвратаконец- [[Разбивает список на последовательность таблиц. Элементы в списке могут быть разделенызапятыми, или точкой с запятой (если элементы могут содержать запятые), или "###" (если элементыможет содержать точки с запятой).@param {строка} listString@returns {table} последовательность элементов списка]] -функция  утилит . tableFromList ( listString )если  type ( listString )  ~ =  "string"  или  listString  ==  "",  то  вернуть  nil  endлокальный  разделитель  =  ( mw . ustring . find ( listString ,  "###" ,  0 ,  true  )  и  "###" )  или( mw . ustring . find ( listString ,  ";" ,  0 ,  true  )  и  ";" )  или  ","локальный  шаблон  =  "% s *" .. разделитель .. "% s *"вернуть  мв . текст . split ( listString ,  шаблон )конец- Логическое значение во внешней области видимости, указывающее, должен ли Картограф иметь возможность- автоматически рассчитывать координаты (см. phab: T227402)local  coordsDerivedFromFeatures  =  false ;- [[---------------------------------------------- ------------------------------ Методы Make: они принимают таблицу аргументов и возвращают либо строку или таблица, которая будет использоваться в конечном результате.-------------------------------------------------- --------------------------]] -local  make  =  {}- [[Заставляет контент помещаться внутри тега maplink или mapframe.@param {таблица} аргументы@returns {string} содержание тега]] -функция  сделать . контент ( аргументы )если  утилит . getParameterValue ( args ,  'raw' ),  затемcoordsDerivedFromFeatures  =  true  - Картограф должен иметь возможность автоматически вычислять координаты из необработанного geoJSONвернуть  утилит . getParameterValue ( аргументы ,  'сырые' )конецместное  содержание  =  {} local  argsExpanded  =  {} для  k ,  v  в  парах ( args )  делаемлокальный  индекс  =  string.match (  k ,  '^ [^ 0-9] + ([0-9] *) $'  )если  index  ~ =  nil,  томестный  indexNumber  =  ''если  index  ~ =  '',  тоindexNumber  =  ToNumber ( индекс )ещеindexNumber  =  1конецесли  argsExpanded [ indexNumber ]  ==  nil,  тогдаargsExpanded [ indexNumber ]  =  {}конецargsExpanded [ indexNumber ] [  string.gsub ( k ,  index ,  '' )  ]  =  vконец конецдля  contentIndex ,  contentArgs  в  парах ( argsExpanded )  делаетlocal  argType  =  util . getParameterValue ( contentArgs ,  «тип» )- Картограф автоматически вычисляет координаты, если используются геолинии / формы (T227402)если  не  coordsDerivedFromFeatures,  тоcoordsDerivedFromFeatures  =  (  argType  ==  L10n . str . line  или  argType  ==  L10n . str . shape  )  и  true  или  falseконецесли  argType  ==  L10n . ул . названный  тогдалокальный  namedCoords  =  util . getNamedCoords ( Util . getParameterValue ( contentArgs ,  "от" ))local  typeKey  =  type ( L10n . para . type )  ==  "таблица"  и  L10n . пункт . типа [ 1 ]  или  L10n . пункт . типместная  координатаKey  =  тип ( L10n . параграф . координата )  ==  "таблица"  и  L10n . пункт . координаты [ 1 ]  или  L10n . пункт . согласовыватьlocal  titleKey  =  type ( L10n . para . title )  ==  "таблица"  и  L10n . пункт . title [ 1 ]  или  L10n . пункт . заглавиеlocal  descKey  =  type ( L10n . para . description )  ==  "table"  и  L10n . пункт . описание [ 1 ]  или  L10n . пункт . описаниедля  _ ,  namedCoord  в  парах ( namedCoords )  docontentArgs [ typeKey ]  =  "точка"contentArgs [ CoordKey ]  =  namedCoord . согласовыватьcontentArgs [ titleKey ]  =  namedCoord . названиеcontentArgs [ descKey ]  =  namedCoord . описаниеконтент [ # content + 1 ]  =  make . contentJson ( contentArgs )конецещеконтент [ # content  +  1 ]  =  make . contentJson ( contentArgs )конецконец--Один элемент, массив не требуетсяесли  # content == 1,  то  вернуть  контент [ 1 ]  end- Несколько элементов помещаются в коллекцию FeatureCollectionlocal  contentArray  =  '[ \ n '  ..  table.concat (  content ,  ', \ n ' )  ..  ' \ n ]'вернуть  contentArrayконец- [[Сделайте координаты из аргумента координаты или аргумента идентификатора или текущей страницыЭлемент Викиданных.@param {таблица} аргументы@param {логический} [plainOutput]@returns {Mixed} Либо: {число, число} широта, долгота, если plainOutput истинно; или же {table} последовательность таблицы долготы, затем широты (дает требуемый формат для GeoJSON при кодировании)]] -функция  сделать . координаты ( аргументы ,  plainOutput )местные  Coords ,  латы ,  длинныелокальный  кадр  =  mw . getCurrentFrame ()если  утилит . getParameterValue ( аргументы ,  'координата' ),  затемCoords  =  кадр : предобработки (  Util . getParameterValue ( арг ,  'коорд' )  )лат ,  длинный  =  Util . parseCoords ( координаты )ещелат ,  длинный  =  Util . wikidataCoords ( Util . getParameterValue ( арг ,  'ID' )  или  MW . wikibase . getEntityIdForCurrentPage ())конецесли  plainOutput,  товернуть  широту ,  долготуконецreturn  {[ 0 ]  =  long ,  [ 1 ]  =  lat }конец- [[Создает таблицу координат, которая приближается к окружности.@param {таблица} аргументы@returns {table} последовательность таблиц {широта, долгота}, где широта и долгота - это числа@throws {L10n.error.noCircleCoords}, если координаты центра не указаны@throws {L10n.error.noRadius}, если радиус не указан@throws {L10n.error.negativeRadius}, если радиус отрицательный или равен нулю@throws {L10n.error.negativeEdges}, если края отрицательные или нулевые]] -функция  сделать . circleCoords ( аргументы )местный  лат ,  долгий  =  сделать . координаты ( аргументы ,  истина )локальный  радиус  =  утилит . getParameterValue ( аргументы ,  'радиус' )если  не  радиус,  торадиус  =  утилит . getParameterValue ( args ,  'radiusKm' )  и  tonumber ( util . getParameterValue ( args ,  'radiusKm' )) * 1000если  не  радиус,  торадиус  =  утилит . getParameterValue ( args ,  'radiusMi' )  и  tonumber ( util . getParameterValue ( args ,  'radiusMi' )) * 1609.344если  не  радиус,  торадиус  =  утилит . getParameterValue ( args ,  'radiusFt' )  и  tonumber ( util . getParameterValue ( args ,  'radiusFt' )) * 0,3048конецконецконецлокальные  ребра  =  утилит . getParameterValue ( аргументы ,  'края' )  или  L10n . по умолчанию . краяесли  не  широта  или  не  долго,  тоошибка ( L10n . error . noCircleCoords ,  0 )иначе, если  не  радиус,  тоошибка ( L10n . error . noRadius ,  0 )ElseIf  ToNumber ( радиус )  <=  0 ,  тоошибка ( L10n . error . negativeRadius ,  0 )ElseIf  ToNumber ( ребра )  <=  0 ,  тоошибка ( L10n . error . negativeEdges ,  0 )конецвернуть  утилит . circleToPolygon ( лат ,  длинные ,  радиус ,  ToNumber ( ребра ))конец- [[Создает данные JSON для функции@param contentArgs аргументы для этой функции. Ключи должны быть версией без суффикса. имен параметров, т.е. используйте тип, обводку, заливку, ... вместо type3, stroke3, fill3, ...@returns {string} данные в кодировке JSON]] -функция  сделать . contentJson ( contentArgs )локальные  данные  =  {}если  утилит . getParameterValue ( contentArgs ,  'тип' )  ==  L10n . ул . точка  или  утилит . getParameterValue ( contentArgs ,  'тип' )  ==  L10n . ул . круг  тогдаlocal  isCircle  =  util . getParameterValue ( contentArgs ,  'тип' )  ==  L10n . ул . кругданные . type  =  "Feature"данные . geometry  =  {type  =  isCircle  и  "LineString"  или  "Point" ,координаты  =  isCircle  и  сделать . circleCoords ( contentArgs )  или  make . координаты ( contentArgs )}данные . properties  =  {title  =  util . getParameterValue ( contentArgs ,  'title' )  или  mw . getCurrentFrame (): getParent (): getTitle ()}если  isCircle,  то- ЗАДАЧА: это очень похоже на то, что показано ниже, должно быть извлечено в функциюданные . свойства . ход  =  утилит . getParameterValue ( contentArgs ,  'strokeColor' )  или  L10n . по умолчанию . strokeColorданные . properties [ "stroke-width" ]  =  tonumber ( util . getParameterValue ( contentArgs ,  'strokeWidth' ))  или  L10n . по умолчанию . strokeWidthlocal  strokeOpacity  =  util . getParameterValue ( contentArgs ,  'strokeOpacity' )если  strokeOpacity,  тоданные . properties [ 'stroke-opacity' ]  =  tonumber ( strokeOpacity )конецlocal  fill  =  util . getParameterValue ( contentArgs ,  'заполнить' )если  заполнить  тоданные . свойства . fill  =  заливкалокальная  fillOpacity  =  Util . getParameterValue ( contentArgs ,  'fillOpacity' )данные . properties [ 'fill-opacity' ]  =  fillOpacity  и  tonumber ( fillOpacity )  или  0,6конециначе  - это точкаlocal  markerSymbol  =  util . getParameterValue ( contentArgs ,  'маркер' )  или  L10n . по умолчанию . маркер- разрешить явное указание пустого поля для переопределения информационных ящиков или других шаблонов со значением по умолчаниюесли  markerSymbol  ~ =  "blank",  тоданные . properties [ "marker-symbol" ]  =  markerSymbolконецданные . properties [ "маркер-цвет" ]  =  утилит . getParameterValue ( contentArgs ,  'markerColor' )  или  L10n . по умолчанию . markerColorданные . properties [ "marker-size" ]  =  util . getParameterValue ( contentArgs ,  'markerSize' )  или  L10n . по умолчанию . markerSizeконецещеданные . type  =  "ExternalData"если  утилит . getParameterValue ( contentArgs ,  'тип' )  ==  L10n . ул . data  или  утилит . getParameterValue ( contentArgs ,  'from' ),  затемданные . service  =  "page"elseif  util . getParameterValue ( contentArgs ,  'тип' )  ==  L10n . ул . линия  тогдаданные . service  =  "геолайн"elseif  util . getParameterValue ( contentArgs ,  'тип' )  ==  L10n . ул . форма  тогдаданные . service  =  "geoshape"elseif  util . getParameterValue ( contentArgs ,  'тип' )  ==  L10n . ул . shapeInverse  тогдаданные . service  =  "геомаска"конецесли  утилит . getParameterValue ( contentArgs ,  'id' )  или  ( not  ( util . getParameterValue ( contentArgs ,  'from' ))  и  mw . wikibase . getEntityIdForCurrentPage ()),  тогдаданные . ids  =  util . getParameterValue ( contentArgs ,  'id' )  или  mw . викибаза . getEntityIdForCurrentPage ()ещеданные . title  =  util . getParameterValue ( contentArgs ,  'от' )конецданные . properties  =  {ход  =  утилит . getParameterValue ( contentArgs ,  'strokeColor' )  или  L10n . по умолчанию . strokeColor ,[ "Штрих-ширина" ]  =  ToNumber ( Util . GetParameterValue ( contentArgs ,  'strokeWidth' ))  или  L10n . по умолчанию . strokeWidth}local  strokeOpacity  =  util . getParameterValue ( contentArgs ,  'strokeOpacity' )если  strokeOpacity,  тоданные . properties [ 'stroke-opacity' ]  =  tonumber ( strokeOpacity )конецlocal  fill  =  util . getParameterValue ( contentArgs ,  'заполнить' )если  заполнить  и  ( data . service  ==  "geoshape"  или  data . service  ==  "geomask" ),  тоданные . свойства . fill  =  заливкалокальная  fillOpacity  =  Util . getParameterValue ( contentArgs ,  'fillOpacity' )если  fillOpacity,  тоданные . Свойства [ 'заполняющих непрозрачности' ]  =  ToNumber ( fillOpacity )конецконецконецданные . свойства . title  =  util . getParameterValue ( contentArgs ,  'title' )  или  mw . название . getCurrentTitle (). текстесли  утилит . getParameterValue ( contentArgs ,  'description' ),  затемданные . свойства . description  =  util . getParameterValue ( contentArgs ,  'описание' )конецвернуть  мв . текст . jsonEncode ( данные )конец- [[Создает атрибуты для maplink или тега mapframe.@param {таблица} аргументы@param {boolean} [isTitle] Тег должен отображаться в заголовке страницы, а не чем встроенный@returns {table <string, string>} пары "ключ-значение" имен атрибутов и значений]] -функция  сделать . tagAttribs ( аргументы ,  isTitle )местные  атрибуты  =  {}если  утилит . getParameterValue ( args ,  'zoom' ),  затематрибуты . zoom  =  util . getParameterValue ( аргументы ,  'масштабирование' )конецесли  утилит . isDeclined ( util . getParameterValue ( args ,  'icon' )),  затематрибуты . class  =  "no-icon"конецесли  утилит . getParameterValue ( аргументы ,  'тип' )  ==  L10n . ул . point,  а  не  coordsDerivedFromFeatures,  тогдаместный  лат ,  долгий  =  сделать . координаты ( аргументы ,  'plainOutput' )атрибуты . широта  =  ToString ( лат )атрибуты . longitude  =  tostring ( длинный )конецесли  утилит . isAffirmed ( util . getParameterValue ( args ,  'frame' )),  а  не ( isTitle ),  тогдаатрибуты . ширина  =  утилит . getParameterValue ( args ,  'frameWidth' )  или  L10n . по умолчанию . frameWidthатрибуты . высота  =  утилит . getParameterValue ( args ,  'frameHeight' )  или  L10n . по умолчанию . frameHeightесли  утилит . getParameterValue ( args ,  'frameCoordinates' ),  затемлокальный  frameLat ,  frameLong  =  util . parseCoords ( Util . getParameterValue ( арг ,  'frameCoordinates' ))атрибуты . широта  =  frameLatатрибуты . долгота  =  frameLongещеесли  утилит . getParameterValue ( args ,  'frameLatitude' ),  затематрибуты . широта  =  утилит . getParameterValue ( аргументы ,  'frameLatitude' )конецесли  утилит . getParameterValue ( args ,  'frameLongitude' ),  затематрибуты . долгота  =  утилит . getParameterValue ( аргументы ,  'frameLongitude' )конецконецесли  не  атрибуты . широта,  а  не  атрибуты . долготы  и  не  coordsDerivedFromFeatures  толокальный  успех ,  lat ,  long  =  pcall ( util . wikidataCoords ,  util . getParameterValue ( args ,  'id' )  или  mw . wikibase . getEntityIdForCurrentPage ())если  успех,  тоатрибуты . широта  =  ToString ( лат )атрибуты . longitude  =  tostring ( длинный )конецконецесли  утилит . getParameterValue ( args ,  'frameAlign' ),  затематрибуты . align  =  util . getParameterValue ( аргументы ,  'frameAlign' )конецесли  утилит . isAffirmed ( util . getParameterValue ( args ,  'plain' )),  затематрибуты . frameless  =  "1"ещеатрибуты . текст  =  утилит . getParameterValue ( аргументы ,  'текст' )  или  L10n . по умолчанию . текстконецещеатрибуты . текст  =  утилит . getParameterValue ( аргументы ,  'текст' )  или  L10n . по умолчанию . текстконецвернуть  атрибутыконец- [[Создает вики-текст maplink, который будет расположен в правом верхнем углу заголовкастраница (там же, где расположены координаты с | display = title).@param {таблица} аргументы@param {string} tagContent Контент для тега maplink@returns {строка}]] -функция  сделать . titleOutput ( аргументы ,  tagContent )местный  titleTag  =  mw . текст . tag ( 'maplink' ,  make . tagAttribs ( аргументы ,  истина ),  tagContent )local  spanAttribs  =  {style  =  "font-size: small;" ,id  =  "координаты"}вернуть  мв . текст . тег ( 'диапазон' ,  spanAttribs ,  titleTag )конец- [[Создает вики-текст maplink или mapframe, который будет встроен в строку.@param {таблица} аргументы@param {string} tagContent Контент для тега maplink@returns {строка}]] -функция  сделать . inlineOutput ( аргументы ,  tagContent )local  tagName  =  'maplink'если  утилит . getParameterValue ( args ,  'frame' ),  затемtagName  =  'mapframe'конецвернуть  мв . текст . тег ( tagName ,  make . tagAttribs ( аргументы ),  tagContent )конец- [[Делает HTML, необходимый для работы swicther, включая шаблоны стилейтег.@param {table} таблица параметров последовательность таблиц {map, label} @param {string} params {}. map Wikitext для карты mapframe @param {string} params {}. label Текст ярлыка для опции swictherпараметры @param {table} @param {строка} options.alignment "влево", "по центру" или "вправо" @param {boolean} options.isThumbnail Отображение миниатюры @param {строка} options.width Ширина кадра, например, "200" @param {строка} [options.caption] Викитекст заголовка для миниатюры@retruns {строка} swicther HTML]] -функция  сделать . SwitcherHtml ( параметры ,  параметры )options  =  options  или  {}локальный  кадр  =  mw . getCurrentFrame ()local  styles  =  frame : extensionTag {name  =  "templatestyles" ,args  =  { src  =  "Шаблон: Maplink / styles-multi.css" }}локальный  контейнер  =  mw . html . создать ( "div" ): addClass ( "переключатель-контейнер" ): addClass ( "мультиконтейнер карты" )если  варианты . alignment  ==  "влево"  или  варианты . alignment  ==  "right",  затемконтейнер : addClass ( "float" .. options . alignment )else  - выравнивание по центруконтейнер : addClass ( "центр" )конецдля  i  =  1 ,  # params  doконтейнер: tag ( "div" ): wikitext ( params [ i ]. map ): tag ( "диапазон" ): addClass ( "переключатель-метка" ): css ( "дисплей" ,  "нет" ): wikitext ( mw . text . trim ( params [ i ]. label ))конецесли  не  варианты . isThumbnail  тогдавернуть  стили  ..  tostring ( контейнер )конецlocal  classlist  =  container : getAttr ( "класс" )classlist  =  mw . ustring . gsub ( список классов ,  "% a *" .. параметры . выравнивание ,  "" )контейнер : attr ( "класс" ,  список классов )локальный  externalCountainer  =  mw . html . создать ( "div" ): addClass ( "mapframe-multi-external-container" ): addClass ( " мв -картограф-контейнер" ): addClass ( "большой палец" )если  варианты . alignment  ==  "влево"  или  варианты . alignment  ==  "right",  затемexternalCountainer : addClass ( "т" .. параметры . выравнивание )else  - выравнивание по центрувнешний: addClass ( "tnone" ): addClass ( "центр" )конецвнешний: tag ( "div" ): addClass ( "thumbinner" ): css ( "ширина" ,  параметры . ширина .. "пикс" ): узел ( контейнер ): node ( options . caption  и  mw . html . create ( "div" ): addClass ( "thumbcaption" ): wikitext ( параметры . подпись ))вернуть  стили  ..  tostring ( outerCountainer )конец- [[Делает HTML, необходимый для работы наложенной картытег.@param {string} wikitext overlayMap для наложенной карты@param {string} wikitext baseMap для базовой карты@param {table} задает различные параметры стиля / отображения @param {строка} options.align "влево", "по центру" или "вправо" @param {string | number} options.width Ширина базовой карты, например, "300" @param {строка | число} options.width Высота базовой карты, например, "200" @param {string} options.border Стиль границы наложенной карты, например "сплошной белый 1px" @param {string} options.horizontalAlignment Выравнивание по горизонтали для наложения карты "влево" или "вправо" @param {string | number} options.horizontalOffset Горизонтальное смещение в пикселях от края выравнивания, например "10" @param {string} options.verticalAlignment Вертикальное выравнивание для наложенной карты: «сверху» или «снизу» @param {string | number} options.verticalOffset Вертикальное смещение в пикселях от края выравнивания, например, "10" @param {boolean} options.isThumbnail Отображение миниатюры @param {строка} [options.caption] Викитекст заголовка для миниатюры@retruns {строка} HTML для базовой карты с наложением]] -функция  сделать . overlayHtml ( overlayMap ,  baseMap ,  параметры )options  =  options  или  {}local  containerFloatClass  =  "float" .. ( параметры . выровнять  или  "нет" )если  варианты . выровняйте  ==  "центр",  затемcontainerFloatClass  =  "центр"конецlocal  containerStyle  =  {position  =  "относительный" ,ширина  =  параметры . ширина  ..  "пикс" ,высота  =  параметры . высота  ..  "пикс" ,overflow  =  "hidden"  - мобильный телефон / minerva имеет тенденцию добавлять полосы прокрутки на пару пикселей}если  варианты . выровняйте  ==  "центр",  затемcontainerStyle [ "margin-left" ]  =  "авто"containerStyle [ "margin-right" ]  =  "авто"конецлокальный  контейнер  =  mw . html . создать ( "div" ): addClass ( "mapframe-withOverlay-container" ): addClass ( containerFloatClass ): addClass ( "размер нет" ): css ( containerStyle )local  overlayStyle  =  {position  =  "absolute" ,[ "z-index" ]  =  "1" ,граница  =  параметры . граница  или  "сплошной белый 1px"}если  варианты . horizontalAlignment  ==  "right",  затемoverlayStyle . справа  =  варианты . horizontalOffset  ..  "px"ещеoverlayStyle . left  =  варианты . horizontalOffset  ..  "px"конецесли  варианты . verticalAlignment  ==  "bottom",  затемoverlayStyle . внизу  =  варианты . verticalOffset  ..  "px"ещеoverlayStyle . top  =  варианты . verticalOffset  ..  "px"конецлокальный  overlayDiv  =  mw . html . создать ( "div" ): css ( overlayStyle ): wikitext ( overlayMap )контейнер: узел ( overlayDiv ): wikitext ( baseMap )если  не  варианты . isThumbnail  тогдавозврат в  строку ( контейнер )конецlocal  classlist  =  container : getAttr ( "класс" )classlist  =  mw . ustring . gsub ( список классов ,  "% a *" .. параметры . выровнять ,  "" )контейнер : attr ( "класс" ,  список классов )локальный  externalCountainer  =  mw . html . создать ( "div" ): addClass ( "mapframe-withOverlay-outerContainer" ): addClass ( " мв -картограф-контейнер" ): addClass ( "большой палец" )если  варианты . align  ==  "left"  или  параметры . align  ==  "right",  затемouterCountainer : addClass ( "t" .. options . align )else  - выравнивание по центрувнешний: addClass ( "tnone" ): addClass ( "центр" )конецвнешний: tag ( "div" ): addClass ( "thumbinner" ): css ( "ширина" ,  параметры . ширина .. "пикс" ): узел ( контейнер ): node ( options . caption  и  mw . html . create ( "div" ): addClass ( "thumbcaption" ): wikitext ( параметры . подпись ))вернуться в  строку ( outerCountainer )конец- [[---------------------------------------------- ------------------------------ Пакет для экспорта, т.е. методы, которые будут доступны для шаблонов и другие модули.-------------------------------------------------- --------------------------]] -местный  p  =  {}- Точка входа для шаблоновфункция  p . основной ( фрейм )локальный  родитель  =  фрейм . getParent ( кадр )- Проверьте вариант наложениялокальный  оверлей  =  утилит . getParameterValue ( родитель . арг ,  'наложение' )local  hasOverlay  =  overlay  и  mw . текст . обрезать ( наложение )  ~ =  ""- Проверьте вариант переключателялокальный  переключатель  =  утилит . getParameterValue ( родитель . арг ,  'переключатель' )local  isMulti  =  переключатель  и  mw . текст . trim ( переключатель )  ~ =  ""- Создавайте выходные данные, выбирая метод, соответствующий параметрамлокальный  выходесли  hasOverlay,  тоoutput  =  p . withOverlay ( родитель . арг )elseif  isMulti  тогдаoutput  =  p . мульти ( родитель . арг )ещеoutput  =  p . _Главная ( родитель . арг )конец- Предварительно обработать вывод перед его возвратомвозвратный  кадр : препроцесс ( вывод )конец- Точки входа для модулейфункция  p . _main ( _args )локальные  аргументы  =  утилит . trimArgs ( _args )локальный  tagContent  =  make . контент ( аргументы )локальный  дисплей  =  mw . текст . split ( util . getParameterValue ( args ,  'display' )  или  L10n . defaults . display ,  '% s *'  ..  L10n . str . dsep  ..  '% s *' )локальный  displayInTitle  =  display [ 1 ]  ==  L10n . ул . заголовок  или  дисплей [ 2 ]  ==  L10n . ул . заглавиелокальный  дисплейInline  =  дисплей [ 1 ]  ==  L10n . ул . inline  или  display [ 2 ]  ==  L10n . ул . в соответствиилокальный  выходесли  displayInTitle  и  displayInline,  товывод  =  сделать . titleOutput ( args ,  tagContent )  ..  make . inlineOutput ( аргументы ,  tagContent )elseif  displayInTitle  тогдавывод  =  сделать . titleOutput ( аргументы ,  tagContent )elseif  displayInline  тогдавывод  =  сделать . inlineOutput ( аргументы ,  tagContent )ещеошибка ( L10n . error . badDisplayPara )конецвозвратный  выводконецфункция  p . мульти ( _args )локальные  аргументы  =  утилит . trimArgs ( _args )если  не  аргументы [ L10n . пункт . переключатель ],  затем  ошибка ( L10n . error . noSwitchPara ,  0 )  конецлокальный  switchParamValue  =  util . getParameterValue ( аргументы ,  'переключатель' )local  switchLabels  =  util . tableFromList ( switchParamValue )если  # switchLabels  ==  1,  то  ошибка ( L10n . error . oneSwitchLabel ,  0 )  endlocal  mapframeArgs  =  {}local  switchParams  =  {}для  имени ,  val  в  парах ( args )  делать- Скопируйте в mapframeArgs, если не метки переключателя или параметр переключателяесли  val  ~ =  switchParamValue,  а  не  string.match ( val ,  "^" .. L10n . str . switch .. ":" ),  тоmapframeArgs [ имя ]  =  Valконец- Проверьте, нужно ли переключать этот параметр. Если да, сохраните имя и переключите- значения в таблице switchParams.local  switchList  =  string.match ( val ,  "^" .. L10n . str . switch .. ": (. +)" )если  switchList  ~ =  nil,  томестные  значения  =  утилит . tableFromList ( список переключателей )если  # значений  ==  1,  тоerror ( string.format ( L10n . error . oneSwitchValue ,  name ),  0 )конецswitchParams [ имя ]  =  значенияконецконецесли  утилит . tableCount ( switchParams )  ==  0,  затемошибка ( L10n . error . noSwitchLists ,  0 )конецлокальный  switchCount  =  util . subTablesCount ( switchParams )если  не  switchCount,  тоошибка ( L10n . error . switchMismatches ,  0 )elseif  switchCount  >  # switchLabels,  затемerror ( string.format ( L10n . error . lesserSwitchLabels ,  switchCount ,  # switchLabels ),  0 )конец- Убедитесь, что будет использоваться обычная рамка (миниатюра будет построена- функция make.switcherHtml, если требуется, чтобы параметры переключателя были- внутри хвостовика)mapframeArgs . plain  =  "да"местный  переключатель  =  {}для  я  =  1 ,  switchCount  делатьlocal  label  =  switchLabels [ i ]для  имени ,  значение  в  паре ( switchParams )  делатьmapframeArgs [ имя ]  =  значения [ i ]конецtable.insert ( Switcher ,  {карта  =  стр . _main ( mapframeArgs ),label  =  "Показать" .. label})конецвозврат  сделать . SwitcherHtml ( переключатель ,  {alignment  =  args [ "выравнивание рамки" ]  или  "вправо" ,isThumbnail  =  ( args . frame,  а  не  args . plain )  и  true  или  false ,width  =  args [ "frame-width" ]  или  L10n . по умолчанию . frameWidth ,caption  =  args . текст})конецфункция  p . withOverlay ( _args )- Получить и обрезать викитекст для наложения картыlocal  overlayMap  =  _args . наложениеесли  type ( overlayMap )  ==  'string',  тоoverlayMap  =  overlayMap : match ( '^% s * (.-)% s * $' )конецlocal  isThumbnail  =  ( util . getParameterValue ( _args ,  "frame" ),  а  не  util . getParameterValue ( _args ,  "plain" ))  и  true  или  false- Получить базовую карту с помощью функции _main, как обычную картулокальные  аргументы  =  утилит . trimArgs ( _args )аргументы . plain  =  "да"локальная  базовая карта  =  p . _main ( аргументы )- Извлечь параметры наложения из аргументовlocal  overlayOptions  =  {ширина  =  утилит . getParameterValue ( args ,  "frameWidth" )  или  L10n . по умолчанию . frameWidth ,высота  =  утилит . getParameterValue ( args ,  "frameHeight" )  или  L10n . по умолчанию . frameHeight ,align  =  util . getParameterValue ( args ,  "frameAlign" )  или  L10n . по умолчанию . frameAlign ,граница  =  утилит . getParameterValue ( args ,  "overlayBorder" )  или  L10n . по умолчанию . overlayBorder ,horizontalAlignment  =  util . getParameterValue ( args ,  "overlayHorizontalAlignment" )  или  L10n . по умолчанию . overlayHorizontalAlignment ,horizontalOffset  =  утилит . getParameterValue ( args ,  "overlayHorizontalOffset" )  или  L10n . по умолчанию . overlayHorizontalOffset ,verticalAlignment  =  util . getParameterValue ( args ,  "overlayVerticalAlignment" )  или  L10n . по умолчанию . overlayVerticalAlignment ,verticalOffset  =  утилит . getParameterValue ( args ,  "overlayVerticalOffset" )  или  L10n . по умолчанию . overlayVerticalOffset ,isThumbnail  =  isThumbnail ,caption  =  util . getParameterValue ( аргументы ,  «текст» )  или  L10n . по умолчанию . текст}- Сделайте HTML для наложенных карт.возврат  сделать . overlayHtml ( overlayMap ,  базовая карта ,  overlayOptions )конецвернуть  p