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

Модуль: Infobox - это модуль , реализующий шаблон {{ Infobox }}. Пожалуйста, ознакомьтесь с инструкциями по использованию на странице шаблона.

Категории отслеживания

местный  p  =  {}местные  аргументы  =  {}local  origArgs  =  {}локальный  кореньместный  empty_row_categories  =  {}local  category_in_empty_row_pattern  =  '% [% [% s * [Cc] [Aa] [Tt] [Ee] [Gg] [Oo] [Rr] [Yy]% s *: [^]] *]]' 'локальная  функция  fixChildBoxes ( sval ,  tt )локальная  функция  notempty (  s  )  return  s  и  s : match (  '% S'  )  endесли  notempty ( sval ),  тоlocal  marker  =  '<span class = special_infobox_marker>'местный  s  =  svals  =  mw . ustring . gsub ( s ,  '(<% s * [Tt] [Rr])' ,  маркер  ..  '% 1' )s  =  mw . ustring . gsub ( s ,  '(</ [Tt] [Rr]% s *>)' ,  '% 1'  ..  маркер )если  s : match ( маркер ),  тоs  =  mw . ustring . gsub ( s ,  marker  ..  '% s *'  ..  marker ,  '' )s  =  mw . ustring . gsub ( s ,  '([ \ r \ n ] | - [^ \ r \ n ] * [ \ r \ n ])% s *'  ..  маркер ,  '% 1' )s  =  mw . ustring . gsub ( s ,  маркер  ..  '% s * ([ \ r \ n ] | -)' ,  '% 1' )s  =  mw . ustring . gsub ( s ,  '(</ [Cc] [Aa] [Pp] [Tt] [Ii] [Oo] [Nn]% s *>% s *)'  ..  marker ,  '% 1' )s  =  mw . ustring . gsub ( s ,  '(<% s * [Tt] [Aa] [Bb] [Ll] [Ee] [^ <>] *>% s *)'  ..  marker ,  '% 1' )s  =  mw . ustring . gsub ( s ,  '^ (% {| [^ \ r \ n ] * [ \ r \ n ]% s *)'  ..  маркер ,  '% 1' )s  =  mw . ustring . gsub ( s ,  '([ \ r \ n ]% {| [^ \ r \ n ] * [ \ r \ n ]% s *)'  ..  маркер ,  '% 1' )s  =  mw . ustring . gsub ( s ,  marker  ..  '(% s ​​* </ [Tt] [Aa] [Bb] [Ll] [Ee]% s *>)' ,  '% 1' )s  =  mw . ustring . gsub ( s ,  маркер  ..  '(% s ​​* \ n |%})' ,  '% 1' )конецесли  s : match ( маркер ),  толокальные  подъячейки  =  mw . текст . split ( s ,  маркер )s  =  ''для  k  =  1 ,  # подъячейки  делаютесли  k  ==  1,  тоs  =  s  ..  subcells [ k ]  ..  '</'  ..  tt  ..  '> </tr>'elseif  k  ==  # подъячейки,  тоlocal  rowstyle  =  'style = "display: none"'если  notempty ( subcells [ k ]),  то  rowstyle  =  '' ends  =  s  ..  '<tr'  ..  rowstyle  .. '> <'  ..  tt  ..  'colspan = 2> \ n '  ..подъячейки [ k ]elseif  notempty ( subcells [ k ]),  тоесли  ( k  %  2 )  ==  0,  тоs  =  s  ..  подъячейки [ k ]ещеs  =  s  ..  '<tr> <'  ..  tt  ..  'colspan = 2> \ n '  ..подъячейки [ k ]  ..  '</'  ..  tt  ..  '> </tr>'конецконецконецконец- следующие две строки добавляют новую строку в конец списков для парсера PHP- [[Special: Diff / 849054481]]- удалить, когда [[: phab: T191516]] исправлен или OBEs  =  mw . ustring . gsub ( s ,  '([ \ r \ n ] [% * # ;:] [^ \ r \ n ] *) $' ,  '% 1 \ n ' )s  =  mw . ustring . gsub ( s ,  '^ ([% * # ;:] [^ \ r \ n ] *) $' ,  '% 1 \ n ' )s  =  mw . ustring . gsub ( s ,  '^ ([% * # ;:])' ,  ' \ n % 1' )s  =  mw . ustring . gsub ( s ,  '^ (% {% |)' ,  ' \ n % 1' )вернуть  sещевернуть  свалконецконец- Возвращает объединение значений двух таблиц в виде последовательности.локальная  функция  union ( t1 ,  t2 )местные  валс  =  {}для  к ,  V  в  паре ( t1 )  делаетvals [ v ]  =  правдаконецдля  к ,  V  в  паре ( t2 )  делаетvals [ v ]  =  правдаконецместное  ret  =  {}для  k ,  v  в  парах ( валсах )  делаемtable.insert ( ret ,  k )конецвозвращение в  отставкеконец- Возвращает таблицу, содержащую номера существующих аргументов- для указанного префикса. Например, если префикс был «данные» и- существуют 'data1', 'data2' и 'data5', он вернет {1, 2, 5}.локальная  функция  getArgNums ( префикс )местный  НУМС  =  {}для  k ,  v  в  парах ( args )  делаемlocal  num  =  tostring ( k ): match ( '^'  ..  prefix  ..  '([1-9]% d *) $' )если  Num  затем  table.insert ( НУМС ,  ToNumber ( Num ))  конецконецtable.sort ( НУМС )возвращение  НУМСконец- Добавляет строку в информационное окно с ячейкой заголовка.- или комбинация метка / ячейка данных.локальная  функция  addRow ( rowArgs )если  rowArgs . заголовок  и  rowArgs . header  ~ =  '_BLANK_',  затемкорень: tag ( 'tr' ): addClass ( rowArgs . rowclass ): cssText ( rowArgs . стиль строки ): tag ( 'th' ): attr ( 'colspan' ,  '2' ): addClass ( 'заголовок информационного окна ' ): addClass ( rowArgs . класс ): addClass ( args . headerclass )- @deprecated next; целевой .infobox- <имя> .infobox-header: CssText ( арг . Headerstyle ): cssText ( rowArgs . rowcellstyle ): wikitext ( fixChildBoxes ( rowArgs . header ,  'th' ))если  rowArgs . данные  тогдакорень : wikitext ('[[Категория: страницы, на которых используются шаблоны инфобоксов с игнорируемыми ячейками данных]]')конецelseif  rowArgs . data  и  rowArgs . данные : gsub (category_in_empty_row_pattern ,  ''): совпадение ( '^% S' ),  затемлокальная  строка  =  корень : тег ( 'тр' )строка : addClass ( rowArgs . rowclass )строка : cssText ( rowArgs . rowstyle )если  rowArgs . тогда лейбл строка: tag ( 'th' ): attr ( 'область' ,  'строка' ): addClass ( 'метка-инфобокса' )- @deprecated next; целевой .infobox- <имя> .infobox-label: cssText ( аргумент . стиль метки ): cssText ( rowArgs . rowcellstyle ): Вики - текст ( rowArgs . Этикетка ): сделано ()конецлокальные  данныеCell  =  row : tag ( 'td' )dataCell: attr ( 'colspan' , а  не  rowArgs . label  и  '2'  или  ноль ): AddClass ( не  rowArgs . Этикетка  и  «инфобокс-полные данные»  или  «инфобокс-данные» ): addClass ( rowArgs . класс )- @deprecated next; целевой .infobox- <имя> .infobox (-full) -data: CssText ( rowArgs . Datastyle ): cssText ( rowArgs . rowcellstyle ): wikitext ( fixChildBoxes ( rowArgs . data ,  'td' ))ещеtable.insert ( empty_row_categories ,  rowArgs . data  или  '' )конецконецлокальная  функция  renderTitle ()если  не  аргументы . название,  затем  верните  конецкорень: tag ( 'подпись' ): addClass ( 'заголовок информационного окна ' ): addClass ( аргумент . titleclass )- @deprecated next; целевой .infobox- <имя> .infobox-title: cssText ( аргумент . стиль заголовка ): wikitext ( аргумент . название )конецлокальная  функция  renderAboveRow ()если  не  аргументы . выше,  затем  верните  конецкорень: tag ( 'tr' ): tag ( 'th' ): attr ( 'colspan' ,  '2' ): addClass ( 'информационное окно -выше' ): AddClass ( арг . Aboveclass )- @deprecated next; target .infobox- <имя> .infobox-выше: CssText ( арг . Abovestyle ): Вики - текст ( fixChildBoxes ( арг . Выше , 'й' ))конецлокальная  функция  renderBelowRow ()если  не  аргументы . ниже,  затем  вернуться в  конецкорень: tag ( 'tr' ): tag ( 'td' ): attr ( 'colspan' ,  '2' ): addClass ( 'информационное окно -ниже' ): AddClass ( арг . Belowclass )- @deprecated next; целевой .infobox- <имя> .infobox-ниже: CssText ( арг . Belowstyle ): Вики - текст ( fixChildBoxes ( арг . Ниже , 'тд' ))конецлокальная  функция  addSubheaderRow ( subheaderArgs )если  subheaderArgs . данные  иsubheaderArgs . data : gsub ( category_in_empty_row_pattern ,  '' ): match ( '^% S' )  затемлокальная  строка  =  корень : тег ( 'тр' )строка : addClass ( subheaderArgs . rowclass )локальные  данныеCell  =  row : tag ( 'td' )dataCell: attr ( 'colspan' ,  '2' ): addClass ( 'инфобокс-подзаголовок' ): addClass ( класс subheaderArgs . ): CssText ( subheaderArgs . Datastyle ): cssText ( subheaderArgs . rowcellstyle ): wikitext ( fixChildBoxes ( subheaderArgs . data ,  'td' ))ещеtable.insert ( empty_row_categories ,  subheaderArgs . data  или  '' )конецконецлокальная  функция  renderSubheaders ()если  args . тогда подзаголовок аргументы . subheader1  =  аргументы . подзаголовокконецесли  args . subheaderrowclass  тогдааргументы . subheaderrowclass1  =  аргументы . подзаголовокконецлокальные  подзаголовки  =  getArgNums ( 'подзаголовок' )для  k ,  число  в  ipairs ( subheadernums )  сделатьaddSubheaderRow ({data  =  args [ 'subheader'  ..  tostring ( num )],- @deprecated next; целевой .infobox- <имя> .infobox-подзаголовокdatastyle  =  args . subheaderstyle ,rowcellstyle  =  args [ 'subheaderstyle'  ..  tostring ( num )],class  =  args . subheaderclass ,rowclass  =  args [ 'subheaderrowclass'  ..  tostring ( число )]})конецконецлокальная  функция  addImageRow ( imageArgs )если  imageArgs . данные  иimageArgs . data : gsub ( category_in_empty_row_pattern ,  '' ): match ( '^% S' )  затемлокальная  строка  =  корень : тег ( 'тр' )строка : addClass ( imageArgs . rowclass )локальные  данныеCell  =  row : tag ( 'td' )dataCell: attr ( 'colspan' ,  '2' ): addClass ( 'инфобокс-изображение' ): addClass ( класс imageArgs . ): CssText ( imageArgs . Datastyle ): wikitext ( fixChildBoxes ( imageArgs . data ,  'td' ))ещеtable.insert ( empty_row_categories ,  imageArgs . data  или  '' )конецконецлокальная  функция  renderImages ()если  args . изображение  тогдааргументы . изображение1  =  аргументы . изображениеконецесли  args . подпись  тогдааргументы . caption1  =  аргументы . подписьконецлокальные  изображения  =  getArgNums ( 'изображение' )для  k ,  число  в  ipairs ( images )  сделатьlocal  caption  =  args [ 'подпись'  ..  tostring ( число )]локальные  данные  =  mw . html . create (): wikitext ( args [ 'изображение'  ..  tostring ( число )])если  подпись,  тоданные: tag ( 'div' ): addClass ( 'заголовок информационного окна ' )- @deprecated next; целевой .infobox- <имя> .infobox-caption: cssText ( args . captionstyle ): wikitext ( подпись )конецaddImageRow ({data  =  tostring ( данные ),- @deprecated next; целевой .infobox- <имя> .infobox-изображениеdatastyle  =  args . imagestyle ,class  =  args . imageclass ,rowclass  =  args [ 'imagerowclass'  ..  tostring ( число )]})конецконец- Когда автозаголовки включены, предварительная обработка строклокальная  функция  preprocessRows ()если  не  аргументы . autoheaders  затем  верните  конецlocal  rownums  =  union ( getArgNums ( 'заголовок' ),  getArgNums ( 'данные' ))table.sort ( rownums )местный  последний заголовокдля  k ,  число  в  ipairs ( rownums )  сделатьесли  args [ 'header'  ..  tostring ( num )],  тоесли  последний заголовок,  тоargs [ 'header'  ..  tostring ( lastheader )]  =  нольконецlastheader  =  числоelseif  args [ 'data'  ..  tostring ( num )]  иargs [ 'data'  ..  tostring ( num )]: gsub (category_in_empty_row_pattern ,  ''): совпадение ( '^% S' ),  затемлокальные  данные  =  аргументы [ 'данные'  ..  строка ( число )]если  data : gsub ( category_in_empty_row_pattern ,  '' ): match ( '% S' ),  тоlastheader  =  nilконецконецконецесли  последний заголовок,  тоargs [ 'header'  ..  tostring ( lastheader )]  =  нольконецконец- Получает объединение номеров аргументов заголовка и данных,- и выводит их все по порядкулокальная  функция  renderRows ()local  rownums  =  union ( getArgNums ( 'заголовок' ),  getArgNums ( 'данные' ))table.sort ( rownums )для  k ,  число  в  ipairs ( rownums )  сделатьaddRow ({header  =  args [ 'header'  ..  tostring ( num )],label  =  args [ 'label'  ..  tostring ( num )],data  =  args [ 'данные'  ..  tostring ( num )],datastyle  =  args . datastyle ,class  =  args [ 'class'  ..  tostring ( num )],rowclass  =  args [ 'rowclass'  ..  tostring ( число )],- @deprecated next; целевой .infobox- <имя> rowclassrowstyle  =  args [ 'rowstyle'  ..  tostring ( num )],rowcellstyle  =  args [ 'rowcellstyle'  ..  tostring ( число )]})конецконецлокальная  функция  renderNavBar ()если  не  аргументы . имя,  затем  верни  конецкорень: tag ( 'tr' ): tag ( 'td' ): attr ( 'colspan' ,  '2' ): addClass ( 'infobox-navbar' ): wikitext ( require ( 'Module: Navbar' ). _navbar {аргументы . имя ,mini  =  1 ,})конецлокальная  функция  renderItalicTitle ()local  italicTitle  =  args [ 'курсивный заголовок' ]  и  mw . ustring . нижний ( args [ 'курсивное название' ])если  italicTitle  ==  ''  или  italicTitle  ==  'force'  или  italicTitle  ==  'yes',  тогдакорень : wikitext ( mw . getCurrentFrame (): expandTemplate ({ title  =  'italic title' }))конецконец- Категории в пустых строках собираются в empty_row_categories.- Эта функция добавляет их в вывод модуля. На это не влияет- args.decat, потому что этот модуль не должен предотвращать внешние категории модуля- от рендеринга.локальная  функция  renderEmptyRowCategories ()для  _ ,  s  в  ipairs ( empty_row_categories )  сделайтекорень : wikitext ( s )конецконец- Категории отслеживания рендеринга. args.decat == отключает категории отслеживания.локальная  функция  renderTrackingCategories ()если  args . decat  ==  'yes',  затем  верните  конецесли  args . ребенок  ==  'да'  тогдаесли  args . название  тогдакорень : wikitext ('[[Категория: страницы, на которых используются встроенные шаблоны инфобоксов с параметром заголовка]]')конецelseif  # ( getArgNums ( 'data' ))  ==  0  и  mw . название . getCurrentTitle (). namespace  ==  0,  тогдаroot : wikitext ( '[[Категория: статьи, в которых используются шаблоны инфобоксов без строк данных]]' )конецконецзнак равноЗагружает шаблоны стилей для информационного окна.ЗАДАЧИ: загрузите базовые стили шаблонов здесь, а не в MediaWiki: Common.cssМы пока этого не делаем, потому что есть 4-5000 страниц с «сырым» инфобоксом.столы. См. [[Mediawiki_talk: Common.css / to_do # Infobox]] и / или приходите на помощь :).Когда мы это сделаем, мы также должны очистить встроенный CSS ниже.Придется сделать какую-то причудливую категорию конверсии, например, с боковой панелью.знак равнолокальная  функция  loadTemplateStyles ()локальный  кадр  =  mw . getCurrentFrame ()- См. Описание функции- local base_templatestyles = frame: extensionTag {- name = 'templatestyles', args = {src = cfg.i18n.templatestyles}-}местные  templatestyles  =  ''если  args [ 'templatestyles' ],  то  templatestyles  =  frame : extensionTag {name  =  'templatestyles' ,  args  =  {  src  =  args [ 'templatestyles' ]  }}конецместный  child_templatestyles  =  ''если  args [ 'дочерние шаблоны стилей ' ],  то  child_templatestyles  =  frame : extensionTag {name  =  'templatestyles' ,  args  =  {  src  =  args [ 'child templatestyles' ]  }}конецместный  grandchild_templatestyles  =  ''if  args [ 'grandchild templatestyles' ]  then  grandchild_templatestyles  =  frame : extensionTag {name  =  'templatestyles' ,  args  =  {  src  =  args [ 'grandchild templatestyles' ]  }}конецreturn  table.concat ({- base_templatestyles, - см. описание функцииtemplatestyles ,child_templatestyles ,grandchild_templatestyles})конец- Укажите общий вид информационного окна со специальными настройками, если- инфобокс используется как «ребенок» внутри другого инфобокса.локальная  функция  _infobox ()если  args . ребенок  ~ =  'да'  тогдакорень  =  mw . html . создать ( 'таблица' )корень: addClass ( args . subbox  ==  'yes'  и  'infobox-subbox'  или  'infobox' ): addClass ( аргумент . bodyclass )- @deprecated next; target .infobox- <имя>: cssText ( аргумент . стиль тела )renderTitle ()renderAboveRow ()ещекорень  =  mw . html . создать ()корень: wikitext ( аргумент . название )конецrenderSubheaders ()renderImages ()preprocessRows ()renderRows ()renderBelowRow ()renderNavBar ()renderItalicTitle ()renderEmptyRowCategories ()renderTrackingCategories ()вернуть  loadTemplateStyles ()  ..  tostring ( корень )конец- Если аргумент существует и не пустой, добавьте его в таблицу аргументов.- Пустые аргументы обрабатываются как nil, чтобы соответствовать поведению ParserFunctions.локальная  функция  preprocessSingleArg ( имя_аргумента )если  origArgs [ argName ]  и  origArgs [ argName ]  ~ =  '',  тоargs [ argName ]  =  origArgs [ argName ]конецконец- Назначьте параметры с заданными префиксами таблице args по порядку в- партии указанного шага. Это сделано для предотвращения ссылок и т. Д.- появляются в неправильном порядке. PrefixTable должен быть массивом, содержащим- таблицы, каждая из которых имеет два возможных поля, строку «префикс» и строку- таблица "зависимостей". Функция всегда анализирует параметры, содержащие "префикс".- строка, но анализирует параметры в таблице «зависимостей» только если префикс- параметр присутствует и не пустой.локальная  функция  preprocessArgs ( prefixTable ,  step )если  type ( prefixTable )  ~ =  'table',  тоerror ( "Для таблицы префиксов обнаружено не табличное значение" ,  2 )конецесли  type ( step )  ~ =  'number',  тоerror ( «Обнаружено недопустимое значение шага» ,  2 )конец- Получите аргументы без суффикса числа и проверьте правильность ввода.для  i , v  в  ipairs ( prefixTable )  сделайтеif  type ( v )  ~ =  'table'  или  type ( v . prefix )  ~ =  "string"  или( v . зависеть  и  тип ( v . зависеть )  ~ =  'table' ),  тоerror ( 'В таблице префиксов preprocessArgs обнаружен недопустимый ввод' ,  2 )конецpreprocessSingleArg ( v . префикс )- Разбирать зависимый параметр только в том случае, если присутствует префиксный параметр.- и не пусто.если  args [ v . префикс ]  и  v . зависеть  тогдадля  j ,  укажите значение  в  ipairs ( v . зависеть )  сделайтеесли  type ( dependsValue )  ~ =  'string',  тоerror ( 'В preprocessArgs обнаружено недопустимое "зависимое" значение параметра )конецpreprocessSingleArg ( зависимое значение )конецконецконец- Получить аргументы с суффиксами числа.local  a  =  1  - переменная счетчика.местный  moreArgumentsExist  =  trueв то время как  moreArgumentsExist  ==  true  делатьmoreArgumentsExist  =  falseдля  i  =  a ,  a  +  step  -  1  doдля  j , v  в  ipairs ( prefixTable )  сделайтелокальный  prefixArgName  =  v . префикс  ..  tostring ( i )если  origArgs [ prefixArgName ],  то- Сделайте еще один цикл, если найдены какие-либо аргументы, даже пустые.moreArgumentsExist  =  truepreprocessSingleArg ( prefixArgName )конец- Обработка таблицы зависимостей, если присутствует аргумент префикса- и не пустое, или мы обрабатываем «префикс1», а «префикс» - это- присутствует, а не пусто, и если таблица зависимостей присутствует.если  v . зависимости  и  ( args [ prefixArgName ]  или  ( i  ==  1  и  args [ v . prefix ])),  тодля  j , укажите значение  в  ipairs ( v . зависеть )  сделайтелокальное имя  зависимости  = значение  зависимости  ..  tostring ( i )preprocessSingleArg ( имя_ зависимой )конецконецконецконеца  =  а  +  шагконецконец- Проанализируйте параметры данных в том же порядке, что и старый {{infobox}}, поэтому- ссылки и т. д. будут отображаться в ожидаемых местах. Параметры, которые- зависят от другого параметра, обрабатываются, только если этот параметр присутствует,- чтобы в списках литературы к статьям не появлялись фантомные ссылки.локальная  функция  parseDataParameters ()preprocessSingleArg ( 'автозаголовки' )preprocessSingleArg ( 'ребенок' )preprocessSingleArg ( 'bodyclass' )preprocessSingleArg ( 'вложенный блок' )preprocessSingleArg ( 'стиль тела' )preprocessSingleArg ( 'название' )preprocessSingleArg ( 'titleclass' )preprocessSingleArg ( 'стиль заголовка' )preprocessSingleArg ( 'выше' )preprocessSingleArg ( 'надкласс' )preprocessSingleArg ( 'выше стиля' )preprocessArgs ({{ префикс  =  'подзаголовок' ,  зависимость  =  { 'стиль подзаголовка' ,  'subheaderrowclass' }}},  10 )preprocessSingleArg ( 'стиль подзаголовка' )preprocessSingleArg ( 'подкласс' )preprocessArgs ({{ префикс  =  'изображение' ,  зависимость  =  { 'подпись' ,  'imagerowclass' }}},  10 )preprocessSingleArg ( 'стиль заголовка' )preprocessSingleArg ( 'образный стиль' )preprocessSingleArg ( 'класс изображений' )preprocessArgs ({{ prefix  =  'header' },{ префикс  =  'данные' ,  зависимость  =  { 'ярлык' }},{ prefix  =  'rowclass' },{ prefix  =  'rowstyle' },{ prefix  =  'rowcellstyle' },{ префикс  =  'класс' }},  50 )preprocessSingleArg ( 'заголовочный класс' )preprocessSingleArg ( 'стиль заголовка' )preprocessSingleArg ( 'стиль метки' )preprocessSingleArg ( 'стиль данных' )preprocessSingleArg ( 'ниже' )preprocessSingleArg ( 'нижний класс' )preprocessSingleArg ( 'нижний стиль' )preprocessSingleArg ( 'имя' )- различное поведение курсива, если он пуст или отсутствуетargs [ 'курсивное название' ]  =  origArgs [ 'курсивное название' ]preprocessSingleArg ( 'декат' )preprocessSingleArg ( 'шаблоны стилей' )preprocessSingleArg ( 'дочерние шаблоны стилей' )preprocessSingleArg ( 'стили внуков' )конец- Если вызывается через #invoke, используйте аргументы, переданные в вызывающий шаблон.- В противном случае в целях тестирования предположим, что аргументы передаются напрямую.функция  p . информационное окно ( фрейм )если  frame  ==  mw . getCurrentFrame (),  затемorigArgs  =  кадр : getParent (). аргументыещеorigArgs  =  frameконецparseDataParameters ()вернуть  _infobox ()конец- Для вызова через #invoke в шаблонефункция  p . infoboxTemplate ( фрейм )origArgs  =  {}для  к , v  в  парах ( кадр . арг )  делают  origArgs [ K ]  =  мВт . текст . обрезать ( v )  конецparseDataParameters ()вернуть  _infobox ()конецвернуть  p