Documentación del módulo [ ver ] [ editar ] [ historial ] [ purgar ]
Implementa {{ sfn }}, {{ harvard citation }} y variantes de esas plantillas.
require ( 'Módulo: No globales' ); getArgs local = require ( 'Módulo: Argumentos' ). getArgs ;- [[-------------------------- --------------- --------------------------------------- una tabla para especificar valores iniciales.]]local args_default = {corchete_left = '' ,soporte_derecha = '' ,bracket_year_left = '' ,corchete_year_right = '' ,postscript = '' ,page = '' ,páginas = '' ,ubicación = '' ,page_sep = ", p. & nbsp;" ,pages_sep = ", págs. & nbsp;" ,ref = '' ,template = 'harv' , - si el nombre de la plantilla no se proporciona en {{#invoke:}} use esto};- [[-------------------------- --------------- --------------------------------------- busque anchor_id (lista de nombres CITEREF y año o texto de | ref =) en anchor_id_listel error 'sin objetivo' se puede suprimir con | ignore-err = yes cuando el objetivo no se puede encontrar porque el objetivo está dentrouna plantilla que envuelve otra plantilla; Es posible que no se elimine el error de 'varios objetivos']] función local target_check ( anchor_id , args ) espacio de nombres local = mw . título . getCurrentTitle (). espacio de nombres ;local anchor_id_list_module = mw . loadData ( 'Módulo: Notas al pie / anchor_id_list' );local anchor_id_list = anchor_id_list_module . anchor_id_list ;locales article_whitelist = anchor_id_list_module . article_whitelist ;local template_list = anchor_id_list_module . template_list ;local whitelist_module = mw . loadData ( 'Módulo: notas al pie / lista blanca' ); lista blanca local = módulo de lista blanca . lista blanca ;locales special_patterns = whitelist_module . patrones_especiales ;locales DNB_special_patterns = whitelist_module . DNB_special_patterns ;locales DNB_template_names = whitelist_module . DNB_template_names ;si 10 == espacio de nombres entoncesvolver '' ; - forma automática de | no-tracking = yes; TODO: ¿esto es demasiado amplio?final recuento local = anchor_id_list [ anchor_id ]; - nil cuando anchor_id no está en la lista; más un recuento mensaje local ; categoría local ;si no cuenta entoncessi args . ignora entoncesvolver '' ; - si ignorar es verdadero, entonces no hay mensaje, no hay categoríafinalsi article_whitelist y article_whitelist [ anchor_id ] entonces - si hay una lista blanca local de artículos y un ID de anclaje en ellavolver '' ; -- hechofinallocal wl_anchor_id = anchor_id ; - copia para ser modificada para indexar en la lista blancasi args . año entonces - para los identificadores de anclaje creados por esta plantilla (no en | ref =) que tienen una fechasi args . year : match ( '% d% l $' ) o - use el valor de la fecha para determinar si debemos eliminar el desambigadorargumentos . año : coincidencia ( 'n% .d%.% l $' ) oargumentos . year : match ( 'nd% l $' ) luegowl_anchor_id = wl_anchor_id : gsub ( '% l $' , '' ); - eliminar el desambigadorfinalfinallocal t_tbl = lista blanca [ wl_anchor_id ]; - obtener una lista de plantillas asociadas con este ID de anclajesi t_tbl entonces - cuando el ID de anclaje no está en la lista blanca, t_tbl es nulopara _ , t en ipairs ( t_tbl ) do : recorre la lista de plantillas asociadas con este ID de anclajeif template_list [ t ] entonces - si la plantilla asociada se encuentra en la lista de plantillas en el artículovolver '' ; - La identificación del ancla está incluida en la lista blanca y el artículo tiene una plantilla coincidente, por lo que no hay erroresfinalfinalfinalfor _ , pattern in ipairs ( special_patterns ) do - gire a través de los patrones especiales e intente hacer coincidirif anchor_id : match ( patrón ) entoncesvolver '' ;finalfinalpara _ , dnb_t en ipairs ( DNB_template_names o {}) do - desesperado ahora, ¿hay alguna plantilla de DNB? DNB_template_names puede ser nulo; tabla vacía evita errores de secuencia de comandosif template_list [ dnb_t ] entonces - si el artículo tiene esta plantilla DNBfor _ , pattern in ipairs ( DNB_special_patterns ) do - gire a través de los patrones comodín específicos de DNBif anchor_id : match ( pattern ) then - e intenta una coincidenciavolver '' ; - encontré una coincidenciafinalfinalfinalfinalmsg = 'sin destino:' .. anchor_id ; - anchor_id no encontradocategoría = '[[Categoría: errores sin objetivo Harv y Sfn]]' ;elseif 1 < cuente entoncesmsg = 'varios objetivos (' .. tally .. '×):' .. anchor_id ; - más de un anchor_id en este artículocategoría = 0 == espacio de nombres y '[[Categoría: errores de múltiples objetivos Harv y Sfn]]' o '' ; - categorizar solo en el espacio del artículoreturn '' .. args . plantilla .. 'error:' .. msg .. '([[: Categoría: Errores de plantilla Harv y Sfn | ayuda]]) ' .. categoría ;final- categoría = 0 == espacio de nombres y '[[Categoría: errores de plantilla Harv y Sfn]]' o ''; - categorizar solo en el espacio del artículocategoría = 0 == espacio de nombres y categoría o '' ; - categorizar solo en el espacio del artículo- use esta versión para mostrar mensajes de error- return msg y '' .. args.template .. 'error:' .. msg .. '( [[: Categoría: errores de plantilla Harv y Sfn | ayuda]]) '.. categoría o' ';- use esta versión para ocultar mensajes de errorreturn msg y ' .. args . plantilla .. 'error:' .. msg .. '([[: Categoría: errores de plantilla Harv y Sfn | ayuda]]) ' .. categoría o '' ;final- [[-------------------------- --------------- ------------------------------------------------- evalúa param para ver si es una de estas formas con o sin desambiguador de letras minúsculas: AAAA Dakota del Norte Dakota del Norte C. AAAA YYYY – YYYY (el separador es finalizado) YYYY – YY (el separador es finalizado)devuelve verdadero cuando param tiene una forma reconocida; falso más]] fecha_patrones locales = {'^% d% d% d% d?% l? $' ,'^ n% .d%.% l? $' ,'^ nd% l? $' ,'^ c%. % d% d% d% d?% l? $ ' ,'^% d% d% d% d–% d% d% d% d% l? $' ,'^% d% d% d% d–% d% d% l? $' ,} función local es_año ( param , args )argumentos . año = '' ; - utilizado para errores de harv;para _ , patrón en ipairs ( patterns_date ) hacersi mw . ustring . coincidir ( parámetro , patrón ) luegoargumentos . año = param ; - utilizado para errores de harv;devuelve verdadero ;finalfinalfinal- [[-------------------------- ----------------- -------------------------------------------------- --- devuelve un enlace de anclaje (CITEREF) formado por uno a cuatro nombres de autor, año y ubicación de la fuente (| p =, | pp =, loc =)]] núcleo de función local ( args ) resultado local ;local err_msg = ''si args . P5 ~ = '' entoncesif is_year ( args . P5 , args ) entoncesresult = table.concat ({ args . P1 , 'et al.' , args . bracket_year_left , args . P5 , args . bracket_year_right });demásargumentos . P5 = '' ; - cuando P5 no es un año no se incluye en el anclaresultar = table.concat ({ args . P1 , 'et al.' }); - y no lo rendericesfinalelseif argumentos . P4 ~ = '' entoncessi is_year ( args . P4 , args ) entoncesresult = table.concat ({ args . P1 , ',' , args . P2 , '& amp;' , args . P3 , '' , args . bracket_year_left , args . P4 , args . bracket_year_right }); - tres nombres y un añodemásresultar = table.concat ({ args . P1 , 'et al.' }); - cuatro nombresfinalelseif argumentos . P3 ~ = '' entoncessi is_year ( args . P3 , args ) entoncesresult = table.concat ({ args . P1 , '& amp;' , args . P2 , '' , args . bracket_year_left , args . P3 , args . bracket_year_right }); - dos nombres y un añodemásresultar = table.concat ({ args . P1 , ' ' args . P2 , ' ' ' & amp;' , args . P3 }); - tres nombres finalelseif argumentos . P2 ~ = '' entoncessi is_year ( args . P2 , args ) entoncesresult = table.concat ({ args . P1 , '' , args . bracket_year_left , args . P2 , args . bracket_year_right }); - un nombre y añodemásresultar = table.concat ({ args . P1 , '& amp;' , args . P2 }); - dos nombresfinaldemásresultado = argumentos . P1 ; - un nombrefinal- cuando el resultado de la fecha del autor termina con un punto (normalmente cuando el último parámetro posicional contiene 'nd')- y cuando no hay una ubicación en la fuente (no | p =, | pp = o | loc =)- y cuando el primer o único carácter de args.postscript es un punto- eliminar el punto final del resultado de la fecha del autor- el punto final del resultado de la fecha del autor se reemplazará más tarde con el contenido de args.postscript (generalmente un punto)if ( '.' == resultado : sub ( - 1 )) y ( '.' == args . postscript : sub ( 1 )) y ( '' == args . page ) y ( '' == args . pages ) y ( '' == args . location ) luegoresultado = resultado : gsub ( '%. $' , '' );finalsi args . ref ~ = 'ninguno' entonceslocal anchor_id ;si args . ref ~ = '' entoncesanchor_id = mw . uri . anchorEncode ( args . ref );err_msg = target_check ( anchor_id , args );result = table.concat ({ '[[#' , anchor_id , '|' , resultado , ']]' });demásanchor_id = mw . uri . anchorEncode ( table.concat ({ 'CITEREF' , args . P1 , args . P2 , args . P3 , args . P4 , args . P5 }));err_msg = target_check ( anchor_id , args );result = table.concat ({ '[[#' , anchor_id , '|' , resultado , ']]' });finalfinalsi args . page ~ = '' entoncesresultar = table.concat ({ resultado , args . page_sep , args . página });elseif argumentos . páginas ~ = '' entoncesresultar = table.concat ({ resultado , args . pages_sep , args . páginas });final si args . ubicación ~ = '' entoncesresultado = tabla.concat ({ resultado , ',' , args . ubicación });finalresult = table.concat ({ args . bracket_left , result , args . bracket_right , args . postscript }): gsub ( '% s +' , '' ); - eliminar espacios redundantesdevolver resultado .. err_msg ;final- [[-------------------------- --------------- ------------------------------------------ Debido a que todas las plantillas comparten un conjunto común de parámetros, una única función común para recuperar esos parámetrosdesde el marco y el marco principal.]] función local args_fetch ( marco , ps )locales args = args_default ; - crear una copia de la tabla predeterminada pframe local = frame : getParent (); - apuntar a la tabla de parámetros de la plantillapara k , v en pares ( frame . args ) hacer : anula los valores predeterminados con los valores proporcionados en #invoke: si los hayargumentos [ k ] = v ; finalargumentos . postscript = pframe . argumentos . postscript o pframe . argumentos . ps o ps ;si 'ninguno' == argumentos . posdata entoncesargumentos . postscript = '' ;finalargumentos . page = pframe . argumentos . p o pframe . argumentos . página o '' ;argumentos . páginas = pframe . argumentos . pp o pframe . argumentos . páginas o '' ;argumentos . ubicación = pframe . argumentos . loc o '' ;argumentos . ref = pframe . argumentos . ref o pframe . argumentos . Ref o '' ;argumentos . ignorar = ( 'sí' == pframe . args [ 'ignorar-falso-positivo' ]) o ( 'sí' == pframe . args [ 'ignorar-err' ]);para i , v en ipairs ({ 'P1' , 'P2' , 'P3' , 'P4' , 'P5' }) hacer : recorrer los cinco parámetros posicionales y recortar si está configurado, de lo contrario, cadena vacíaargs [ v ] = ( pframe . args [ i ] y mw . text . trim ( pframe . args [ i ])) o '' ;finalsi args . P5 y no is_year ( args . P5 , args ) entonceslocal i = 6 ; - inicializar el indexador al sexto parámetro posicionalmientras que pframe . args [ i ] do - en caso de que haya demasiados autores, recorra los autores buscando un añolocal v = mw . texto . recortar ( pframe . args [ i ]); -- podarif is_year ( v , args ) entonces - si es un añoargumentos . P5 = v ; - sobrescribe lo que estaba en args.P5 con añoromper ; - y abandona la búsquedafinali = i + 1 ; - golpear el indexadorfinalfinalreturn args ;final- [[-------------------------- --------------- ------------------------------- punto de entrada común para: {{harvard citation}} también conocido como {{harv}} {{Harvard citation no brackets}} también conocido como {{harvnb}} {{harvcol}} {{harvcolnb}} {{harvcoltxt}} {{Texto de cita de Harvard}} también conocido como {{harvtxt}} {{Harvp}}Las características distintivas (corchetes y separadores de página) se especifican en el {{#invoke}} de este módulo en las respectivas plantillas.]] función local harvard_citation ( marco )local args = args_fetch ( marco , '' ); - obtener la plantilla e invocar parámetros; la posdata predeterminada es una cadena vacíareturn core ( args );final- [[-------------------------- --------------- --------------------------------------------- utilizado por sfn () y sfnm (). Esta función corrige un problema con el gadget de información sobre herramientas de referencia donde no se muestra la información sobre herramientascuando un localizador de fuentes internas (| p =, | pp =, | loc =) tiene un wikilink externo que contiene un carácter #elimine los caracteres reservados uri de las URL en los parámetros | p =, | pp- y | loc = Los caracteres investigados son: ! # $ & '() * +, /:; =? @ [] ]] función local strip_url ( páginas )local escaped_uri ;si no son páginas o ( '' == páginas ) entonces páginas de retorno ;finalpara uri en páginas : gmatch ( '% [(% a [% w% +%.% -] *: //% S +)' ) do - para cada enlace externo obtener el uriescaped_uri = uri : gsub ( "([% (%)%. %%% +% -% *%?% [% ^% $%]])" , "%%% 1" ); - guardar una copia con caracteres de patrón lua escapadosuri = uri : gsub ( "[! #% $ & '% (%)% *% +, / :; =%? @% [%]%. %%]" , ' ' ); - eliminar caracteres reservados y '%' porque '% 20' (carácter de espacio) es un 'índice de captura no válido' luapáginas = páginas : gsub ( escaped_uri , uri , 1 ); - reemplace el uri original con la versión despojadafinal páginas de retorno ;final- [[-------------------------- ----------------- -------------------------------------------------- ----- punto de entrada para {{sfn}} y {{sfnp}}]] función local sfn ( marco )local args = args_fetch ( marco , '.' ); - obtener la plantilla e invocar parámetros; posdata predeterminada es un punto resultado local = core ( argumentos ); - ve a hacer un ancla CITEREF- Ponlo todo junto y luego quita los espacios redundantes nombre local = table.concat ({ ' FOOTNOTE ' , args . P1 , args . P2 , args . P3 , args . P4 , args . P5 , strip_url ( args . page ), strip_url ( args . pages ), strip_url ( args . ubicación )}): gsub ( '% s +' , '' ); marco de retorno : extensionTag ({ nombre = 'ref' , args = { nombre = nombre }, contenido = resultado });final- [[-------------------------- ----------------- -------------------------------------------------- --- punto de entrada común para {{sfnm}} y {{sfnmp}}Las características distintivas (corchetes) se especifican en el {{#invoke}} de este módulo en las respectivas plantillas.]] función local sfnm ( marco )locales args = args_default ; - crear una copia de la tabla predeterminada pframe local = frame : getParent (); - apuntar a la tabla de parámetros de la plantillalocal n = 1 ; - índice de fuente; esta es la 'n' en na1, ny, etc.local first_pnum = 1 ; - primero de un par de parámetros posicionales segundo_pnum local = 2 ; - segundo de un par de parámetros posicionaleslocal last_ps = 0 ; - índice de la última fuente con | nps = set last_index local = 0 ; - índice de la última fuente; estos se utilizan para determinar cuál de | ps = o | nps = terminará todo el renderizado salida local = {}; - tabla para contener fuentes renderizadas nota al pie local = { 'FOOTNOTE' }; - todo el autor, la fecha, la ubicación de la fuente se convierte en parte de la identificación de la nota al pie de la referencia; agregado a medida que avanzamospara k , v en pares ( frame . args ) hacer : anula los valores predeterminados con los valores proporcionados en #invoke: si los hayargumentos [ k ] = v ; finalmientras que la verdadera Dosi no es pframe . args [ table.concat ({ n , 'a1' })] y no pframe . args [ first_pnum ] luegoromper ; - sin na1 o parámetro posicional coincidente así hechofinalsi pframe . args [ table.concat ({ n , 'a1' })] entonces - ¿esta fuente usa parámetros con nombre?para _ , v en pares ({ 'P1' , 'P2' , 'P3' , 'P4' , 'P5' }) hacer - inicializar para esta fuenteargs [ v ] = '' ;finalpara i , v en ipairs ({ 'P1' , 'P2' , 'P3' , 'P4' , 'P5' }) hacer - extraer los parámetros de autor y año para esta fuenteargs [ v ] = pframe . args [ table.concat ({ n , 'a' , i })] o '' ; - intento de asignar el nombre del autorif '' == args [ v ] then - cuando no había un nombre de autorargs [ v ] = pframe . args [ table.concat ({ n , 'y' })] o '' ; - intento de asignar el añoromper ; - hecho con autor / fecha para esta fuentefinalfinalelse : esta fuente usa parámetros posicionalesargumentos . P1 = mw . texto . recortar ( pframe . args [ first_pnum ]); - sí, solo se admite un autorargumentos . P2 = ( PFRAME . Args [ second_pnum ] y mw . Texto . Recortar ( PFRAME . Args [ second_pnum ])) o '' ; - cuando el autor posicional, el año también debe ser posicionalpara _ , v en ipairs ({ 'P3' , 'P4' , 'P5' }) hacer - en blanco el resto de estos para esta fuenteargs [ v ] = '' ;finalfirst_pnum = first_pnum + 2 ; - la fuente debe utilizar el autor posicional y el año posicionalsecond_pnum = first_pnum + 1 ; - colóquelos para una posible siguiente fuente posicionalfinalargumentos . postscript = pframe . args [ table.concat ({ n , 'ps' })] o '' ;si 'ninguno' == argumentos . postscript entonces - esto por compatibilidad con otras plantillas de notas al pie; no hace nadaargumentos . postscript = '' ;finalargumentos . ref = pframe . args [ table.concat ({ n , 'ref' })] o '' ; - referencia alternativa para esta fuenteargumentos . page = pframe . args [ table.concat ({ n , 'p' })] o '' ; - Ubicaciones internas para esta fuente.argumentos . páginas = pframe . args [ table.concat ({ n , 'pp' })] o '' ;argumentos . ubicación = pframe . args [ table.concat ({ n , 'loc' })] o '' ;argumentos . ignore = ( 'yes' == pframe . args [ table.concat ({ n , 'ignore-false-positive' })]) o ( 'yes' == pframe . args [ table.concat ({ n , 'ignore -err ' })]);- args.ignore = 'sí' == pframe.args [table.concat ({n, 'ignore-err'})];table.insert ( out , core ( argumentos )); - guardar la representación de esta fuentepara k , v en pares ({ 'P1' , 'P2' , 'P3' , 'P4' , 'P5' }) hacer - crear el ID de FOOTNOTEsi '' ~ = args [ v ] entoncestable.insert ( nota al pie , argumentos [ v ]);finalfinalpara k , v en ipairs ({ 'página' , 'páginas' , 'ubicación' }) hacer - esto se hace por separado para que podamos quitar los caracteres reservados uri de los números de página enlazados extsi '' ~ = args [ v ] entoncestable.insert ( nota al pie , strip_url ( args [ v ]))finalfinallast_index = n ; - banderas utilizadas para seleccionar postscript de terminal desde nps o desde end_pssi '' ~ = argumentos . posdata entonceslast_ps = n ;finaln = n + 1 ; - golpe para el siguientefinal nombre local = table.concat ( nota al pie ): gsub ( '% s +' , '' ); - junte la nota al pie y elimine el espacio redundanteargumentos . end_ps = pframe . argumentos . postscript o pframe . argumentos . ps o '.' ; - esta es la posdata para el conjunto, no para las fuentes individualessi 'ninguno' == argumentos . end_ps entonces - no es un valor de parámetro sfnm original; agregado para compatibilidad con otras plantillas de notas al pieargumentos . end_ps = '' ;final resultado local = table.concat ({ table.concat ( out , ';' ), ( last_index == last_ps ) y '' o args . end_ps }); marco de retorno : extensionTag ({ nombre = 'ref' , args = { nombre = nombre }, contenido = resultado });final- [[-------------------------- ----------------- ------------------------------------------------- implementa {{sfnref}}]] función local sfnref ( marco )locales args = getArgs ( frame ); salida local = {};para i = 1 , 5 do - obtenga los primeros cinco argumentos si hay cinco argumentossi args [ i ] entoncesout [ i ] = args [ i ];demásromper ; - se producen menos de 5 argumentosfinalfinalsi 5 == # sale entonces - cuando hayamos visto cinco argumentos puede haber máslocal i = 6 ; - inicializar el indexador al sexto parámetro posicionalmientras que los argumentos [ i ] sí , en caso de que haya demasiados autores, recorra los autores buscando un añoif is_year ( args [ i ], args ) entonces - si es un añoout [ 5 ] = args [ i ]; - sobrescribe lo que estaba en args [5] con yearromper ; - y abandona la búsquedafinali = i + 1 ; - golpear el indexadorfinalfinalvolver mw . uri . anchorEncode ( 'CITEREF' .. table.concat ( fuera ));final- [[-------------------------- ----------------- ------------------------- ]]volver {harvard_citation = harvard_citation ,sfn = sfn ,sfnm = sfnm ,sfnref = sfnref ,};