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

Реализует {{ harvc }}

require ( 'Модуль: без глобальных переменных' )локальный  anchor_id_list  =  mw . loadData  ( 'Модуль: Footnotes / anchor_id_list' ). anchor_id_list ;локальный  code_open_tag  =  '<code class = "cs1-code">' ; - класс cs1-code, определенный в модуле: Citation / CS1 / styles.csslocal  lock_icons  =  { - классы значков определены в Module: Citation / CS1 / styles.css[ 'registration' ]  =  { 'cs1-lock-registration' ,  'Требуется бесплатная регистрация' },[ 'limited' ]  =  { 'cs1-lock-limited' ,  'Бесплатный доступ при ограниченной пробной версии, обычно требуется подписка' },[ 'subscription' ]  =  { 'cs1-lock-subscription' ,  'Требуется платная подписка' },}- [[-------------------------- <ЦЕЛЬ _ ПРОВЕРКА> --------------- ---------------------------------------ищите anchor_id (список имен CITEREF и год или текст из | ref =) в anchor_id_listошибка 'no target' может быть подавлена ​​с помощью | ignore-err = yes, когда цель не может быть найдена, потому что цель находится внутришаблон, который является оболочкой для другого шаблона; Ошибка "несколько целей" не может быть подавлена]]локальная  функция  target_check  ( anchor_id ,  игнорировать )местный  номер  =  anchor_id_list [ anchor_id ]; - nil, если anchor_id отсутствует в списке; еще номерместное  сообщение ;местная  категория ;если  не  число,  тоесли  игнорировать  товозврат  '' ; - если ignore истинно, то ни сообщения, ни категорииконецmsg  =  'нет цели:'  ..  anchor_id ; - anchor_id не найден в этой статьеelseif  1  <  число,  тоmsg  =  'несколько целей ('  ..  число  ..  '×):'  ..  anchor_id ; - более одного anchor_id в этой статьеконецcategory  =  0  ==  mw . название . getCurrentTitle (). пространство имен  и  '[[Категория: ошибки шаблона Harv и Sfn]]'  или  '' ; - категоризировать только в пространстве статей- использовать эту версию для отображения сообщений об ошибкахreturn  msg  и  '<span class = "error harv-error" style = "display: inline; font-size: 100%"> Harvc error:'  ..  msg  ..  '([[: Категория: ошибки шаблонов Harv и Sfn | помощь]]) </span> '  ..  категория  или  ' ' ;- используйте эту версию, чтобы скрыть сообщения об ошибках- вернуть сообщение и '<span class = "error harv-error" style = "display: none; font-size: 100%"> Harvc error:' .. msg .. '([[: Категория: Harv и Sfn ошибки шаблона | помощь]]) </span> '.. категория или' ';конец- [[-------------------------- <IS _ SET> --------------- -------------------------------------------------- -Установлена ​​ли переменная или нет. Переменная устанавливается, если она не равна нулю и не пуста.]]локальная  функция  is_set (  var  ) не  возвращать ( var  ==  nil  или  var  ==  '' );конец- [[-------------------------- <ПРОВЕРИТЬ _ ЛЕТ> --------------- -----------------------------------------оценивает параметры, чтобы увидеть, являются ли они одной из этих форм с устранением неоднозначности строчных букв или без него (так же, как вМодуль: Сноски):ГГГГndndc. ГГГГГГГГ – ГГГГ (разделитель - дефис)ГГГГ – ГГ (разделитель - дефис)когда присутствует anchor_year, часть года должна быть такой же, как параметр года, и должна иметь средство устранения неоднозначностивозвращает пустую строку, если параметры имеют правильную форму; сообщение об ошибке еще]]локальная  функция  check_years  ( год , год  привязки )местный  y ,  ay ;если  не  is_set  ( год ),  то - год требуется, поэтому возвращать сообщение об ошибке, если не установленвернуть  'missing'  ..  code_open_tag  ..  '| year = </code>.' ;конецlocal  patterns  =  { - разрешенные годовые шаблоны из модуля: сноски (снимки добавлены здесь)'^ (% d% d% d% d?)% l? $' , - ГГГ или ГГГГ'^ (n% .d%.)% l? $' , - nd'^ (nd)% l? $' , - nd'^ (c%.% d% d% d% d?)% l? $' , - c. ГГГ или c. ГГГГ'^ (% d% d% d% d–% d% d% d% d)% l? $' , - ГГГГ – ГГГГ'^ (% d% d% d% d–% d% d)% l? $' - ГГГГ – ГГ}for  _ ,  pattern  in  ipairs  ( patterns )  do - пролистываем шаблоныy  =  год : совпадение  ( шаблон ); - y - часть годаесли  у  тогдаперерыв ; - когда y установлено, мы нашли совпадение, так что готовоконецконецесли  не  у,  товернуть  'invalid'  ..  code_open_tag  ..  '| year = </code>.' ; - y не задано, значит год указан неверноконецесли  is_set  ( anchor_year ),  то - anchor_year не является обязательнымfor  _ ,  pattern  in  ipairs  ( patterns )  do - пролистываем шаблоныay  =  anchor_year : совпадение  ( шаблон ); - ау - годовая доляесли  ау  топерерыв ; - когда установлено ay, мы нашли совпадение, так что готовоконецконецесли  не  ай  тогдавернуть  'invalid'  ..  code_open_tag  ..  '| anchor-year </code>.' ; - не задан, значит, anchor_year имеет неверный форматконец- если не anchor_year: match ('% l $'), то- return '' .. code_open_tag .. '| anchor-year = </code> missing dab.'; - anchor_year должен заканчиваться буквой, устраняющей неоднозначность-- конецесли  у  ~ =  ау,  тоreturn  ''  ..  code_open_tag  ..  '| year = </code> /'  ..  code_open_tag  ..  '| anchor-year = </code> mismatch.' ; - части года в году и anchor_year должны быть одинаковымиконецконецвозврат  '' ; - оба года хорошие; пустая строка для конкатенацииконец- [[-------------------------- <СДЕЛАТЬ _ ИМЯ> --------------- ---------------------------------------------Собирает последнее, первое, ссылку или маску в отображаемое имя участника.]]локальная  функция  make_name  ( последняя ,  первая ,  ссылка ,  маска )местное  имя  =  последний ;если  is_set  ( первый ),  тоname  =  name  ..  ','  ..  first ; - объединить сначала с последнимконецесли  is_set  ( ссылка ),  тоname  =  '[['  ..  ссылка  ..  '|'  ..  имя  ..  ']]' ; - сформировать вики-ссылку вокруг имениконецесли  is_set  ( маска ),  то - маскировать этого автораесли  ToNumber ( маска ) ,  тоname  =  string.rep  ( '-' ,  mask ) - сделать строку длиной в mdashещеимя  =  маска ; - маска не является числом, поэтому используйте текст маскиконецконецвозвращаемое  имя ;конец- [[-------------------------- <ЯДРО> ----------------- -------------------------------------------------- ---Собирает различные части, предоставленные шаблоном, в правильно отформатированную промежуточную цитату. Добавляет пунктуациюи текст; включает целое в диапазон с атрибутами id и class.Это создает привязку CITEREF от | last1 = до | last4 = и | year =. Он также создает ссылку CITEREF от | in1 = до| in4 = и | год =. Предполагается, что даты взносов совпадают с датой прилагаемых работ.Параметр года, хотя он и не отображается, по-прежнему требуется для привязки CITEREF.]] ядро локальной функции  ( аргументы )  локальный  span_open_tag ; - содержит CITEREF и cssместные  участники  =  '' ; - авторы глав или статейлокальный  источник  =  '' ; - список дат редактора / автора, который формирует ссылку CITEREF на полную цитатулокальный  in_text  =  'В' ;локальный  результат ; - сборка вышеуказанного вывода- сформировать якорь CITEREFесли  is_set  ( args . id ),  тоаргументы . id  =  mw . uri . anchorEncode  ( арг . ID )span_open_tag  =  '<span id = "'  ..  args . id  ..  '" class = "citation">' ; - для использования, когда имя участника совпадает с именем источникаещеlocal  citeref  =  'CITEREF'  ..  table.concat  ( args . citeref )  ..  ( is_set  ( args [ 'anchor-year' ])  и  args [ 'anchor-year' ]  или  args . year );citeref  =  mw . uri . anchorEncode  ( citeref );span_open_tag  =  '<span id = "'  ..  citeref  ..  '" class = "citation">' ;конец - [[сформировать список отображения участников:если | name-list-style = harv, отображение похоже на {{sfn}} и {{harv}}, от 1 до 4 фамилий;если | display-авторы = пусто или опущено, отображение похоже на cs1 | 2: отображать все имена в последнем, первом порядке если | display-авторы = etal, то отображаются имена всех авторов в последнем, первом порядке и добавляются и др.если значение, присвоенное | display-arguments = меньше, чем количество фамилий авторов, отображает указанное количество имён авторов в последнем, первом порядке, за которым следует et al.]]если  'harv'  ~ =  args . name_list_style  then - список участников стиля cs1 | 2 по умолчаниюместный  i  =  1 ;местный  счет ;местный  etal  =  false ; - когда | display-авторы = совпадает с количеством авторов в списке участниковесли  is_set  ( args . display_authors ),  тоесли  'etal'  ==  args . display_authors : lower (): gsub ( "['%.]" ,  ' ' )  затем - часть: gsub () делает' etal 'из множества' et al. ' правописание и стилиcount  =  # args . последний ; - отобразить всех авторов и ...etal  =  true ; - ... добавить "и др."ещекол  =  ToNumber  ( арг . display_authors )  или  0 ; - 0, если нельзя преобразовать в числоесли  0  > =  счет,  тоаргументы . err_msg  =  аргументы . err_msg  ..  'недопустимый'  ..  code_open_tag  ..  '| display-авторы = </code>' ; - если ноль, то вывести сообщение об ошибкеконецконецесли  count  >  # args . последний  затемcount  =  # args . последний ; - когда | display-авторы = больше, чем количество авторов, используйте количество авторовконецесли  count  <  # args . последний  затем - когда | Дисплей- авторы = меньше , чем число авторовetal  =  true ; - добавить "и др."конецещеcount  =  # args . последний ; - установить счетчик для отображения всех авторовконецв то время как  я  <=  count  делатьесли  is_set  ( участники ),  тоучастники  =  участники  ..  '; '  ..  make_name  ( аргументы . last [ i ],  args . first [ i ],  args . link [ i ],  args . mask [ i ]); - остальные участникиещеучастники  =  make_name  ( аргументы . last [ i ],  args . first [ i ],  args . link [ i ],  args . mask [ i ]); - имя первого участникаконеця  =  я + 1 ; - поднять индексконецесли  true  ==  etal,  тоучастники  =  участники  ..  'et al.' ; - добавить и др.elseif  'amp'  ==  args . name_list_style  тогдаучастники  =  участники : gsub ( '; ([^;] +) $' ,  '&% 1' ) - заменить последний разделитель на '&'конецelse - отображение участников в стиле harv- или sfn по умолчаниюесли  4  <=  # args . последний  затем - четыре или более помощников (первый следуют и др.)участники  =  аргументы . последний [ 1 ]  ..  'et al.' ;elseif  3  ==  # аргументы . последний  затем - три (показать их всех)участники  =  аргументы . last [ 1 ]  ..  ','  ..  args . последний [ 2 ]  ..  '& amp; '  ..  args . последний [ 3 ];elseif  2  ==  # аргументы . последний  затем - два (первый и второй)участники  =  аргументы . последний [ 1 ]  ..  '& amp; '  ..  args . последний [ 2 ];elseif  1  ==  # аргументы . последний  затем - только один (первый)участники  =  аргументы . последний [ 1 ];ещеаргументы . err_msg  =  аргументы . err_msg  ..  'в списке авторов нет авторов.' ; - этот код используется для поиска дыр в списке; больше не надоконецконец- сформировать исходный список авторов и датесли  is_set  ( args . in4 )  и  is_set  ( args . in3 )  и  is_set  ( args . in2 )  и  is_set  ( args . in1 ),  тоисточник  =  аргументы . in1  ..  'et al.' ;ElseIf  не  is_set  ( арг . IN4 )  и  is_set  ( арг . IN3 )  и  is_set  ( арг . IN2 )  и  is_set  ( арг . IN1 ) ,  тоисточник  =  аргументы . in1  ..  ','  ..  args . in2  ..  '& amp; '  ..  args . in3 ;ElseIf  не  is_set  ( арг . IN4 )  и  не  is_set  ( арг . IN3 )  и  is_set  ( арг . дюйм2 )  и  is_set  ( арг . IN1 ) ,  тоисточник  =  аргументы . in1  ..  '& amp; '  ..  args . in2 ;ElseIf  не  is_set  ( арг . IN4 )  и  не  is_set  ( Args . IN3 )  и  не  is_set  ( Args . IN2 )  и  is_set  ( арг . IN1 ) ,  тоисточник  =  аргументы . in1 ;ещеаргументы . err_msg  =  аргументы . err_msg  ..  'автор отсутствует в списке источников.'конецsource  =  source  ..  ''  ..  args . open  ..  args . год  ..  аргументы . близко ; - добавить год со скобками или без них--собрать вики-ссылку CITEREFлокальный  anchor_id ;local  target_err_msg ;если  ''  ~ =  args . ref  тогдаanchor_id  =  mw . uri . anchorEncode  ( аргумент . ссылка )ещеanchor_id  =  mw . uri . anchorEncode ( table.concat  ({ 'CITEREF' ,  арг . in1 ,  арг . in2 ,  арг . дюйм3 ,  арг . in4 ,  арг . год }));конецtarget_err_msg  =  target_check  ( anchor_id ,  арг . игнорирующие ); - посмотреть, есть ли цель для этого anchor_idsource  =  '[[#'  ..  anchor_id  ..  "|"  ..  источник  ..  "]]" ;- объединить вклад с URL-адресом, чтобы сделать внешнюю ссылкуесли  args . url  ~ =  '',  затемаргументы . вклад  =  '['  ..  аргументы . url  ..  ''  ..  args . вклад  ..  ']' ; - форматировать внешнюю ссылкуесли  args [ 'url-access' ],  тоесли  lock_icons [ args [ 'url-access' ]],  тоаргументы . вклад  =  table.concat  ({ - добавить разметку значка доступа к этому элементу'<span class = "' , - открыть открывающий тег span; классы значков определены в Module: Citation / CS1 / styles.csslock_icons [ args [ 'url-access' ]] [ 1 ], - добавить соответствующий класс значка замка'"title ="' , - и атрибут titlelock_icons [ args [ 'url-access' ]] [ 2 ], - для соответствующей подсказки'">' , - закрыть открывающий тег spanаргументы . вклад ,'</span>' , - и закройте диапазон});конецконецконецесли  is_set  ( args [ 'год привязки' ]),  тоучастники  =  участники  ..  '('  ..  args [ 'anchor-year' ]  ..  ')'  ..  args . sepc ;elseif  args . sepc  ~ =  участники : sub ( - 1 )  и  args . sepc  ..  ']]'  ~ =  участники : sub ( - 3 )  затемучастники  =  участники  ..  аргументы . sepc ; - добавить разделитель, если он не совпадает с последним символом в списке имен (| first = John S. или и др.)конец- страницы и другое место в источникеесли  args . p  ~ =  ''  тогдааргументы . p  =  аргументы . page_sep  ..  args . p ;elseif  args . pp  ~ =  ''  тогдааргументы . p  =  аргументы . pages_sep  ..  args . pp ; - args.p не установлен, поэтому используйте его для хранения общей информации о местоположении источникаконец  если  args . loc  ~ =  ''  тогдааргументы . p  =  аргументы . p  ..  ','  ..  args . loc ; - добавить arg.loc в args.pконец- заключить сообщения об ошибках в диапазон и добавить ссылку на справкуесли  is_set  ( args . err_msg ),  тоаргументы . err_msg  =  '<span style = "font-size: 100%" class = "error"> harvc:'  ..  args . err_msg  ..  '([[Шаблон: Harvc | help]]) </span>' ;конецесли  ','  ==  аргументы . sepc  тогдаin_text  =  in_text : нижний (); - В стиле CS2 используется нижний регистрконец- и сложить все вместерезультат  =  span_open_tag  ..  участники  ..  '"'  ..  аргументы . вклад  ..  '"'  ..  аргументы . sepc  ..  in_text  ..  source  ..  args . p  ..  args . ps  ..  args . err_msg  ..  target_err_msg  ..  '</span>' ;вернуть  результат ;конец- [[-------------------------- <HARVC> ----------------- -------------------------------------------------- -Точка входа из шаблона {{harvc}}. Получает параметры родительского кадра, выполняет небольшую проверку ошибок]]локальная  функция  harvc  ( фрейм )local  args  =  {err_msg  =  '' ,page_sep  =  ", стр. & nbsp;" ,pages_sep  =  ", стр. & nbsp;" ,sepc  =  '.' ,ps  =  '.' ,open  =  '(' , - годовые скобки для исходного годазакрыть  =  ')' ,last  =  {},first  =  {},ссылка  =  {},маска  =  {},citeref  =  {}}локальный  pframe  =  кадр : getParent (); аргументы . вклад  =  pframe . аргументы . c  или - глава или вкладpframe . аргументы . глава  илиpframe . аргументы . вклад  или  '' ;аргументы . id  =  pframe . аргументы . id  или  '' ;аргументы . in1  =  pframe . args [ 'in' ]  или  pframe . аргументы . in1  или  '' ; - фамилии редакторов исходного кода; 'in' - зарезервированное ключевое слово Luaаргументы . in2  =  PFRAME . аргументы . in2  или  '' ;аргументы . in3  =  pframe . аргументы . in3  или  '' ;аргументы . in4  =  pframe . аргументы . in4  или  '' ;аргументы . display_authors  =  pframe . args [ 'отображающие авторы' ]; - количество отображаемых имен участников; cs1 | 2 формат включает именааргументы . name_list_style  =  pframe . args [ 'стиль-список-имен' ]  или  '' ; - при установке на 'harv' отображать список участников в стиле sfn или harvаргументы . name_list_style  =  аргументы . name_list_style : нижний (); - сделайте это агностикомесли  is_set  ( pframe . args . last )  или  is_set  ( pframe . args . last1 )  илиis_set  ( pframe . args . author )  или  is_set  ( pframe . args . author1 )  тогда - должно быть хотя бы это, чтобы продолжитьаргументы . последний [ 1 ]  =  pframe . аргументы . last  или  pframe . аргументы . last1  или  PFRAME . аргументы . автор  или  pframe . аргументы . author1 ; - получить фамилию первого участникааргументы . citeref [ 1 ]  =  args . последний [ 1 ]; - добавить в citerefаргументы . first [ 1 ]  =  pframe . аргументы . first  или  pframe . аргументы . first1 ; - получить имя первого участникааргументы . ссылка [ 1 ]  =  pframe . args [ 'автор-ссылка' ]  или  pframe . аргументы [ 'автор-ссылка1' ]; - получить ссылку на статью первого авторааргументы . маска [ 1 ]  =  pframe . args [ 'маска-автора' ]  или  pframe . аргументы [ 'маска автора1' ]; - получить ссылку на статью первого автораместный  i  =  2 ; - указатель остальных именwhile  is_set  ( pframe . args [ 'last' .. i ])  или  is_set  ( pframe . args [ 'author' .. i ])  do - пройти через pframe.args и получить остальные именааргументы . last [ i ]  =  pframe . args [ 'last' .. i ]  или  pframe . args [ 'автор' .. я ]; -- фамилииаргументы . first [ i ]  =  pframe . args [ 'первый' .. я ]; - именааргументы . ссылка [ i ]  =  pframe . args [ 'автор-ссылка' .. я ]; - ссылкиаргументы . маска [ i ]  =  pframe . args [ 'маска автора' .. i ]; - маскиесли  5  >  i,  тоаргументы . citeref [ i ]  =  args . последний [ я ]; - собрать первые четыре фамилии для якоря CITEREFконецi  =  i  +  1 - поднять индексконецконецаргументы . p  =  pframe . аргументы . p  или  pframe . аргументы . страница  или  '' ; - номер (а) исходной страницы или расположениеаргументы . pp  =  pframe . аргументы . pp  или  pframe . аргументы . страницы  или  '' ;аргументы . loc  =  pframe . аргументы . loc  или  '' ;аргументы . ref  =  pframe . аргументы . ref  или  pframe . аргументы . Ссылка  или  '' ; - используется для соответствия | ref = <text> в исходном шаблоне cs1 | 2аргументы . ignore  =  'yes'  ==  pframe . аргументы [ 'игнорировать-ошибка' ]; - подавлять ложноположительные ошибки «нет цели»если  'cs2'  ==  pframe . аргументы . тогда режим аргументы . пс  =  '' ; - установить символ постскрипта в пустую строку, режим cs2аргументы . sepc  =  ',' ; - установить символ разделителя на запятую, режим cs2конецdo - ограничить область локальной температурылокальная  температура  =  pframe . аргументы . ps  или  pframe . аргументы . постскриптум ;если  is_set  ( temp ),  тоif  'none'  ==  temp : lower ()  then - если | ps = none или | postscript = none, тоаргументы . пс  =  '' ; - без припискиещеаргументы . ps  =  темп ; - переопределить постскриптум по умолчаниюконецконецend - конец ограничения области действияесли  'да'  ==  pframe . аргументы . nb  then - если нет скобок около года в ссылке на шаблон cs1 | 2аргументы . open  =  '' ; - отключить этиаргументы . закрыть  =  '' ;конецаргументы . url  =  pframe . аргументы . url  или - url главы или статьиpframe . args [ 'URL-адрес главы' ]  илиpframe . args [ 'URL-адрес' ]  или  '' ;args [ 'url-access' ]  =  pframe . аргументы [ 'URL-доступ' ];аргументы . год  =  pframe . аргументы . год  или  '' ; -- обязательныйargs [ 'год привязки' ]  =  pframe . args [ 'год привязки' ]  или  '' ;аргументы . err_msg  =  аргументы . err_msg  ..  check_years  ( аргумент . год ,  аргумент [ 'год привязки' ]);если  не  is_set  ( аргумент . вклад ),  тоаргументы . err_msg  =  аргументы . err_msg  ..  'требуемый вклад отсутствует.' ; - сообщение об ошибке, если источник не указанаргументы . вклад  =  аргументы . url ; - если установлено, это даст нам текст с возможностью ссылкиконецесли  args . последний [ 1 ]  ==  аргумент . in1  иаргументы . последний [ 2 ]  ==  аргумент . in2  иаргументы . последний [ 3 ]  ==  аргумент . in3  иаргументы . последний [ 4 ]  ==  аргумент . in4  ине  is_set  ( args . id ),  тогдааргументы . err_msg  =  аргументы . err_msg  ..  'required'  ..  code_open_tag  ..  '| id = </code> отсутствует параметр.' ; - сообщение об ошибке, если автор и источник совпадаютконецreturn  table.concat  ({ core  ( args ),  frame : extensionTag  ( 'templatestyles' ,  '' ,  { src = 'Module: Citation / CS1 / styles.css' })});конец- [[-------------------------- <ЭКСПОРТИРУЕМЫЕ ФУНКЦИИ> ----------------- -------------------------]]return  {harvc  =  harvc};