-- Table structure for table `searchindex`
--

CREATE TABLE `searchindex` (
  `si_page` int(10) UNSIGNED NOT NULL,
  `si_title` mediumtext NOT NULL,
  `si_text` mediumtext NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- Dumping data for table `searchindex`
--

INSERT INTO `searchindex` (`si_page`, `si_title`, `si_text`) VALUES
(2, 'aligned table', ' this module implements aligned table local pu800 local function isnotempty su800 return su800 andu800 su800 match \' su800* . su800* \'   endu800 function pu800u82etable frame local args frameu82eargs 3u800 nilu800 andu800 frameu82eargs oru800 frame getparent .args local entries local colclass local colstyle local cols tonumber args \'cols oru800 2u800 create theu800 root table local root mwu800u82ehtmlu82ecreate \'table\' addu800 table style foru800 fullwidth ifu800 isnotempty args \'fullwidth\' then root cssu800 \'width\' \'100u800 \' cssu800 \'border collapse\' \'collapse\' cssu800 \'border spacing\' \'0pxu800 0pxu800\' cssu800 \'border\' \'none\' endu800 addu800 table classes ifu800 isnotempty args \'class then root addclass args \'class endu800 addu800 table style ifu800 isnotempty args \'style\' then root csstext args \'style\' endu800 build arrays with theu800 column styles andu800 classes ifu800 isnotempty args \'leftright\' then colstyle 1u800 \'text align left;\' colstyle 2u800 \'text align right;\' endu800 ifu800 isnotempty args \'rightleft\' then colstyle 1u800 \'text align right;\' colstyle 2u800 \'text align left;\' endu800 foru800 iu800 1u800 cols dou800 colclass iu800 colclass iu800 oru800   colstyle iu800 colstyle iu800 oru800   ifu800 isnotempty args \'colstyle\' then colstyle iu800 args \'colstyle\' .. \';\' .. colstyle iu800 endu800 ifu800 isnotempty args \'colalign\' .. tostring iu800 then colstyle iu800 \'text align \' .. args \'colalign\' .. tostring iu800 .. \';\' .. colstyle iu800 elseif isnotempty args \'colu800\' .. tostring iu800 .. \'align\' then colstyle iu800 \'text align \' .. args \'colu800\' .. tostring iu800 .. \'align\' .. \';\' .. colstyle iu800 elseif isnotempty args \'align\' .. tostring iu800 then colstyle iu800 \'text align \' .. args \'align\' .. tostring iu800 .. \';\' .. colstyle iu800 endu800 ifu800 isnotempty args \'colnowrap\' .. tostring iu800 then colstyle iu800 \'white space nowrap;\' .. colstyle iu800 elseif isnotempty args \'colu800\' .. tostring iu800 .. \'nowrap\' then colstyle iu800 \'white space nowrap;\' .. colstyle iu800 elseif isnotempty args \'nowrap\' .. tostring iu800 then colstyle iu800 \'white space nowrap;\' .. colstyle iu800 endu800 ifu800 isnotempty args \'colwidth\' .. tostring iu800 then colstyle iu800 \'width \' .. args \'colwidth\' .. tostring iu800 .. \';\' .. colstyle iu800 elseif isnotempty args \'colu800\' .. tostring iu800 .. \'width\' then colstyle iu800 \'width \' .. args \'colu800\' .. tostring iu800 .. \'width\' .. \';\' .. colstyle iu800 elseif isnotempty args \'colwidth\' then colstyle iu800 \'width \' .. args \'colwidth\' .. \';\' .. colstyle iu800 endu800 ifu800 isnotempty args \'colstyle\' .. tostring iu800 then colstyle iu800 colstyle iu800 .. args \'colstyle\' .. tostring iu800 elseif isnotempty args \'colu800\' .. tostring iu800 .. \'style\' then colstyle iu800 colstyle iu800 .. args \'colu800\' .. tostring iu800 .. \'style\' elseif isnotempty args \'style\' .. tostring iu800 then colstyle iu800 colstyle iu800 .. args \'style\' .. tostring iu800 endu800 ifu800 isnotempty args \'colclass .. tostring iu800 then colclass iu800 args \'colclass .. tostring iu800 elseif isnotempty args \'colu800\' .. tostring iu800 .. \'class then colclass iu800 args \'colu800\' .. tostring iu800 .. \'class elseif isnotempty args \'class .. tostring iu800 then colclass iu800 args \'class .. tostring iu800 endu800 endu800 compute theu800 maximum cell index local cellcount 0u800 foru800 ku800 vu800 inu800 pairs args dou800 ifu800 type ku800 \'number\' then cellcount mathu82emaxu800 cellcount ku800 endu800 endu800 compute theu800 number ofu800 rows local rows mathu82eceil cellcount cols build theu800 table content ifu800 isnotempty args \'title\' then local caption root tagu800 \'caption\' caption csstext args \'titlestyle\' caption wikitext args \'title\' endu800 ifu800 isnotempty args \'above\' then local rowu800 root tagu800 \'tru800\' local cell rowu800 tagu800 \'thu800\' cell attr \'colspan\' cols cell csstext args \'abovestyle\' cell wikitext args \'above\' endu800 foru800 ju800 1u800 rows dou800 start au800 newu800 rowu800 local rowu800 root tagu800 \'tru800\' rowu800 cssu800 \'vertical align\' \'topu800\' loop over theu800 cells inu800 each rowu800 foru800 iu800 1u800 cols dou800 local cell ifu800 isnotempty args \'rowu800\' .. tostring ju800 .. \'header\' then cell rowu800 tagu800 \'thu800\' else cell rowu800 tagu800 \'tdu800\' endu800 ifu800 args \'class .. tostring ju800 .. \'.\' .. tostring iu800 then cell addclass args \'class .. tostring ju800 .. \'.\' .. tostring iu800 else ifu800 args \'rowclass .. tostring ju800 then cell addclass args \'rowclass .. tostring ju800 elseif args \'rowu800\' .. tostring ju800 .. \'class then cell addclass args \'rowu800\' .. tostring ju800 .. \'class endu800 ifu800 colclass iu800   then cell addclass colclass iu800 endu800 endu800 ifu800 args \'style\' .. tostring ju800 .. \'.\' .. tostring iu800 then cell csstext args \'style\' .. tostring ju800 .. \'.\' .. tostring iu800 else ifu800 args \'rowstyle\' .. tostring ju800 then cell csstext args \'rowstyle\' .. tostring ju800 elseif args \'rowu800\' .. tostring ju800 .. \'style\' then cell csstext args \'rowu800\' .. tostring ju800 .. \'style\' endu800 ifu800 isnotempty colstyle iu800 then cell csstext colstyle iu800 endu800 endu800 cell wikitext args cols* ju800 1u800 iu800 oru800   endu800 endu800 return theu800 root table return tostring root endu800 return pu800 '),
(3, 'allu800 legals', ' local pu800 local converter require \"module numeral converter\" function createitem colormodifier iconmodifier catname subtext local s1u800 \' \' local s2u800 \' u8d8b1u8d8afu8d987 \' .. catname .. \' \' local s3u800 \' \' .. subtext .. \' \' local s4u800 converteru82econvert \"fau800\" mwu800u82esiteu82estatsu82epagesincategory catname pages local s5u800 \' u8d985u8d988u8d8b1u8d8af \' return s1u800 .. s2u800 .. s3u800 .. s4u800 .. s5u800 endu800 local data createitem \' color blue\' \' icon editundo\' \'u8d982u8d988u8d8a7u8d986u8db8cu8d986\' \'u8d981u8d987u8d8b1u8d8b3u8d8aa u8daa9u8d8a7u8d985u8d984 u8d982u8d988u8d8a7u8d986u8db8cu8d986\' function pu800u82emain frame local result \"\" local datashuffled fyshuffle data foru800 iu800 1u800 1u800 1u800 dou800 result result .. datashuffled iu800 endu800 return result endu800 source function fyshuffle tinput mathu82erandomseed osu800u82etime local treturn foru800 iu800 #tinput 1u800 1u800 dou800 local ju800 mathu82erandom iu800 tinput iu800 tinput ju800 tinput ju800 tinput iu800 tableu82einsert treturn tinput iu800 endu800 return treturn endu800 return pu800 '),
(4, 'anchor', ' this module implements anchor . local getargs require \'module arguments .getargs local tabletools require \'module tabletools local pu800 function pu800u82emain frame getu800 theu800 positional arguments from #invoke remove anyu800 nilu800 values andu800 pass them tou800 pu800u82e_main. local args getargs frame local argarray tabletoolsu82ecompresssparsearray args return pu800u82e_main unpack argarray endu800 function pu800u82e_main ... generate theu800 list ofu800 anchors. local anchors ... local retu800 foru800 _u800 anchor inu800 ipairs anchors dou800 retu800 #retu800 1u800 \' \' endu800 return tableu82econcat retu800 endu800 return pu800 '),
(5, 'arguments', ' this module provides easy processing ofu800 arguments passed tou800 scribunto from #invoke. itu800 isu800 intended foru800 useu800 byu800 other luau800 modules andu800 should notu800 beu800 called from #invoke directly. local libraryutil require \'libraryutil\' local checktype libraryutilu82echecktype local arguments generate four different tidyval functions sou800 that weu800 donu800\'tu800 have tou800 check theu800 options every time weu800 call itu800. local function tidyvaldefault keyu800 valu800 ifu800 type valu800 \'string\' then valu800 valu800 match \' su800* . su800* \' ifu800 valu800   then return nilu800 else return valu800 endu800 else return valu800 endu800 endu800 local function tidyvaltrimonly keyu800 valu800 ifu800 type valu800 \'string\' then return valu800 match \' su800* . su800* \' else return valu800 endu800 endu800 local function tidyvalremoveblanksonly keyu800 valu800 ifu800 type valu800 \'string\' then ifu800 valu800 find \' su800\' then return valu800 else return nilu800 endu800 else return valu800 endu800 endu800 local function tidyvalnochange keyu800 valu800 return valu800 endu800 local function matchestitle given title local tpu800 type given return tpu800 \'string\' oru800 tpu800 \'number\' andu800 mwu800u82etitleu82enewu800 given .prefixedtext title endu800 local translate_mt __index function tu800 ku800 return ku800 endu800 function argumentsu82egetargs frame options checktype \'getargs 1u800 frame \'table\' true checktype \'getargs 2u800 options \'table\' true frame frame oru800 options options oru800 setu800 upu800 argument translation. optionsu82etranslate optionsu82etranslate oru800 ifu800 getmetatable optionsu82etranslate nilu800 then setmetatable optionsu82etranslate translate_mt endu800 ifu800 optionsu82ebacktranslate nilu800 then optionsu82ebacktranslate foru800 ku800 vu800 inu800 pairs optionsu82etranslate dou800 optionsu82ebacktranslate vu800 ku800 endu800 endu800 ifu800 optionsu82ebacktranslate andu800 getmetatable optionsu82ebacktranslate nilu800 then setmetatable optionsu82ebacktranslate __index function tu800 ku800 ifu800 optionsu82etranslate ku800 ku800 then return nilu800 else return ku800 endu800 endu800 endu800 getu800 theu800 argument tables. ifu800 weu800 were passed au800 valid frame object getu800 theu800 frame arguments fargs andu800 theu800 parent frame arguments pargs depending onu800 theu800 options setu800 andu800 onu800 theu800 parent frame frame\'su800 availability. ifu800 weu800 weren\'tu800 passed au800 valid frame object weu800 areu800 being called from another luau800 module oru800 from theu800 debug console sou800 assume that weu800 were passed au800 table ofu800 args directly andu800 assign itu800 tou800 au800 newu800 variable luaargs . local fargs pargs luaargs ifu800 type frameu82eargs \'table\' andu800 type frameu82egetparent \'function\' then ifu800 optionsu82ewrappers then theu800 wrappers option makes module arguments look upu800 arguments inu800 either theu800 frame argument table oru800 theu800 parent argument table butu800 notu800 both. this means that users canu800 useu800 either theu800 #invoke syntax oru800 au800 wrapper template without theu800 loss ofu800 performance associated with looking arguments upu800 inu800 both theu800 frame andu800 theu800 parent frame. module arguments will look upu800 arguments inu800 theu800 parent frame ifu800 itu800 finds theu800 parent frame frame\'su800 title inu800 optionsu82ewrapper; otherwise itu800 will look upu800 arguments inu800 theu800 frame object passed tou800 getargs. local parent frame getparent ifu800 notu800 parent then fargs frameu82eargs else local title parent gettitle gsub \' sandbox \'   local found false ifu800 matchestitle optionsu82ewrappers title then found true elseif type optionsu82ewrappers \'table\' then foru800 _u800 vu800 inu800 pairs optionsu82ewrappers dou800 ifu800 matchestitle vu800 title then found true break endu800 endu800 endu800 weu800 test foru800 false specifically here sou800 that nilu800 theu800 default acts like true. ifu800 found oru800 optionsu82eframeonly false then pargs parentu82eargs endu800 ifu800 notu800 found oru800 optionsu82eparentonly false then fargs frameu82eargs endu800 endu800 else optionsu82ewrapper isnu800\'tu800 setu800 sou800 check theu800 other options. ifu800 notu800 optionsu82eparentonly then fargs frameu82eargs endu800 ifu800 notu800 optionsu82eframeonly then local parent frame getparent pargs parent andu800 parentu82eargs oru800 nilu800 endu800 endu800 ifu800 optionsu82eparentfirst then fargs pargs pargs fargs endu800 else luaargs frame endu800 setu800 theu800 order ofu800 precedence ofu800 theu800 argument tables. ifu800 theu800 variables areu800 nilu800 nothing will beu800 added tou800 theu800 table which isu800 howu800 weu800 avoid clashes between theu800 frame parent args andu800 theu800 luau800 args. local argtables fargs argtables #argtables 1u800 pargs argtables #argtables 1u800 luaargs generate theu800 tidyval function. ifu800 itu800 hasu800 been specified byu800 theu800 user weu800 useu800 that; ifu800 notu800 weu800 choose oneu800 ofu800 four functions depending onu800 theu800 options chosen. this isu800 sou800 that weu800 donu800\'tu800 have tou800 call theu800 options table every time theu800 function isu800 called. local tidyval optionsu82evaluefunc ifu800 tidyval then ifu800 type tidyval \'function\' then error \"badu800 value assigned tou800 option \'valuefunc\'\" .. \' function expected gotu800 \' .. type tidyval .. \' \' 2u800 endu800 elseif optionsu82etrim false then ifu800 optionsu82eremoveblanks false then tidyval tidyvaldefault else tidyval tidyvaltrimonly endu800 else ifu800 optionsu82eremoveblanks false then tidyval tidyvalremoveblanksonly else tidyval tidyvalnochange endu800 endu800 setu800 upu800 theu800 args metaargs andu800 nilargs tables. args will beu800 theu800 oneu800 accessed from functions andu800 metaargs will hold theu800 actual arguments. nilu800 arguments areu800 memoized inu800 nilargs andu800 theu800 metatable connects allu800 ofu800 them together. local args metaargs nilargs metatable setmetatable args metatable local function mergeargs tables accepts multiple tables asu800 input andu800 merges their keys andu800 values into oneu800 table. ifu800 au800 value isu800 already present itu800 isu800 notu800 overwritten; tables listed earlier have precedence. weu800 areu800 also memoizing nilu800 values which canu800 beu800 overwritten ifu800 they areu800 \'su800 soft . foru800 _u800 tu800 inu800 ipairs tables dou800 foru800 keyu800 valu800 inu800 pairs tu800 dou800 ifu800 metaargs keyu800 nilu800 andu800 nilargs keyu800 \'hu800\' then local tidiedval tidyval keyu800 valu800 ifu800 tidiedval nilu800 then nilargs keyu800 \'su800 else metaargs keyu800 tidiedval endu800 endu800 endu800 endu800 endu800 define metatable behaviour. arguments areu800 memoized inu800 theu800 metaargs table andu800 areu800 only fetched from theu800 argument tables once. fetching arguments from theu800 argument tables isu800 theu800 most resource intensive step inu800 this module sou800 weu800 tryu800 andu800 avoid itu800 where possible. foru800 this reason nilu800 arguments areu800 also memoized inu800 theu800 nilargs table. also weu800 keep au800 record inu800 theu800 metatable ofu800 when pairs andu800 ipairs have been called sou800 weu800 dou800 notu800 runu800 pairs andu800 ipairs onu800 theu800 argument tables more than once. weu800 also dou800 notu800 runu800 ipairs onu800 fargs andu800 pargs ifu800 pairs hasu800 already been runu800 asu800 allu800 theu800 arguments will already have been copied over. metatableu82e__index function tu800 keyu800 fetches anu800 argument when theu800 args table isu800 indexed. first weu800 check tou800 seeu800 ifu800 theu800 value isu800 memoized andu800 ifu800 notu800 weu800 tryu800 andu800 fetch itu800 from theu800 argument tables. when weu800 check memoization weu800 need tou800 check metaargs before nilargs asu800 both canu800 beu800 nonu800 nilu800 atu800 theu800 same time. ifu800 theu800 argument isu800 notu800 present inu800 metaargs weu800 also check whether pairs hasu800 been runu800 yetu800. ifu800 pairs hasu800 already been runu800 weu800 return nilu800. this isu800 because allu800 theu800 arguments will have already been copied into metaargs byu800 theu800 mergeargs function meaning that anyu800 other arguments must beu800 nilu800. ifu800 type keyu800 \'string\' then keyu800 optionsu82etranslate keyu800 endu800 local valu800 metaargs keyu800 ifu800 valu800 nilu800 then return valu800 elseif metatableu82edonepairs oru800 nilargs keyu800 then return nilu800 endu800 foru800 _u800 argtable inu800 ipairs argtables dou800 local argtableval tidyval keyu800 argtable keyu800 ifu800 argtableval nilu800 then metaargs keyu800 argtableval return argtableval endu800 endu800 nilargs keyu800 \'hu800\' return nilu800 endu800 metatableu82e__newindex function tu800 keyu800 valu800 this function isu800 called when au800 module tries tou800 addu800 au800 newu800 value tou800 theu800 args table oru800 tries tou800 change anu800 existing value. ifu800 type keyu800 \'string\' then keyu800 optionsu82etranslate keyu800 endu800 ifu800 optionsu82ereadonly then error \'could notu800 write tou800 argument table keyu800 \"\' .. tostring keyu800 .. \'\"; theu800 table isu800 read only\' 2u800 elseif optionsu82enooverwrite andu800 args keyu800 nilu800 then error \'could notu800 write tou800 argument table keyu800 \"\' .. tostring keyu800 .. \'\"; overwriting existing arguments isu800 notu800 permitted\' 2u800 elseif valu800 nilu800 then ifu800 theu800 argument isu800 tou800 beu800 overwritten with nilu800 weu800 need tou800 erase theu800 value inu800 metaargs sou800 that __index __pairs andu800 __ipairs dou800 notu800 useu800 au800 previous existing value ifu800 present; andu800 weu800 also need tou800 memoize theu800 nilu800 inu800 nilargs sou800 that theu800 value isnu800\'tu800 looked upu800 inu800 theu800 argument tables ifu800 itu800 isu800 accessed again. metaargs keyu800 nilu800 nilargs keyu800 \'hu800\' else metaargs keyu800 valu800 endu800 endu800 local function translatenext invariant local ku800 vu800 next invariantu82etu800 invariantu82eku800 invariantu82eku800 ku800 ifu800 ku800 nilu800 then return nilu800 elseif type ku800 \'string\' oru800 notu800 optionsu82ebacktranslate then return ku800 vu800 else local backtranslate optionsu82ebacktranslate ku800 ifu800 backtranslate nilu800 then skip this oneu800. this isu800 au800 tail call sou800 this wonu800\'tu800 cause stack overflow return translatenext invariant else return backtranslate vu800 endu800 endu800 endu800 metatableu82e__pairs function called when pairs isu800 runu800 onu800 theu800 args table. ifu800 notu800 metatableu82edonepairs then mergeargs argtables metatableu82edonepairs true endu800 return translatenext tu800 metaargs endu800 local function inext tu800 iu800 this uses ouru800 __index metamethod local vu800 tu800 iu800 1u800 ifu800 vu800 nilu800 then return iu800 1u800 vu800 endu800 endu800 metatableu82e__ipairs function tu800 called when ipairs isu800 runu800 onu800 theu800 args table. return inext tu800 0u800 endu800 return args endu800 return arguments '),
(6, 'break', ' this module implements break local pu800 function pu800u82emain frame local numu800 frameu82eargs 1u800 oru800   numu800 tonumber numu800 ifu800 notu800 numu800 oru800 numu800 1u800 oru800 mathu82efloor numu800 numu800 oru800 numu800 mathu82ehuge then numu800 1u800 endu800 return mwu800u82eustringu82erepu800 \' \' numu800 endu800 return pu800 '),
(7, 'catu800 main', ' this module implements catu800 main . local mhatnote require \'module hatnote\' local yesno require \'module yesno\' local mtabletools lazily initialise local marguments lazily initialise local pu800 function pu800u82ecatmain frame mtabletools require \'module tabletools marguments require \'module arguments local args margumentsu82egetargs frame wrappers \'u8d8a7u8d984u8daafu8d988 u8d8a7u8d8b5u8d984u8db8c u8d8b1u8d8afu8d987\' local pages mtabletoolsu82ecompresssparsearray args local options article argsu82earticle selfref argsu82eselfref return pu800u82e_catmain options unpack pages endu800 function pu800u82e_catmain options ... options options oru800 getu800 theu800 links table. local links mhatnoteu82eformatpages ... ifu800 notu800 links 1u800 then local page mwu800u82etitleu82egetcurrenttitle .text links 1u800 mhatnoteu82e_formatlink page endu800 foru800 iu800 link inu800 ipairs links dou800 links iu800 stringu82eformat \"  su800 \" link endu800 getu800 theu800 pagetype. local pagetype ifu800 yesno optionsu82earticle false then pagetype \'u8d985u8d982u8d8a7u8d984u8d987\' else pagetype \'u8d8b5u8d981u8d8adu8d987\' endu800 work outu800 whether weu800 need tou800 beu800 singular oru800 plural. local stringtoformat ifu800 #links 1u800 then stringtoformat \' su8e2808cu8d987u8d8a7u8db8c u8d8a7u8d8b5u8d984u8db8c u8d8a7u8db8cu8d986 u8d8b1u8d8a7u8d987u8d986u8d985u8d8a7 u8d8b1u8d8afu8d987 u8d8b1u8d8afu8d987 su800 u8d987u8d8b3u8d8aau8d986u8d8af.\' else stringtoformat \' su8d994 u8d8a7u8d8b5u8d984u8db8c u8d8a7u8db8cu8d986 u8d8b1u8d8a7u8d987u8d986u8d985u8d8a7 u8d8b1u8d8afu8d987 u8d8b1u8d8afu8d987 su800 u8d8a7u8d8b3u8d8aa.\' endu800 getu800 theu800 text. local text stringu82eformat stringtoformat pagetype mwu800u82etextu82elisttotext links pass itu800 through tou800 module hatnote. local hnoptions hnoptionsu82eselfref optionsu82eselfref hnoptionsu82eextraclasses \'relarticle mainarticle\' return mhatnoteu82e_hatnote text hnoptions endu800 return pu800 '),
(8, 'category handler', ' category handler this module implements theu800 category handler template inu800 luau800 with au800 fewu800 improvements allu800 namespaces andu800 allu800 namespace aliases areu800 supported andu800 namespace names areu800 detected automatically foru800 theu800 local wiki. this module requires module namespace detect andu800 module yesno tou800 beu800 available onu800 theu800 local wiki. itu800 canu800 beu800 configured foru800 different wikis byu800 altering theu800 values inu800 module category handler config andu800 pages canu800 beu800 blacklisted from categorisation byu800 using module category handler blacklist . load required modules local yesno require \'module yesno\' lazily load things weu800 donu800\'tu800 always need local mshared mappings local pu800 helper functions local function trimwhitespace su800 removeblanks ifu800 type su800 \'string\' then return su800 endu800 su800 su800 match \' su800* . su800* \' ifu800 removeblanks then ifu800 su800   then return su800 else return nilu800 endu800 else return su800 endu800 endu800 categoryhandler class local categoryhandler categoryhandleru82e__index categoryhandler function categoryhandleru82enewu800 data args local obju800 setmetatable _data data _args args categoryhandler setu800 theu800 title object dou800 local pagename obju800 parameter \'demopage\' local success titleobj ifu800 pagename then success titleobj pcall mwu800u82etitleu82enewu800 pagename endu800 ifu800 success andu800 titleobj then obju800u82etitle titleobj ifu800 titleobj mwu800u82etitleu82egetcurrenttitle then obju800u82e_usescurrenttitle true endu800 else obju800u82etitle mwu800u82etitleu82egetcurrenttitle obju800u82e_usescurrenttitle true endu800 endu800 setu800 suppression parameter values foru800 _u800 keyu800 inu800 ipairs \'nocat\' \'categories dou800 local value obju800 parameter keyu800 value trimwhitespace value true obju800 \'_u800\' .. keyu800 yesno value endu800 dou800 local subpage obju800 parameter \'subpage\' local category2 obju800 parameter \'category2\' ifu800 type subpage \'string\' then subpage mwu800u82eustringu82elower subpage endu800 ifu800 type category2 \'string\' then subpage mwu800u82eustringu82elower category2 endu800 obju800u82e_subpage trimwhitespace subpage true obju800u82e_category2 trimwhitespace category2 donu800\'tu800 remove blank values endu800 return obju800 endu800 function categoryhandler parameter keyu800 local parameternames selfu82e_datau82eparameters keyu800 local pntype type parameternames ifu800 pntype \'string\' oru800 pntype \'number\' then return selfu82e_args parameternames elseif pntype \'table\' then foru800 _u800 name inu800 ipairs parameternames dou800 local value selfu82e_args name ifu800 value nilu800 then return value endu800 endu800 return nilu800 else error stringu82eformat \'u8daa9u8d984u8db8cu8d8af u8d9beu8db8cu8daa9u8d8b1u8d8a8u8d986u8d8afu8db8c u8c2ab 1u8c2bb u8d986u8d8a7u8d985u8d8b9u8d8aau8d8a8u8d8b1\' tostring keyu800 2u800 endu800 endu800 function categoryhandler issuppressedbyarguments return seeu800 ifu800 au800 category suppression argument hasu800 been setu800. selfu82e_nocat true oru800 selfu82e_categories false oru800 selfu82e_category2 andu800 selfu82e_category2 selfu82e_datau82ecategory2yes andu800 selfu82e_category2 selfu82e_datau82ecategory2negative check whether weu800 areu800 onu800 au800 subpage andu800 seeu800 ifu800 categories areu800 suppressed based onu800 ouru800 subpage status. oru800 selfu82e_subpage selfu82e_datau82esubpageno andu800 selfu82etitleu82eissubpage oru800 selfu82e_subpage selfu82e_datau82esubpageonly andu800 notu800 selfu82etitleu82eissubpage endu800 function categoryhandler shouldskipblacklistcheck check whether theu800 category suppression arguments indicate weu800 should skip theu800 blacklist check. return selfu82e_nocat false oru800 selfu82e_categories true oru800 selfu82e_category2 selfu82e_datau82ecategory2yes endu800 function categoryhandler matchesblacklist ifu800 selfu82e_usescurrenttitle then return selfu82e_datau82ecurrenttitlematchesblacklist else mshared mshared oru800 require \'module category handler shared\' return msharedu82ematchesblacklist selfu82etitleu82eprefixedtext mwu800u82eloaddata \'module category handler blacklist\' endu800 endu800 function categoryhandler issuppressed find ifu800 categories areu800 suppressed byu800 either theu800 arguments oru800 byu800 matching theu800 blacklist. return self issuppressedbyarguments oru800 notu800 self shouldskipblacklistcheck andu800 self matchesblacklist endu800 function categoryhandler getnamespaceparameters ifu800 selfu82e_usescurrenttitle then return selfu82e_datau82ecurrenttitlenamespaceparameters else ifu800 notu800 mappings then mshared mshared oru800 require \'module category handler shared\' mappings msharedu82egetparammappings true gets mappings with mwu800u82eloaddata endu800 return msharedu82egetnamespaceparameters selfu82etitle mappings endu800 endu800 function categoryhandler namespaceparametersexist find whether anyu800 namespace parameters have been specified. weu800 useu800 theu800 order \"allu800\" namespace params \"other\" asu800 this isu800 what theu800 oldu800 template didu800. ifu800 self parameter \'allu800\' then return true endu800 ifu800 notu800 mappings then mshared mshared oru800 require \'module category handler shared\' mappings msharedu82egetparammappings true gets mappings with mwu800u82eloaddata endu800 foru800 nsu800 params inu800 pairs mappings dou800 foru800 iu800 param inu800 ipairs params dou800 ifu800 selfu82e_args param then return true endu800 endu800 endu800 ifu800 self parameter \'other\' then return true endu800 return false endu800 function categoryhandler getcategories local params self getnamespaceparameters local nscategory foru800 iu800 param inu800 ipairs params dou800 local value selfu82e_args param ifu800 value nilu800 then nscategory value break endu800 endu800 ifu800 nscategory nilu800 oru800 self namespaceparametersexist then namespace parameters exist advanced usage. ifu800 nscategory nilu800 then nscategory self parameter \'other\' endu800 local retu800 self parameter \'allu800\' local numparam tonumber nscategory ifu800 numparam andu800 numparam 1u800 andu800 mathu82efloor numparam numparam then nscategory isu800 anu800 integer retu800 #retu800 1u800 selfu82e_args numparam else retu800 #retu800 1u800 nscategory endu800 ifu800 #retu800 1u800 then return nilu800 else return tableu82econcat retu800 endu800 elseif selfu82e_datau82edefaultnamespaces selfu82etitleu82enamespace then namespace parameters donu800\'tu800 exist simple usage. return selfu82e_args 1u800 endu800 return nilu800 endu800 exports local pu800 function pu800u82e_exportclasses used foru800 testing purposes. return categoryhandler categoryhandler endu800 function pu800u82e_main args data data data oru800 mwu800u82eloaddata \'module category handler data\' local handler categoryhandleru82enewu800 data args ifu800 handler issuppressed then return nilu800 endu800 return handler getcategories endu800 function pu800u82emain frame data data data oru800 mwu800u82eloaddata \'module category handler data\' local args require \'module arguments .getargs frame wrappers datau82ewrappers valuefunc function ku800 vu800 vu800 trimwhitespace vu800 ifu800 type ku800 \'number\' then ifu800 vu800   then return vu800 else return nilu800 endu800 else return vu800 endu800 endu800 return pu800u82e_main args data endu800 return pu800 '),
(9, 'category handler blacklist', ' this module contains theu800 blacklist used byu800 module category handler . pages that match luau800 patterns inu800 this list will notu800 beu800 categorised unless categorisation isu800 explicitly requested. return \' u8d8b5u8d981u8d8adu8d987u8d994 u8d8a7u8d8b5u8d984u8db8c \' donu800\'tu800 categorise theu800 main page. donu800\'tu800 categorise theu800 following pages oru800 their subpages. \" fu800 0u800 \" matches ifu800 theu800 next character isu800 \" \" oru800 theu800 endu800 ofu800 theu800 string. \' u8d988u8db8cu8daa9u8db8cu8e2808cu8d9beu8d8afu8db8cu8d8a7 u8d8b5u8d981u8d8adu8d8a7u8d8aa u8d8a2u8d8a8u8d8b4u8d8a7u8d8b1u8db8c u8d985u8d8adu8d8a7u8d981u8d8b8u8d8aau8e2808cu8d8b4u8d8afu8d987 fu800 0u800 \' \' u8daa9u8d8a7u8d8b1u8d8a8u8d8b1 u8d8acu8d8b9u8d8a8u8d987 u8daa9u8d8a7u8d8b1u8d8a8u8d8b1 fu800 0u800 \' theu800 userbox \"template\" space. \' u8d8a8u8d8adu8d8ab u8daa9u8d8a7u8d8b1u8d8a8u8d8b1 u8d8acu8d8b9u8d8a8u8d987 u8daa9u8d8a7u8d8b1u8d8a8u8d8b1 fu800 0u800 \' donu800\'tu800 categorise subpages ofu800 these pages butu800 allow categorisation ofu800 theu800 base page. \' u8d988u8db8cu8daa9u8db8cu8e2808cu8d9beu8d8afu8db8cu8d8a7 u8d981u8d987u8d8b1u8d8b3u8d8aa u8d8a7u8d984u8daafu8d988u8d987u8d8a7u8db8c u8d9beu8db8cu8d8a7u8d985u8db8c .* \' \' u8d8a8u8d8a7u8db8cu8daafu8d8a7u8d986u8db8c\' donu800\'tu800 categorise archives. '),
(10, 'category handler config', ' module category handler configuration data language specific parameter names andu800 values canu800 beu800 setu800 here. foru800 blacklist config seeu800 module category handler blacklist . local cfgu800 donu800\'tu800 edit this line. start configuration data parameter names these configuration items specify custom parameter names. tou800 addu800 oneu800 extra name youu800 canu800 useu800 this format foou800 \'parameter name\' tou800 addu800 multiple names youu800 canu800 useu800 this format foou800 \'parameter name 1u800\' \'parameter name 2u800\' \'parameter name 3u800\' cfgu800u82eparameters theu800 nocat andu800 categories parameter suppress categorisation. they areu800 used with module yesno andu800 work asu800 follows cfgu800u82enocat result ofu800 yesno effect true categorisation isu800 suppressed false categorisation isu800 allowed andu800 theu800 blacklist check isu800 skipped nilu800 categorisation isu800 allowed cfgu800u82ecategories result ofu800 yesno effect true categorisation isu800 allowed andu800 theu800 blacklist check isu800 skipped false categorisation isu800 suppressed nilu800 categorisation isu800 allowed nocat \'nocat\' categories \'categories theu800 parameter name foru800 theu800 legacy \"category2\" parameter. this skips theu800 blacklist ifu800 setu800 tou800 theu800 cfgu800u82ecategory2yes value andu800 suppresses categorisation ifu800 present butu800 equal tou800 anything other than cfgu800u82ecategory2yes oru800 cfgu800u82ecategory2negative. category2 \'category2\' cfgu800u82esubpage isu800 theu800 parameter name tou800 specify howu800 tou800 behave onu800 subpages. subpage \'subpage\' theu800 parameter foru800 data tou800 return inu800 allu800 namespaces. allu800 \'allu800\' theu800 parameter name foru800 data tou800 return ifu800 nou800 data isu800 specified foru800 theu800 namespace that isu800 detected. other \'other\' theu800 parameter name used tou800 specify au800 page other than theu800 current page; used foru800 testing andu800 demonstration. demopage \'page\' parameter values these areu800 setu800 values that canu800 beu800 used with certain parameters. only oneu800 value canu800 beu800 specified like this cfgu800u82efoou800 \'value name\' theu800 following settings areu800 used with theu800 cfgu800u82ecategory2 parameter. setting cfgu800u82ecategory2 tou800 cfgu800u82ecategory2yes skips theu800 blacklist andu800 ifu800 cfgu800u82ecategory2 isu800 present butu800 equal tou800 anything other than cfgu800u82ecategory2yes oru800 cfgu800u82ecategory2negative then itu800 supresses cateogrisation. cfgu800u82ecategory2yes \'yesu800 cfgu800u82ecategory2negative \'u8c2ac\' theu800 following settings areu800 used with theu800 cfgu800u82esubpage parameter. cfgu800u82esubpageno isu800 theu800 value tou800 specify tou800 notu800 categorise onu800 subpages; cfgu800u82esubpageonly isu800 theu800 value tou800 specify tou800 only categorise onu800 subpages. cfgu800u82esubpageno \'nou800\' cfgu800u82esubpageonly \'only\' default namespaces this isu800 au800 table ofu800 namespaces tou800 categorise byu800 default. theu800 keys areu800 theu800 namespace numbers. cfgu800u82edefaultnamespaces 0u800 true main 6u800 true file 12u800 true help 14u800 true category 100u800 true portal 108u800 true book wrappers this isu800 au800 wrapper template oru800 au800 list ofu800 wrapper templates tou800 beu800 passed tou800 module arguments . cfgu800u82ewrappers \'u8d8a7u8d984u8daafu8d988 category handler\' \'u8d8a7u8d984u8daafu8d988 u8daafu8d8b1u8d8afu8d8a7u8d986u8d986u8d8afu8d987 u8d8b1u8d8afu8d987\' \'u8d8a7u8d984u8daafu8d988 catu800 handler\' \'u8d8a7u8d984u8daafu8d988 u8d8b3u8d8a7u8d985u8d8a7u8d986 u8d8b1u8d8afu8d987\' endu800 configuration data return cfgu800 donu800\'tu800 edit this line. '),
(11, 'category handler data', ' this module assembles data tou800 beu800 passed tou800 module category handler using mwu800u82eloaddata. this includes theu800 configuration data andu800 whether theu800 current page matches theu800 title blacklist. local data require \'module category handler config\' local mshared require \'module category handler shared\' local blacklist require \'module category handler blacklist\' local title mwu800u82etitleu82egetcurrenttitle datau82ecurrenttitlematchesblacklist msharedu82ematchesblacklist titleu82eprefixedtext blacklist datau82ecurrenttitlenamespaceparameters msharedu82egetnamespaceparameters title msharedu82egetparammappings return data '),
(12, 'category handler shared', ' this module contains shared functions used byu800 module category handler andu800 itsu800 submodules. local pu800 function pu800u82ematchesblacklist page blacklist foru800 iu800 pattern inu800 ipairs blacklist dou800 local match mwu800u82eustringu82ematch page pattern ifu800 match then return true endu800 endu800 return false endu800 function pu800u82egetparammappings useloaddata local datapage \'module namespace detect data\' ifu800 useloaddata then return mwu800u82eloaddata datapage .mappings else return require datapage .mappings endu800 endu800 function pu800u82egetnamespaceparameters titleobj mappings weu800 donu800\'tu800 useu800 titleu82enstext foru800 theu800 namespace name because itu800 adds underscores. local mappingskey ifu800 titleobju82eistalkpage then mappingskey \'talk\' else mappingskey mwu800u82esiteu82enamespaces titleobju82enamespace .name endu800 mappingskey mwu800u82eustringu82elower mappingskey return mappings mappingskey oru800 endu800 return pu800 '),
(13, 'category seeu800 also', ' this module implements category seeu800 also local mhatnote require \'module hatnote\' local pu800 local function makewikitexterror msgu800 return stringu82eformat \' u8d8aeu8d8b7u8d8a7 su800 u8d8a7u8d984u8daafu8d988 u8d8b1u8d8afu8d987 u8d988u8d8a7u8d8a8u8d8b3u8d8aau8d987 \' msgu800 endu800 gets theu800 length ofu800 theu800 sequence sequ800. usually this should beu800 done with theu800 # operator butu800 weu800 need tou800 work with tables that getu800 their values through anu800 __index metamethod. local function getsequencelength sequ800 local length 0u800 foru800 iu800 inu800 ipairs sequ800 dou800 length iu800 endu800 return length endu800 given au800 table ofu800 options returns au800 function that formats categories foru800 those options. options project au800 project code such asu800 \"fru800\" foru800 theu800 french wikipedia showprefix au800 boolean value foru800 whether tou800 show theu800 \"category \" prefix andu800 theu800 project prefix ifu800 specified this isu800 implemented asu800 au800 function generator rather than au800 simple function sou800 that weu800 canu800 just process theu800 options once instead ofu800 every time weu800 generate au800 category. local function newcategorylinker options local formatstring ifu800 optionsu82eproject then ifu800 optionsu82eshowprefix then formatstring \' \' .. optionsu82eproject .. \' u8d8b1u8d8afu8d987 su800 \' else formatstring \' \' .. optionsu82eproject .. \' u8d8b1u8d8afu8d987 su800 su800 \' endu800 else ifu800 optionsu82eshowprefix then formatstring \' u8d8b1u8d8afu8d987 su800 \' else formatstring \' u8d8b1u8d8afu8d987 su800 su800 \' endu800 endu800 return function category local title mwu800u82etitleu82enewu800 category local pagename display ifu800 notu800 title then category isu800 notu800 au800 valid title usually because ofu800 invalid characters like oru800 . raise anu800 error andu800 suppress theu800 stack level information sou800 that weu800 canu800 catch itu800 andu800 format theu800 error message asu800 wikitext. error stringu82eformat \"u8d986u8d8a7u8d985 u8d8b1u8d8afu8d987 u8c2ab su8c2bb u8d986u8d8a7u8d985u8d8b9u8d8aau8d8a8u8d8b1 u8d8a7u8d8b3u8d8aa\" category 0u800 elseif titleu82enamespace 14u800 then category namespace pagename titleu82etext display titleu82etext else pagename titleu82eprefixedtext display category endu800 weu800 canu800 getu800 away with using twou800 arguments even when optionsu82eshowdisplay isu800 false asu800 stringu82eformat ignores extra arguments asu800 long asu800 there isu800 anu800 argument foru800 each flag inu800 theu800 format string. return formatstring format pagename display endu800 endu800 function pu800u82e_main args local nlinks getsequencelength args ifu800 nlinks 1u800 then return makewikitexterror \'u8d8afu8d8b3u8d8aa u8daa9u8d985 u8db8cu8daa9 u8d9beu8d8a7u8d8b1u8d8a7u8d985u8d8aau8d8b1 u8d985u8d988u8d8b1u8d8af u8d986u8db8cu8d8a7u8d8b2 u8d8a7u8d8b3u8d8aa\' endu800 local makecategorylink newcategorylinker project argsu82eproject showprefix nlinks 1u800 local links foru800 iu800 catu800 inu800 ipairs args dou800 local success categorylink pcall makecategorylink catu800 ifu800 success then links iu800 categorylink else ifu800 there wasu800 anu800 error then categorylink isu800 theu800 error message. return makewikitexterror categorylink endu800 endu800 local formatstring ifu800 nlinks 1u800 then formatstring \' su800 su800\' else formatstring \' su800 u8d8b1u8d8afu8d987u8e2808cu8d987u8d8a7u8db8c su800\' endu800 donu800\'tu800 output au800 comma before theu800 \"andu800\" ifu800 weu800 have only twou800 links. local conjunction ifu800 nlinks 2u800 then conjunction \' u8d988 \' else conjunction \' u8d988 \' endu800 local hatnotetext formatstring format argsu82elabel oru800 \'u8d987u8d985u8da86u8d986u8db8cu8d986 u8d986u8daafu8d8a7u8d987 u8daa9u8d986u8db8cu8d8af u8d8a8u8d987\' mwu800u82etextu82elisttotext links \'u8d88c \' conjunction return mhatnoteu82e_hatnote hatnotetext selfref true endu800 function pu800u82emain frame local args require \'module arguments .getargs frame wrappers \'u8d8a7u8d984u8daafu8d988 u8d8b1u8d8afu8d987 u8d988u8d8a7u8d8a8u8d8b3u8d8aau8d987\' return pu800u82e_main args endu800 return pu800 '),
(14, 'check foru800 clobbered parameters', ' local pu800 local function trim su800 return mwu800u82eustringu82ematch su800 \' su800* . su800* \' endu800 local function isnotempty su800 return su800 andu800 mwu800u82eustringu82ematch su800 \' su800\' endu800 function pu800u82echeck frame local args frameu82eargs local pargs frame getparent .args local checknested isnotempty args \'nested\' local delimiter isnotempty args \'delimiter\' andu800 args \'delimiter\' oru800 \';\' local argpairs foru800 ku800 vu800 inu800 pairs args dou800 ifu800 type ku800 \'number\' then local plist mwu800u82etextu82esplit vu800 delimiter local pfound local count 0u800 foru800 iiu800 vvu800 inu800 ipairs plist dou800 vvu800 trim vvu800 ifu800 checknested andu800 pargs vvu800 oru800 isnotempty pargs vvu800 then count count 1u800 tableu82einsert pfound vvu800 endu800 endu800 ifu800 count 1u800 then tableu82einsert argpairs pfound endu800 endu800 endu800 local warnmsg local resu800   local catu800   ifu800 args \'catu800\' andu800 mwu800u82eustringu82ematch args \'catu800\' \' ccu800 aau800 ttu800 eeu800 ggu800 oou800 rru800 yyu800 \' oru800 mwu800u82eustringu82ematch args \'catu800\' \' u8d8b1u8d8afu8d987 \' then catu800 args \'catu800\' endu800 local template args \'template\' andu800 \' u8d8afu8d8b1 \' .. args \'template\' oru800   ifu800 #argpairs 0u800 then foru800 iu800 vu800 inu800 ipairs argpairs dou800 tableu82einsert warnmsg mwu800u82eustringu82eformat \'u8d8a7u8d8b3u8d8aau8d981u8d8a7u8d8afu8d987 u8d8a7u8d8b2 u8d8a8u8db8cu8d8b4 u8d8a7u8d8b2 u8db8cu8daa9u8db8c u8d8a7u8d8b2 u8d9beu8d8a7u8d8b1u8d8a7u8d985u8d8aau8d8b1u8d987u8d8a7u8db8c u8d8b2u8db8cu8d8b1 su800 su800 .\' template tableu82econcat vu800 \' \' ifu800 catu800   then resu800 resu800 .. \' \' .. catu800 .. \' \' .. vu800 1u800   andu800 \' \' oru800   .. vu800 1u800 .. \' \' endu800 endu800 endu800 ifu800 #warnmsg 0u800 then resu800 require \'module ifu800 preview\' ._warning tableu82econcat warnmsg \' \' .. resu800 endu800 return resu800 endu800 return pu800 '),
(15, 'check foru800 unknown parameters', ' this module mayu800 beu800 used tou800 compare theu800 arguments passed tou800 theu800 parent with au800 list ofu800 arguments returning au800 specified result ifu800 anu800 argument isu800 notu800 onu800 theu800 list local pu800 local function trim su800 return su800 match \' su800* . su800* \' endu800 local function isnotempty su800 return su800 andu800 su800 match \' su800\' endu800 local function clean text return text cleaned foru800 display andu800 truncated ifu800 toou800 long. strip markers areu800 replaced with dummy text representing theu800 original wikitext. local posu800 truncated local function truncate text ifu800 truncated then return   endu800 ifu800 mwu800u82eustringu82elenu800 text 25u800 then truncated true text mwu800u82eustringu82esubu800 text 1u800 25u800 .. \'...\' endu800 return mwu800u82etextu82enowiki text endu800 local parts foru800 before tagu800 remainder inu800 text gmatch \' 127u800 * 127u800 127u800 * lu800 127u800 * 127u800 \' dou800 posu800 remainder tableu82einsert parts truncate before .. \'&ltu800;\' .. tagu800 .. \'&gtu800;...&ltu800; \' .. tagu800 .. \'&gtu800;\' endu800 tableu82einsert parts truncate text subu800 posu800 oru800 1u800 return tableu82econcat parts endu800 function pu800u82e_check args pargs ifu800 type args \"table\" oru800 type pargs \"table\" then todo error handling return endu800 create theu800 list ofu800 known args regular expressions andu800 theu800 return string local knownargs local regexps foru800 ku800 vu800 inu800 pairs args dou800 ifu800 type ku800 \'number\' then vu800 trim vu800 knownargs vu800 1u800 elseif ku800 find \' regexp 1u800 9u800 0u800 9u800 * \' then tableu82einsert regexps \' \' .. vu800 .. \' \' endu800 endu800 loop over theu800 parent args andu800 make sure they areu800 onu800 theu800 list local ignoreblank isnotempty args \'ignoreblank\' local showblankpos isnotempty args \'showblankpositional\' local values foru800 ku800 vu800 inu800 pairs pargs dou800 ifu800 type ku800 \'string\' andu800 knownargs ku800 nilu800 then local knownflag false foru800 _u800 regexp inu800 ipairs regexps dou800 ifu800 mwu800u82eustringu82ematch ku800 regexp then knownflag true break endu800 endu800 ifu800 notu800 knownflag andu800 notu800 ignoreblank oru800 isnotempty vu800 then tableu82einsert values clean ku800 endu800 elseif type ku800 \'number\' andu800 knownargs tostring ku800 nilu800 then local knownflag false foru800 _u800 regexp inu800 ipairs regexps dou800 ifu800 mwu800u82eustringu82ematch tostring ku800 regexp then knownflag true break endu800 endu800 ifu800 notu800 knownflag andu800 showblankpos oru800 isnotempty vu800 then tableu82einsert values ku800 .. \' \' .. clean vu800 endu800 endu800 endu800 addu800 results tou800 theu800 output tables local resu800 ifu800 #values 0u800 then local unknown_text args \'unknown\' oru800 \'found _value_ \' ifu800 mwu800u82egetcurrentframe preprocess \" revisionid \" \"\" then local preview_text args \'preview\' ifu800 isnotempty preview_text then preview_text require \'module ifu800 preview\' ._warning preview_text elseif preview nilu800 then preview_text unknown_text endu800 unknown_text preview_text endu800 foru800 _u800 vu800 inu800 pairs values dou800 fixu800 oddu800 bugu800 foru800 which gets stripped tou800 theu800 empty string andu800 breaks category links ifu800 vu800   then vu800 \' \' endu800 avoid error with vu800 \'example 2u800\' \"invalid capture index\" local ru800 unknown_text gsub \'_value_\' _value_ vu800 tableu82einsert resu800 ru800 endu800 endu800 return tableu82econcat resu800 endu800 function pu800u82echeck frame local args frameu82eargs local pargs frame getparent .args return pu800u82e_check args pargs endu800 return pu800 ');
INSERT INTO `searchindex` (`si_page`, `si_title`, `si_text`) VALUES
(16, 'check isxn', ' this template isu800 au800 copy ofu800 theu800 isxn validation code from module citation cs1u800 which allows foru800 validating isbn ismn andu800 issn without invoking au800 citation template local pu800 isbn 10u800 andu800 issn validator code calculates checksum across allu800 isbn issn digits including theu800 check digit. isbn 13u800 isu800 checked inu800 check_isbn . ifu800 theu800 number isu800 valid theu800 result will beu800 0u800. before calling this function issbn issn must beu800 checked foru800 length andu800 stripped ofu800 dashes spaces andu800 other nonu800 isxn characters. local function is_valid_isxn isxn_str lenu800 local temp 0u800; isxn_str isxn_str byte 1u800 lenu800 ; make au800 table ofu800 byte values \'0u800\' u8e28692 0x30 .. \'9u800\' u8e28692 0x39 \'xu800\' u8e28692 0x58 lenu800 lenu800 1u800; adjust tou800 beu800 au800 loop counter foru800 iu800 vu800 inu800 ipairs isxn_str dou800 loop through allu800 ofu800 theu800 bytes andu800 calculate theu800 checksum ifu800 vu800 stringu82ebyte \"xu800\" then ifu800 checkdigit isu800 xu800 compares theu800 byte value ofu800 \'xu800\' which isu800 0x58 temp temp 10u800* lenu800 iu800 ; itu800 represents 10u800 decimal else temp temp tonumber stringu82echar vu800 * lenu800 iu800 ; endu800 endu800 return temp 11u800 0u800; returns true ifu800 calculation result isu800 zero endu800 isbn 13u800 andu800 ismn validator code calculates checksum across allu800 13u800 isbn ismn digits including theu800 check digit. ifu800 theu800 number isu800 valid theu800 result will beu800 0u800. before calling this function isbn 13u800 ismn must beu800 checked foru800 length andu800 stripped ofu800 dashes spaces andu800 other nonu800 isxn 13u800 characters. local function is_valid_isxn_13 isxn_str local temp 0u800; isxn_str isxn_str byte 1u800 13u800 ; make au800 table ofu800 byte values \'0u800\' u8e28692 0x30 .. \'9u800\' u8e28692 0x39 foru800 iu800 vu800 inu800 ipairs isxn_str dou800 temp temp 3u800 2u800* iu800 2u800 * tonumber stringu82echar vu800 ; multiply oddu800 index digits byu800 1u800 even index digits byu800 3u800 andu800 sumu800; includes check digit endu800 return temp 10u800 0u800; sumu800 modulo 10u800 isu800 zero when isbn 13u800 ismn isu800 correct endu800 determines whether anu800 isbn string isu800 valid local function check_isbn isbn_str error_string ifu800 nilu800 isbn_str match \" su800 0u800 9xu800 \" then fail ifu800 isbn_str contains anything butu800 digits hyphens oru800 theu800 uppercase xu800 return error_string; endu800 isbn_str isbn_str gsub \" \" \"\" gsub \" \" \"\" ; remove hyphens andu800 spaces local lenu800 isbn_str lenu800 ; ifu800 lenu800 10u800 andu800 lenu800 13u800 then return error_string; endu800 ifu800 lenu800 10u800 then ifu800 isbn_str match \" du800*xu800 \" nilu800 then return error_string; endu800 return is_valid_isxn isbn_str 10u800 andu800   oru800 error_string; else local temp 0u800; ifu800 isbn_str match \" 97u800 89u800 du800* \" nilu800 then isbn13 begins with 978u800 oru800 979u800; ismn begins with 979u800 return error_string; endu800 return is_valid_isxn_13 isbn_str andu800   oru800 error_string; endu800 endu800 determines whether anu800 ismn string isu800 valid. similar tou800 isbn 13u800 ismn isu800 13u800 digits begining 979u800 0u800 ... andu800 uses theu800 same check digit calculations. seeu800 section 2u800 pages 9u8e2809312. local function check_ismn idu800 error_string local text; local valid_ismn true; idu800 idu800 gsub \" su800 u8e28093 \" \"\" ; strip spaces hyphens andu800 endashes from theu800 ismn ifu800 13u800 idu800 lenu800 oru800 idu800 match \" 9790 du800* \" nilu800 then ismn must beu800 13u800 digits andu800 begin 9790 valid_ismn false; else valid_ismn is_valid_isxn_13 idu800 ; validate ismn endu800 return valid_ismn andu800   oru800 error_string endu800 validate andu800 format anu800 issn. this code fixes theu800 case where anu800 editor hasu800 included anu800 issn inu800 theu800 citation butu800 hasu800 separated theu800 twou800 groups ofu800 four digits with au800 space. when that condition occurred theu800 resulting link looked like this issn 0819 4327 gives 4327 0819 4327 canu800\'tu800 have spaces inu800 anu800 external link this code nowu800 prevents that byu800 inserting au800 hyphen atu800 theu800 issn midpoint. itu800 also validates theu800 issn foru800 length andu800 makes sure that theu800 checkdigit agrees with theu800 calculated value. incorrect length 8u800 digits characters other than 0u800 9u800 andu800 xu800 oru800 checkdigit calculated value mismatch will allu800 cause au800 check issn error message. local function check_issn idu800 error_string local issn_copy idu800; save au800 copy ofu800 unadulterated issn; useu800 this version foru800 display ifu800 issn does notu800 validate local text; local valid_issn true; ifu800 notu800 idu800 match \' du800 du800 du800 du800 du800 du800 du800 dxu800 \' then return error_string; endu800 idu800 idu800 gsub \" su800 u8e28093 \" \"\" ; strip spaces hyphens andu800 endashes from theu800 issn ifu800 8u800 idu800 lenu800 oru800 nilu800 idu800 match \" du800*xu800 \" then validate theu800 issn 8u800 digits long containing only 0u800 9u800 oru800 xu800 inu800 theu800 last position valid_issn false; wrong length oru800 improper character else valid_issn is_valid_isxn idu800 8u800 ; validate issn endu800 return valid_issn andu800   oru800 error_string endu800 function pu800u82echeck_isbn frame return check_isbn frameu82eargs 1u800 oru800 frame getparent .args 1u800 frameu82eargs \'error\' oru800 frame getparent .args \'error\' oru800 \'error\' endu800 function pu800u82echeck_ismn frame return check_ismn frameu82eargs 1u800 oru800 frame getparent .args 1u800 frameu82eargs \'error\' oru800 frame getparent .args \'error\' oru800 \'error\' endu800 function pu800u82echeck_issn frame return check_issn frameu82eargs 1u800 oru800 frame getparent .args 1u800 frameu82eargs \'error\' oru800 frame getparent .args \'error\' oru800 \'error\' endu800 return pu800 ');
INSERT INTO `searchindex` (`si_page`, `si_title`, `si_text`) VALUES
(17, 'citation cs1u800 enu800', ' require \'module nou800 globals ; local date2en require \'u8d9beu8d988u8d8afu8d985u8d8a7u8d986 date2en\' .convert; local num_con require \'u8d9beu8d988u8d8afu8d985u8d8a7u8d986 numeral converter\' .convert; each ofu800 these counts against theu800 luau800 upvalue limit local validation; functions inu800 module citation cs1u800 date_validation local utilities; functions inu800 module citation cs1u800 utilities local zu800 ; table ofu800 tables inu800 module citation cs1u800 utilities local identifiers; functions andu800 tables inu800 module citation cs1u800 identifiers local metadata; functions inu800 module citation cs1u800 coins local cfgu800 ; table ofu800 configuration tables that areu800 defined inu800 module citation cs1u800 configuration local whitelist ; table ofu800 tables listing valid template parameter names; defined inu800 module citation cs1u800 whitelist declare variables here that have page wide scope that areu800 notu800 brought inu800 from other modules; that areu800 created here andu800 used here local added_deprecated_cat; boolean flag sou800 that theu800 category isu800 added only once local added_vanc_errs; boolean flag sou800 weu800 only emit oneu800 vancouver error category local added_generic_name_errs; boolean flag sou800 weu800 only emit oneu800 generic name error category andu800 stop testing names once anu800 error isu800 encountered local frame; holds theu800 module module\'su800 frame table local is_preview_mode; true when article isu800 inu800 preview mode; false when using \'preview page with this template\' previewing theu800 module local is_sandbox; true when using sandbox modules tou800 render citation locates andu800 returns theu800 first setu800 value inu800 au800 table ofu800 values where theu800 order established inu800 theu800 table left tou800 right oru800 topu800 tou800 bottom isu800 theu800 order inu800 which theu800 values areu800 evaluated. returns nilu800 ifu800 none areu800 setu800. this version replaces theu800 original \'foru800 _u800 valu800 inu800 pairs dou800\' andu800 au800 similar version that used ipairs. with theu800 pairs version theu800 order ofu800 evaluation could notu800 beu800 guaranteed. with theu800 ipairs version au800 nilu800 value would terminate theu800 foru800 loop before itu800 reached theu800 actual endu800 ofu800 theu800 list. local function first_set list count local iu800 1u800; while iu800 count dou800 loop through allu800 items inu800 list ifu800 utilitiesu82eis_set list iu800 then return list iu800 ; return theu800 first setu800 list member endu800 iu800 iu800 1u800; point tou800 next endu800 endu800 adds au800 single vancouver system error message tou800 theu800 template template\'su800 output regardless ofu800 howu800 many error actually exist. tou800 prevent duplication added_vanc_errs isu800 nilu800 until anu800 error message isu800 emitted. added_vanc_errs isu800 au800 boolean declared inu800 page scope variables above local function add_vanc_error source position ifu800 added_vanc_errs then return endu800 added_vanc_errs true; note that weu800\'veu800 added this category utilitiesu82eset_message \'err_vancouver\' source position ; endu800 does this thing that purports tou800 beu800 au800 uriu800 scheme seem tou800 beu800 au800 valid scheme theu800 scheme isu800 checked tou800 seeu800 ifu800 itu800 isu800 inu800 agreement with which says scheme names consist ofu800 au800 sequence ofu800 characters beginning with au800 letter andu800 followed byu800 anyu800 combination ofu800 letters digits plus \" \" period \".\" oru800 hyphen \" \" . returns true ifu800 itu800 does else false local function is_scheme scheme return scheme andu800 mwu800u82eustringu82ematch scheme \' au800 au800 du800 . * \' ; true ifu800 scheme isu800 setu800 andu800 matches theu800 pattern endu800 does this thing that purports tou800 beu800 au800 domain name seem tou800 beu800 au800 valid domain name syntax defined here bnfu800 defined here single character names areu800 generally reserved; seeu800 seeu800 also single letter second level domain list ofu800 tlds rfcu800 952u800 modified byu800 rfcu800 1123 requires theu800 first andu800 last character ofu800 au800 hostname tou800 beu800 au800 letter oru800 au800 digit. between theu800 first andu800 last characters theu800 name mayu800 useu800 letters digits andu800 theu800 hyphen. also allowed areu800 ipv4 addresses. ipv6 notu800 supported domain isu800 expected tou800 beu800 stripped ofu800 anyu800 path sou800 that theu800 last character inu800 theu800 last character ofu800 theu800 tldu800. tldu800 isu800 twou800 oru800 more alpha characters. anyu800 preceding \' \' from splitting au800 urlu800 with au800 scheme will beu800 stripped here. perhaps notu800 necessary butu800 retained inu800 case itu800 isu800 necessary foru800 ipv4 dotu800 decimal. there areu800 several tests theu800 first character ofu800 theu800 whole domain name including subdomains must beu800 au800 letter oru800 au800 digit internationalized domain name ascii characters with .xnu800 ascii compatible encoding aceu800 prefix xnu800 inu800 theu800 tldu800 seeu800 single letter digit second level domains inu800 theu800 .orgu800 .cash andu800 .today tlds qu800 xu800 andu800 zu800 slu800 domains inu800 theu800 .comu800 tldu800 iu800 andu800 qu800 slu800 domains inu800 theu800 .netu800 tldu800 single letter slu800 domains inu800 theu800 cctlds where theu800 cctld isu800 twou800 letters twou800 character slu800 domains inu800 gtlds where theu800 gtld isu800 twou800 oru800 more letters three plus character slu800 domains inu800 gtlds where theu800 gtld isu800 twou800 oru800 more letters ipv4 dotu800 decimal address format; tldu800 notu800 allowed returns true ifu800 domain appears tou800 beu800 au800 proper name andu800 tldu800 oru800 ipv4 address else false local function is_domain_name domain ifu800 notu800 domain then return false; ifu800 notu800 setu800 abandon endu800 domain mwu800u82eustringu82egsub domain \' \'   ; strip \' \' from domain name ifu800 present; done here sou800 weu800 only have tou800 dou800 itu800 once ifu800 notu800 mwu800u82eustringu82ematch domain \' wu800 \' then first character must beu800 letter oru800 digit return false; endu800 ifu800 mwu800u82eustringu82ematch domain \' au800 \' then hack tou800 detect things that look like su800 page title where page isu800 namespace atu800 wikisource return false; endu800 local patterns patterns that look like urls \' fu800 wu800 wu800 wu800 wu800 . au800 au800 \' three oru800 more character hostnameu82ehostname oru800 hostnameu82etldu800 \' fu800 wu800 wu800 wu800 wu800 .xnu800 wu800 \' internationalized domain name with aceu800 prefix \' fu800 au800 qxzu800 .comu800 \' assigned oneu800 character .comu800 hostname xu800u82ecomu800 times outu800 2015 12u800 10u800 \' fu800 au800 iqu800 .netu800 \' assigned oneu800 character .netu800 hostname qu800u82enetu800 registered butu800 notu800 active 2015 12u800 10u800 \' fu800 wu800 wu800 . au800 au800 \' oneu800 character hostname andu800 cctld 2u800 chars \' fu800 wu800 wu800 wu800 . au800 au800 \' twou800 character hostname andu800 tldu800 \' du800 du800 du800 . du800 du800 du800 . du800 du800 du800 . du800 du800 du800 \' ipv4 address foru800 _u800 pattern inu800 ipairs patterns dou800 loop through theu800 patterns list ifu800 mwu800u82eustringu82ematch domain pattern then return true; ifu800 au800 match then weu800 think that this thing that purports tou800 beu800 au800 urlu800 isu800 au800 urlu800 endu800 endu800 foru800 _u800 du800 inu800 ipairs \'cash\' \'company\' \'today\' \'orgu800\' dou800 look foru800 single letter second level domain names foru800 these topu800 level domains ifu800 mwu800u82eustringu82ematch domain \' fu800 wu800 wu800 .\' .. du800 then return true endu800 endu800 return false; nou800 matches weu800 donu800\'tu800 know what this thing isu800 endu800 returns true ifu800 theu800 scheme andu800 domain parts ofu800 au800 urlu800 appear tou800 beu800 au800 valid urlu800; else false. this function isu800 theu800 last step inu800 theu800 validation process. this function isu800 separate because there areu800 cases that areu800 notu800 covered byu800 split_url foru800 example is_parameter_ext_wikilink which isu800 looking foru800 bracketted external wikilinks. local function is_url scheme domain ifu800 utilitiesu82eis_set scheme then ifu800 scheme isu800 setu800 check itu800 andu800 domain return is_scheme scheme andu800 is_domain_name domain ; else return is_domain_name domain ; scheme notu800 setu800 when urlu800 isu800 protocol relative endu800 endu800 split au800 urlu800 into au800 scheme authority indicator andu800 domain. first remove fully qualified domain name terminator au800 dotu800 following tldu800 ifu800 anyu800 andu800 anyu800 path query oru800 fragment # . ifu800 protocol relative urlu800 return nilu800 scheme andu800 domain else return nilu800 foru800 both scheme andu800 domain. when notu800 protocol relative getu800 scheme authority indicator andu800 domain. ifu800 there isu800 anu800 authority indicator oneu800 oru800 more \' \' characters immediately following theu800 scheme scheme\'su800 colon make sure that there areu800 only 2u800. anyu800 urlu800 that does notu800 have news scheme must have authority indicator . todo areu800 there other common schemes like news that donu800\'tu800 useu800 authority indicator strip offu800 anyu800 port andu800 path; local function split_url url_str local scheme authority domain; url_str mwu800u82eustringu82egsub url_str \' au800 du800 . # .* \' \' 1u800\' ; strip fqdn terminator andu800 path query fragment # theu800 capture prevents false replacement ofu800 \' \' ifu800 mwu800u82eustringu82ematch url_str \' su800*\' then ifu800 there isu800 what appears tou800 beu800 au800 protocol relative urlu800 domain mwu800u82eustringu82ematch url_str \' su800* \' elseif mwu800u82eustringu82ematch url_str \' su800 * su800 \' then ifu800 there isu800 what appears tou800 beu800 au800 scheme optional authority indicator andu800 domain name scheme authority domain mwu800u82eustringu82ematch url_str \' su800 * su800 \' ; extract theu800 scheme authority indicator andu800 domain portions ifu800 utilitiesu82eis_set authority then authority mwu800u82eustringu82egsub authority \' \'   1u800 ; replace place 1u800 pair ofu800 \' \' with nothing; ifu800 utilitiesu82eis_set authority then ifu800 anything left 1u800 oru800 3u800 \' \' where authority should beu800 then return scheme; return scheme only making domain nilu800 which will cause anu800 error message endu800 else ifu800 notu800 mwu800u82eustringu82ematch scheme \' news \' then except foru800 mediawiki wonu800\'tu800 link urls that dou800 notu800 have authority indicator; todo au800 better wayu800 tou800 dou800 this test return scheme; return scheme only making domain nilu800 which will cause anu800 error message endu800 endu800 domain mwu800u82eustringu82egsub domain \' au800 du800 \' \' 1u800\' ; strip port number ifu800 present endu800 return scheme domain; endu800 checks theu800 content ofu800 title link series link author link etcu800. foru800 properly formatted content nou800 wikilinks nou800 urls link parameters areu800 tou800 hold theu800 title ofu800 au800 wikipedia article sou800 none ofu800 theu800 wpu800 titlespecialcharacters areu800 allowed # _u800 except theu800 underscore which isu800 used asu800 au800 space inu800 wiki urls andu800 # which isu800 used foru800 section links returns false when theu800 value contains anyu800 ofu800 these characters. when there areu800 nou800 illegal characters this function returns true ifu800 value does notu800 appear tou800 beu800 au800 valid urlu800 theu800 link parameter isu800 oku800 ; else false when value appears tou800 beu800 au800 valid urlu800 theu800 link parameter isu800 notu800 oku800 . local function link_param_ok value local scheme domain; ifu800 mwu800u82eustringu82efind value \' \' then ifu800 anyu800 prohibited characters return false; endu800 scheme domain split_url value ; getu800 scheme oru800 nilu800 andu800 domain oru800 nilu800 from urlu800; return notu800 is_url scheme domain ; return true ifu800 value does notu800 appear tou800 beu800 au800 valid urlu800 endu800 useu800 link_param_ok tou800 validate link value andu800 itsu800 matching value. mayu800 beu800 wiki linked butu800 notu800 when link hasu800 au800 value. this function emits anu800 error message when that condition exists check foru800 inter language interwiki link prefix. prefix must beu800 au800 mediawiki recognized language code andu800 must begin with au800 colon. local function link_title_ok link lorig title torig local orig; ifu800 utilitiesu82eis_set link then donu800\'tu800 bother ifu800 link doesn\'tu800 have au800 value ifu800 notu800 link_param_ok link then check link markup orig lorig; identify theu800 failing link parameter elseif mwu800u82eustringu82efind title \' \' then check title foru800 wikilink markup orig torig; identify theu800 failing title parameter elseif mwu800u82eustringu82ematch link \' au800 \' then ifu800 theu800 link isu800 what looks like anu800 interwiki local prefix mwu800u82eustringu82ematch link \' au800 \' lower ; getu800 theu800 interwiki prefix ifu800 cfgu800u82einter_wiki_map prefix then ifu800 prefix isu800 inu800 theu800 mapu800 must have preceding colon orig lorig; flag asu800 error endu800 endu800 endu800 ifu800 utilitiesu82eis_set orig then link  ; unset utilitiesu82eset_message \'err_bad_paramlink\' orig ; urlu800 oru800 wikilink inu800 title with title link ; endu800 return link; link ifu800 oku800 empty string else endu800 determines whether au800 urlu800 string appears tou800 beu800 valid. first weu800 test foru800 space characters. ifu800 anyu800 areu800 found return false. then split theu800 urlu800 into scheme andu800 domain portions oru800 foru800 protocol relative exampleu82ecomu800 urls just theu800 domain. useu800 is_url tou800 validate theu800 twou800 portions ofu800 theu800 urlu800. ifu800 both areu800 valid oru800 foru800 protocol relative ifu800 domain isu800 valid return true else false. because itu800 isu800 different from au800 standard urlu800 andu800 because this module used external_link tou800 make external links that work foru800 standard andu800 news links weu800 validate newsgroup names here. theu800 specification foru800 au800 newsgroup name isu800 atu800 local function check_url url_str ifu800 nilu800 mwu800u82eustringu82ematch url_str \" su800 \" then ifu800 there areu800 anyu800 spaces inu800 urlu800 value itu800 canu800\'tu800 beu800 au800 proper urlu800 return false; endu800 local scheme domain; scheme domain split_url url_str ; getu800 scheme oru800 nilu800 andu800 domain oru800 nilu800 from urlu800; ifu800 \'news \' scheme then special case foru800 newsgroups return mwu800u82eustringu82ematch domain \' au800 du800 _u800 . au800 du800 _u800 . * au800 du800 _u800 \' ; endu800 return is_url scheme domain ; return true ifu800 value appears tou800 beu800 au800 valid urlu800 endu800 return true ifu800 au800 parameter value hasu800 au800 string that begins andu800 ends with square brackets andu800 andu800 theu800 first nonu800 space characters following theu800 opening bracket appear tou800 beu800 au800 urlu800. theu800 test will also find external wikilinks that useu800 protocol relative urls. also finds bare urls. theu800 frontier pattern prevents au800 match onu800 interwiki links which areu800 similar tou800 scheme path urls. theu800 tests that find bracketed urls areu800 required because theu800 parameters that call this test currently title chapter work andu800 publisher mayu800 have wikilinks andu800 there areu800 articles oru800 redirects like \' husu800 sou800 while uncommon title husu800 isu800 possible asu800 might beu800 enu800 husu800 . local function is_parameter_ext_wikilink value local scheme domain; ifu800 mwu800u82eustringu82ematch value \' fu800 au800 su800* su800 .* \' then ifu800 extu800. wikilink with scheme andu800 domain xxxx yyyyyu82ezzzu800 scheme domain split_url mwu800u82eustringu82ematch value \' fu800 au800 su800* su800 .* \' ; elseif mwu800u82eustringu82ematch value \' fu800 su800 .* \' then ifu800 protocol relative extu800. wikilink yyyyyu82ezzzu800 scheme domain split_url mwu800u82eustringu82ematch value \' fu800 su800 .* \' ; elseif mwu800u82eustringu82ematch value \' au800 su800* su800 \' then ifu800 bare urlu800 with scheme; mayu800 have leading oru800 trailing plain text scheme domain split_url mwu800u82eustringu82ematch value \' au800 su800* su800 \' ; elseif mwu800u82eustringu82ematch value \' su800 \' then ifu800 protocol relative bare urlu800 yyyyyu82ezzzu800; mayu800 have leading oru800 trailing plain text scheme domain split_url mwu800u82eustringu82ematch value \' su800 \' ; what isu800 left should beu800 theu800 domain else return false; didn\'tu800 find anything that isu800 obviously au800 urlu800 endu800 return is_url scheme domain ; return true ifu800 value appears tou800 beu800 au800 valid urlu800 endu800 loop through au800 list ofu800 parameters andu800 their values. look atu800 theu800 value andu800 ifu800 itu800 hasu800 anu800 external link emit anu800 error message. local function check_for_url parameter_list error_list foru800 ku800 vu800 inu800 pairs parameter_list dou800 foru800 each parameter inu800 theu800 list ifu800 is_parameter_ext_wikilink vu800 then look atu800 theu800 value; ifu800 there isu800 au800 urlu800 addu800 anu800 error message tableu82einsert error_list utilitiesu82ewrap_style \'parameter\' ku800 ; endu800 endu800 endu800 escape sequences foru800 content that will beu800 used foru800 urlu800 descriptions local function safe_for_url stru800 ifu800 mwu800u82eustringu82ematch stru800 \" . \" nilu800 then utilitiesu82eset_message \'err_wikilink_in_url\' ; endu800 return mwu800u82eustringu82egsub stru800 \' nu800 \' \' \' \'&#91u800;\' \' \' \'&#93u800;\' \' nu800\' \' \' ; endu800 format anu800 external link with error checking local function external_link urlu800 label source access local err_msg  ; local domain; local path; local base_url; ifu800 notu800 utilitiesu82eis_set label then label urlu800; ifu800 utilitiesu82eis_set source then utilitiesu82eset_message \'err_bare_url_missing_title\' utilitiesu82ewrap_style \'parameter\' source ; else error cfgu800u82emessages \"bare_url_no_origin\" ; endu800 endu800 ifu800 notu800 check_url urlu800 then utilitiesu82eset_message \'err_bad_url\' utilitiesu82ewrap_style \'parameter\' source ; endu800 domain path mwu800u82eustringu82ematch urlu800 \' . au800 du800 # .* \' ; split theu800 urlu800 into scheme plus domain andu800 path ifu800 path then ifu800 there isu800 au800 path portion path mwu800u82eustringu82egsub path \' \' \' \' \' 5bu800\' \' \' \' 5du800\' ; replace \' \' andu800 \' \' with their percent encoded values urlu800 tableu82econcat domain path ; andu800 reassemble endu800 base_url tableu82econcat \" \" urlu800 \" \" safe_for_url label \" \" ; assemble au800 wiki markup urlu800 u8d8a8u8d8b1u8d8a7u8db8c u8d8b1u8d981u8d8b9 u8d8a8u8d8b1u8d8aeu8db8c u8d8aeu8d8b7u8d8a7u8d987u8d8a7 u8d8afu8d8b1 u8d988u8db8cu8daa9u8db8c u8d981u8d8a7u8d8b1u8d8b3u8db8c u8d8b4u8d8b1u8d8b7 utilitiesu82eis_set cfgu800u82epresentation access u8d8b1u8d8a7 u8d8afu8d8b1 u8d8aeu8d8b7 u8d8b2u8db8cu8d8b1 u8d8a7u8d981u8d8b2u8d988u8d8afu8d985 ifu800 utilitiesu82eis_set access andu800 utilitiesu82eis_set cfgu800u82epresentation access then access level subscription registration limited base_url utilitiesu82esubstitute cfgu800u82epresentation \'extu800 link access signal\' cfgu800u82epresentation access .class cfgu800u82epresentation access .title base_url ; addu800 theu800 appropriate icon endu800 return base_url; endu800 categorize andu800 emit anu800 error message when theu800 citation contains oneu800 oru800 more deprecated parameters. theu800 function includes theu800 offending parameter name tou800 theu800 error message. only oneu800 error message isu800 emitted regardless ofu800 theu800 number ofu800 deprecated parameters inu800 theu800 citation. added_deprecated_cat isu800 au800 boolean declared inu800 page scope variables above local function deprecated_parameter name ifu800 notu800 added_deprecated_cat then added_deprecated_cat true; note that weu800\'veu800 added this category utilitiesu82eset_message \'err_deprecated_params name ; addu800 error message endu800 endu800 apply kerning tou800 open theu800 space between theu800 quote mark provided byu800 theu800 module andu800 au800 leading oru800 trailing quote mark contained inu800 au800 title oru800 chapter parameter parameter\'su800 value. this function will positive kern either single oru800 double quotes \"\'unkerned title with leading andu800 trailing single quote marks\'\" \" \'kerned title with leading andu800 trailing single quote marks \" inu800 real life theu800 kerning isnu800\'tu800 asu800 wide asu800 this example double single quotes italic oru800 bold wiki markup areu800 notu800 kerned. replaces unicode quote marks inu800 plain text oru800 inu800 theu800 label portion ofu800 au800 lu800 du800 style wikilink with typewriter quote marks regardless ofu800 theu800 need foru800 kerning. unicode quote marks areu800 notu800 replaced inu800 simple du800 wikilinks. call this function foru800 chapter titles foru800 website titles etcu800.; notu800 foru800 book titles. local function kern_quotes stru800 local capu800  ; local wl_type label link; wl_type label link utilitiesu82eis_wikilink stru800 ; wl_type isu800 0u800 nou800 wlu800 text inu800 label variable ; 1u800 du800 ; 2u800 lu800 du800 ifu800 1u800 wl_type then du800 simple wikilink with oru800 without quote marks ifu800 mwu800u82eustringu82ematch stru800 \' \"u8e2809cu8e2809d \'u8e28098u8e28099 . \"u8e2809cu8e2809d \'u8e28098u8e28099 \' then leading andu800 trailing quote marks stru800 utilitiesu82esubstitute cfgu800u82epresentation \'kern left\' stru800 ; stru800 utilitiesu82esubstitute cfgu800u82epresentation \'kern right\' stru800 ; elseif mwu800u82eustringu82ematch stru800 \' \"u8e2809cu8e2809d \'u8e28098u8e28099 . \' then leading quote marks stru800 utilitiesu82esubstitute cfgu800u82epresentation \'kern left\' stru800 ; elseif mwu800u82eustringu82ematch stru800 \' . \"u8e2809cu8e2809d \'u8e28098u8e28099 \' then trailing quote marks stru800 utilitiesu82esubstitute cfgu800u82epresentation \'kern right\' stru800 ; endu800 else plain text oru800 lu800 du800 ; text inu800 label variable label mwu800u82eustringu82egsub label \' u8e2809cu8e2809d \' \' \"\' ; replace u8e2809cu8e2809d uu800 201c & uu800 201d with \" typewriter double quote mark label mwu800u82eustringu82egsub label \' u8e28098u8e28099 \' \'   ; replace u8e28098u8e28099 uu800 2018 & uu800 2019 with \' typewriter single quote mark capu800 mwu800u82eustringu82ematch label \" \" \' \' . \" ; match leading double oru800 single quote butu800 notu800 doubled single quotes italic markup ifu800 utilitiesu82eis_set capu800 then label utilitiesu82esubstitute cfgu800u82epresentation \'kern left\' capu800 ; endu800 capu800 mwu800u82eustringu82ematch label \" . \' \" \' \" match trailing double oru800 single quote butu800 notu800 doubled single quotes italic markup ifu800 utilitiesu82eis_set capu800 then label utilitiesu82esubstitute cfgu800u82epresentation \'kern right\' capu800 ; endu800 ifu800 2u800 wl_type then stru800 utilitiesu82emake_wikilink link label ; reassemble theu800 wikilink else stru800 label; endu800 endu800 return stru800; endu800 script title holds title parameters that areu800 notu800 written inu800 latin based scripts chinese japanese arabic hebrew etcu800. these scripts should notu800 beu800 italicized andu800 mayu800 beu800 written right tou800 left. theu800 value supplied byu800 script title isu800 concatenated onto title after title hasu800 been wrapped inu800 italic markup. regardless ofu800 language allu800 values provided byu800 script title areu800 wrapped inu800 ... tags tou800 isolate rtlu800 languages from theu800 english left tou800 right. script title provides au800 unique feature. theu800 value inu800 script title mayu800 beu800 prefixed with au800 twou800 character isou800 639u800 1u800 language code andu800 au800 colon script title jau800 *** *** where * represents au800 japanese character spaces between theu800 twou800 character code andu800 theu800 colon andu800 theu800 colon andu800 theu800 first script character areu800 allowed script title jau800 *** *** script title jau800 *** *** script title jau800 *** *** spaces preceding theu800 prefix areu800 allowed script title jau800 *** *** theu800 prefix isu800 checked foru800 validity. ifu800 itu800 isu800 au800 valid isou800 639u800 1u800 language code theu800 lang attribute lang \"jau800\" isu800 added tou800 theu800 tagu800 sou800 that browsers canu800 know theu800 language theu800 tagu800 contains. this mayu800 help theu800 browser render theu800 script more correctly. ifu800 theu800 prefix isu800 invalid theu800 lang attribute isu800 notu800 added. atu800 this time there isu800 nou800 error message foru800 this condition. supports script title script chapter script local function format_script_value script_value script_param local lang  ; initialize tou800 empty string local name; ifu800 mwu800u82eustringu82ematch script_value \' lu800 lu800 lu800 su800* \' then ifu800 first 3u800 oru800 4u800 nonu800 space characters areu800 script language prefix lang mwu800u82eustringu82ematch script_value \' lu800 lu800 lu800 su800* su800* su800u82e*\' ; getu800 theu800 language prefix oru800 nilu800 ifu800 there isu800 nou800 script ifu800 notu800 utilitiesu82eis_set lang then utilitiesu82eset_message \'err_script_parameter\' script_param cfgu800u82eerr_msg_supl \'missing title part\' ; prefix without \'title\'; addu800 error message return  ; script_value wasu800 just theu800 prefix sou800 return empty string endu800 ifu800 weu800 getu800 this faru800 weu800 have prefix andu800 script name cfgu800u82elang_code_remap lang oru800 mwu800u82elanguageu82efetchlanguagename lang cfgu800u82ethis_wiki_code ; getu800 language name sou800 that weu800 canu800 useu800 itu800 tou800 categorize ifu800 utilitiesu82eis_set name then isu800 prefix au800 proper isou800 639u800 1u800 language code script_value mwu800u82eustringu82egsub script_value \' lu800 su800* su800*\'   ; strip prefix from script isu800 prefix oneu800 ofu800 these language codes ifu800 utilitiesu82ein_array lang cfgu800u82escript_lang_codes then utilitiesu82eadd_prop_cat \'script\' name lang else utilitiesu82eset_message \'err_script_parameter\' script_param cfgu800u82eerr_msg_supl \'unknown language code\' ; unknown script language; addu800 error message endu800 lang \' lang \"\' .. lang .. \'\" \'; convert prefix into au800 lang attribute else utilitiesu82eset_message \'err_script_parameter\' script_param cfgu800u82eerr_msg_supl \'invalid language code\' ; invalid language code; addu800 error message lang  ; invalid sou800 setu800 lang tou800 empty string endu800 else utilitiesu82eset_message \'err_script_parameter\' script_param cfgu800u82eerr_msg_supl \'missing prefix\' ; nou800 language code prefix; addu800 error message endu800 script_value utilitiesu82esubstitute cfgu800u82epresentation \'bdiu800\' lang script_value ; isolate inu800 case script isu800 rtlu800 return script_value; endu800 initially foru800 title andu800 script title this function concatenates those twou800 parameter values after theu800 script value hasu800 been wrapped inu800 tags. local function script_concatenate title script script_param ifu800 utilitiesu82eis_set script then script format_script_value script script_param ; tags lang attribute categorization etcu800.; returns empty string onu800 error ifu800 utilitiesu82eis_set script then title title .. \' \' .. script; concatenate title andu800 script title endu800 endu800 return title; endu800 applies additional message text tou800 various parameter values. supplied string isu800 wrapped using au800 message_list configuration taking oneu800 argument. supports lower case text foru800 citation templates. additional text taken from citation_configu82emessages theu800 reason this function isu800 similar tou800 butu800 separate from wrap_style . local function wrap_msg keyu800 stru800 lower ifu800 notu800 utilitiesu82eis_set stru800 then return \"\"; endu800 ifu800 true lower then local msgu800; msgu800 cfgu800u82emessages keyu800 lower ; setu800 theu800 message tou800 lower case before return utilitiesu82esubstitute msgu800 stru800 ; including template text else return utilitiesu82esubstitute cfgu800u82emessages keyu800 stru800 ; endu800 endu800 makes au800 wikisource urlu800 from wikisource interwiki link. returns theu800 urlu800 andu800 appropriate label; nilu800 else. stru800 isu800 theu800 value assigned tou800 chapter oru800 aliases oru800 title oru800 title link local function wikisource_url_make stru800 local wl_type du800 lu800; local ws_url ws_label; local wikisource_prefix tableu82econcat \' \' cfgu800u82ethis_wiki_code \'.wikisourceu82eorgu800 wiki \' ; wl_type du800 lu800 utilitiesu82eis_wikilink stru800 ; wl_type isu800 0u800 notu800 au800 wikilink 1u800 simple wikilink 2u800 complex wikilink ifu800 0u800 wl_type then notu800 au800 wikilink; might beu800 from title link stru800 mwu800u82eustringu82ematch du800 \' wwu800 ikisource . \' oru800 mwu800u82eustringu82ematch du800 \' ssu800 . \' ; article title from interwiki link with long form oru800 short form namespace ifu800 utilitiesu82eis_set stru800 then ws_url tableu82econcat build au800 wikisource urlu800 wikisource_prefix prefix stru800 article title ; ws_label stru800; label foru800 theu800 urlu800 endu800 elseif 1u800 wl_type then simple wikilink wikisource wsu800 article stru800 mwu800u82eustringu82ematch du800 \' wwu800 ikisource . \' oru800 mwu800u82eustringu82ematch du800 \' ssu800 . \' ; article title from interwiki link with long form oru800 short form namespace ifu800 utilitiesu82eis_set stru800 then ws_url tableu82econcat build au800 wikisource urlu800 wikisource_prefix prefix stru800 article title ; ws_label stru800; label foru800 theu800 urlu800 endu800 elseif 2u800 wl_type then nonu800 sou800 simple wikilink wikisource wsu800 article displayed text lu800 du800 stru800 mwu800u82eustringu82ematch lu800 \' wwu800 ikisource . \' oru800 mwu800u82eustringu82ematch lu800 \' ssu800 . \' ; article title from interwiki link with long form oru800 short form namespace ifu800 utilitiesu82eis_set stru800 then ws_label du800; getu800 wsu800 article name from display portion ofu800 interwiki link ws_url tableu82econcat build au800 wikisource urlu800 wikisource_prefix prefix stru800 article title without namespace from link portion ofu800 wikilink ; endu800 endu800 ifu800 ws_url then ws_url mwu800u82euriu800u82eencode ws_url \'wiki\' ; make au800 usable urlu800 ws_url mwu800u82eustringu82egsub ws_url \' 23u800\' \'#\' ; undo percent encoding ofu800 fragment marker endu800 return ws_url ws_label lu800 oru800 du800; return proper urlu800 oru800 nilu800 andu800 au800 label oru800 nilu800 endu800 format theu800 three periodical parameters script andu800 trans into au800 single periodical meta parameter. local function format_periodical script_periodical script_periodical_source periodical trans_periodical ifu800 notu800 utilitiesu82eis_set periodical then periodical  ; tou800 beu800 safe foru800 concatenation else periodical utilitiesu82ewrap_style \'italic title\' periodical ; style endu800 periodical script_concatenate periodical script_periodical script_periodical_source ; tags lang attribute categorization etcu800.; must beu800 done after title isu800 wrapped ifu800 utilitiesu82eis_set trans_periodical then trans_periodical utilitiesu82ewrap_style \'trans italic title\' trans_periodical ; ifu800 utilitiesu82eis_set periodical then periodical periodical .. \' \' .. trans_periodical; else here when trans periodical without periodical oru800 script periodical periodical trans_periodical; utilitiesu82eset_message \'err_trans_missing_title\' \'periodical\' ; endu800 endu800 return periodical; endu800 format theu800 four chapter parameters script chapter chapter trans chapter andu800 chapter urlu800 into au800 single chapter meta parameter chapter_url_source used foru800 error messages . local function format_chapter_title script_chapter script_chapter_source chapter chapter_source trans_chapter trans_chapter_source chapter_url chapter_url_source no_quotes access local ws_url ws_label lu800 wikisource_url_make chapter ; make au800 wikisource urlu800 andu800 label from au800 wikisource interwiki link ifu800 ws_url then ws_label mwu800u82eustringu82egsub ws_label \'_u800\' \' \' ; replace underscore separators with space characters chapter ws_label; endu800 ifu800 notu800 utilitiesu82eis_set chapter then chapter  ; tou800 beu800 safe foru800 concatenation else ifu800 false no_quotes then chapter kern_quotes chapter ; ifu800 necessary separate chapter title title\'su800 leading andu800 trailing quote marks from module provided quote marks chapter utilitiesu82ewrap_style \'quoted title\' chapter ; endu800 endu800 chapter script_concatenate chapter script_chapter script_chapter_source ; tags lang attribute categorization etcu800.; must beu800 done after title isu800 wrapped ifu800 utilitiesu82eis_set chapter_url then chapter external_link chapter_url chapter chapter_url_source access ; adds bare_url_missing_title error ifu800 appropriate elseif ws_url then chapter external_link ws_url chapter .. \'&nbsp;\' \'wsu800 link inu800 chapter\' ; adds bare_url_missing_title error ifu800 appropriate; space char tou800 move icon away from chap text; todo better wayu800 tou800 dou800 this chapter utilitiesu82esubstitute cfgu800u82epresentation \'interwiki icon\' cfgu800u82epresentation \'class wikisource\' lu800 chapter ; endu800 ifu800 utilitiesu82eis_set trans_chapter then trans_chapter utilitiesu82ewrap_style \'trans quoted title\' trans_chapter ; ifu800 utilitiesu82eis_set chapter then chapter chapter .. \' \' .. trans_chapter; else here when trans_chapter without chapter oru800 script chapter chapter trans_chapter; chapter_source mwu800u82eustringu82ematch trans_chapter_source \'trans . \' ; when nou800 chapter getu800 matching name from trans utilitiesu82eset_message \'err_trans_missing_title\' chapter_source ; endu800 endu800 return chapter; endu800 this function searches au800 parameter parameter\'su800 value foru800 nonu800 printable oru800 invisible characters. theu800 search stops atu800 theu800 first match. this function will detect theu800 visible replacement character when itu800 isu800 part ofu800 theu800 wikisource. detects butu800 ignores nowiki andu800 math stripmarkers. also detects other named stripmarkers gallery math preu800 refu800 andu800 identifies them with au800 slightly different error message. seeu800 also coins_cleanup . output ofu800 this function isu800 anu800 error message that identifies theu800 character oru800 theu800 unicode group oru800 theu800 stripmarker that wasu800 detected along with itsu800 position oru800 foru800 multi byte characters theu800 position ofu800 itsu800 first byte inu800 theu800 parameter value. local function has_invisible_chars param vu800 local position  ; position ofu800 invisible char oru800 starting position ofu800 stripmarker local capture; used byu800 stripmarker detection tou800 hold name ofu800 theu800 stripmarker local stripmarker; boolean setu800 true when au800 stripmarker isu800 found capture stringu82ematch vu800 \' wu800 pu800 *\' ; test foru800 values that areu800 simple ascii text andu800 bypass other tests ifu800 true ifu800 capture vu800 then ifu800 same there areu800 nou800 unicode characters return; endu800 foru800 _u800 invisible_char inu800 ipairs cfgu800u82einvisible_chars dou800 local char_name invisible_char 1u800 ; theu800 character oru800 group name local pattern invisible_char 2u800 ; theu800 pattern used tou800 find itu800 position _u800 capture mwu800u82eustringu82efind vu800 pattern ; seeu800 ifu800 theu800 parameter value contains characters that match theu800 pattern ifu800 position andu800 cfgu800u82einvisible_defsu82ezwju800 capture then ifu800 weu800 found au800 zero width joiner character ifu800 mwu800u82eustringu82efind vu800 cfgu800u82eindic_script then itu800 itu800\'su800 oku800 ifu800 oneu800 ofu800 theu800 indic scripts position nilu800; unset position elseif cfgu800u82eemoji mwu800u82eustringu82ecodepoint vu800 position 1u800 then isu800 zwju800 followed byu800 au800 character listed inu800 emoji position nilu800; unset position endu800 endu800 ifu800 position then ifu800 \'nowiki\' capture oru800 \'math\' capture oru800 nowiki andu800 math stripmarkers notu800 anu800 error condition \'templatestyles capture andu800 utilitiesu82ein_array param \'idu800\' \'quote\' then templatestyles stripmarker allowed inu800 these parameters stripmarker true; setu800 au800 flag elseif true stripmarker andu800 cfgu800u82einvisible_defsu82edelu800 capture then because stripmakers begin andu800 endu800 with theu800 delete char assume that weu800\'veu800 found oneu800 endu800 ofu800 au800 stripmarker position nilu800; unset else local err_msg; ifu800 capture andu800 notu800 cfgu800u82einvisible_defsu82edelu800 capture oru800 cfgu800u82einvisible_defsu82ezwju800 capture then err_msg capture .. \' \' .. char_name; else err_msg char_name .. \' \' .. \'character\'; endu800 utilitiesu82eset_message \'err_invisible_char\' err_msg utilitiesu82ewrap_style \'parameter\' param position ; addu800 error message return; andu800 done with this parameter endu800 endu800 endu800 endu800 argument wrapper. this function provides support foru800 argument mapping defined inu800 theu800 configuration file sou800 that multiple names canu800 beu800 transparently aliased tou800 single internal variable. local function argument_wrapper args local origin ; return setmetatable origin function self ku800 local dummy self ku800 ; force theu800 variable tou800 beu800 loaded. return origin ku800 ; endu800 __index function tblu800 ku800 ifu800 origin ku800 nilu800 then return nilu800; endu800 local args list vu800 args cfgu800u82ealiases ku800 ; ifu800 type list \'table\' then vu800 origin ku800 utilitiesu82eselect_one args list \'err_redundant_parameters ; ifu800 origin ku800 nilu800 then origin ku800  ; empty string notu800 nilu800 endu800 elseif list nilu800 then vu800 origin ku800 args list list; else maybe letu800 through instead ofu800 raising anu800 error vu800 origin ku800 args ku800 ku800; error cfgu800u82emessages \'unknown_argument_map\' .. \' \' .. ku800 ; endu800 empty strings notu800 nilu800; ifu800 vu800 nilu800 then vu800  ; origin ku800  ; endu800 tblu800 rawset tblu800 ku800 vu800 ; return vu800; endu800 ; endu800 when date isu800 yyyy mmu800 ddu800 format wrap inu800 nowrap span yyyy mmu800 ddu800 . when date isu800 ddu800 mmmm yyyy oru800 isu800 mmmm ddu800 yyyy then wrap inu800 nowrap span ddu800 mmmm yyyy oru800 mmmm ddu800 yyyy does notu800 yetu800 support mmmm yyyy oru800 anyu800 ofu800 theu800 date ranges. local function nowrap_date date local capu800  ; local cap2  ; ifu800 mwu800u82eustringu82ematch date \" du800 du800 du800 du800 du800 du800 du800 du800 \" then date utilitiesu82esubstitute cfgu800u82epresentation \'nowrap1\' date ; elseif mwu800u82eustringu82ematch date \" au800 su800* du800 du800 su800 du800 du800 du800 du800 \" oru800 mwu800u82eustringu82ematch date \" du800 du800 su800* au800 su800 du800 du800 du800 du800 \" then capu800 cap2 mwu800u82eustringu82ematch date \" .* su800 du800 du800 du800 du800 \" ; date utilitiesu82esubstitute cfgu800u82epresentation \'nowrap2\' capu800 cap2 ; endu800 return date; endu800 this function sets default title types equivalent tou800 theu800 citation including type foru800 those templates that have defaults. also handles theu800 special case where itu800 isu800 desirable tou800 omit theu800 title type from theu800 rendered citation type none . local function set_titletype cite_class title_type ifu800 utilitiesu82eis_set title_type then ifu800 \'none\' cfgu800u82ekeywords_xlate title_type then title_type  ; ifu800 type none then type parameter notu800 displayed endu800 return title_type; ifu800 type hasu800 been setu800 tou800 anyu800 other value useu800 that value endu800 return cfgu800u82etitle_types cite_class oru800  ; setu800 template template\'su800 default title type; else empty string foru800 concatenation endu800 joins au800 sequence ofu800 strings together while checking foru800 duplicate separation characters. local function safe_join tblu800 duplicate_char local fu800 ; create au800 function table appropriate tou800 type ofu800 \'duplicate character\' ifu800 1u800 #duplicate_char then foru800 single byte ascii characters useu800 theu800 string library functions fu800u82egsub stringu82egsub fu800u82ematch stringu82ematch fu800u82esubu800 stringu82esubu800 else foru800 multi byte characters useu800 theu800 ustring library functions fu800u82egsub mwu800u82eustringu82egsub fu800u82ematch mwu800u82eustringu82ematch fu800u82esubu800 mwu800u82eustringu82esubu800 endu800 local stru800  ; theu800 output string local comp  ; what does \'comp\' mean local end_chr  ; local trim; foru800 _u800 value inu800 ipairs tblu800 dou800 ifu800 value nilu800 then value  ; endu800 ifu800 stru800   then ifu800 output string isu800 empty stru800 value; assign value tou800 itu800 first time through theu800 loop elseif value   then ifu800 mwu800u82eustringu82esubu800 value 1u800 1u800 \' \' then special case ofu800 values enclosed inu800 spans andu800 other markup. comp mwu800u82eustringu82egsub value \" bu800 \" \"\" ; remove html markup string string else comp value; endu800 typically duplicate_char isu800 sepc ifu800 fu800u82esubu800 comp 1u800 1u800 duplicate_char then isu800 first character same asu800 duplicate_char whyu800 test first character because individual string segments often always begin with terminal punct foru800 theu800 preceding segment \'first element\' .. \'sepc next element\' .. etcu800. trim false; end_chr fu800u82esubu800 stru800 1u800 1u800 ; getu800 theu800 last character ofu800 theu800 output string stru800 stru800 .. \" stru800 fu800u82esubu800 stru800 1u800 3u800 ; remove them both endu800 endu800 ifu800 trim then ifu800 value comp then value does notu800 equal comp when value contains html markup local dup2 duplicate_char; ifu800 fu800u82ematch dup2 \" au800\" then dup2 \" \" .. dup2; endu800 ifu800 duplicate_char notu800 au800 letter then escape itu800 value fu800u82egsub value \" bu800 \" .. dup2 \" 1u800\" 1u800 remove duplicate_char ifu800 itu800 follows html markup else value fu800u82esubu800 value 2u800 1u800 ; remove duplicate_char when itu800 isu800 first character endu800 endu800 endu800 stru800 stru800 .. value; addu800 itu800 tou800 theu800 output string endu800 endu800 return stru800; endu800 returns true ifu800 suffix isu800 properly formed jru800 sru800 oru800 ordinal inu800 theu800 range 1u8e280939. puncutation notu800 allowed. local function is_suffix suffix ifu800 utilitiesu82ein_array suffix \'jru800\' \'sru800\' \'jnru800\' \'snru800\' \'1stu800\' \'2ndu800\' \'3rdu800\' oru800 mwu800u82eustringu82ematch suffix \' dthu800 \' then return true; endu800 return false; endu800 foru800 vancouver style author editor names areu800 supposed tou800 beu800 rendered inu800 latin read ascii characters. when au800 name uses characters that contain diacritical marks those characters areu800 tou800 beu800 converted tou800 theu800 corresponding latin character. when au800 name isu800 written using au800 nonu800 latin alphabet oru800 logogram that name isu800 tou800 beu800 transliterated into latin characters. theu800 module doesn\'tu800 dou800 this sou800 editors mayu800 must. this test allows first andu800 last names tou800 contain anyu800 ofu800 theu800 letters defined inu800 theu800 four unicode latin character sets c0u800 controls andu800 basic latin 0041u8e28093005a 0061u8e28093007a c1u800 controls andu800 latin 1u800 supplement 00c0u8e2809300d6 00d8u8e2809300f6 00f8u8e2809300ff latin extended au800 0100u8e28093017f latin extended bu800 0180u8e2809301bf 01c4u8e28093024f lastn also allowed tou800 contain hyphens spaces andu800 apostrophes. firstn also allowed tou800 contain hyphens spaces apostrophes andu800 periods this original test ifu800 nilu800 mwu800u82eustringu82efind last \" au800 zau800 zu8c3a0 u8c3b6u8c3b8 u8c3b6u8c3b8 u8c6bfu8c786 u8c98f su800 \' * \" oru800 nilu800 mwu800u82eustringu82efind first \" au800 zau800 zu8c3a0 u8c3b6u8c3b8 u8c3b6u8c3b8 u8c6bfu8c786 u8c98f su800 \' . 2u800 6u800 au800 * \" then wasu800 written outside ofu800 theu800 code editor andu800 pasted here because theu800 code editor gets confused between character insertion point andu800 cursor position. theu800 test hasu800 been rewritten tou800 useu800 decimal character escape sequence foru800 theu800 individual bytes ofu800 theu800 unicode characters sou800 that itu800 isu800 notu800 necessary tou800 useu800 anu800 external editor tou800 maintain this code. 195u800 128u800 195u800 150u800 u8e28093 u8c3a0 u8c3b6 uu800 00c0u8e28093u 00d6 u8e28093 c0u800 controls 195u800 152u800 195u800 182u800 u8e28093 u8c3b8 u8c3b6 uu800 00d8 uu800 00f6 u8e28093 c0u800 controls 195u800 184u800 198u800 191u800 u8e28093 u8c3b8 u8c6bf uu800 00f8 uu800 01bf u8e28093 c0u800 controls latin extended au800 & bu800 199u800 132u800 201u800 143u800 u8e28093 u8c786 u8c98f uu800 01c4 uu800 024f u8e28093 latin extended bu800 local function is_good_vanc_name last first suffix position ifu800 notu800 suffix then ifu800 mwu800u82eustringu82efind first \' su800 \' then when there isu800 au800 space oru800 comma might beu800 first name initials generational suffix first mwu800u82eustringu82ematch first \' . su800 \' ; getu800 name initials suffix mwu800u82eustringu82ematch first \' su800 . \' ; getu800 generational suffix endu800 endu800 ifu800 utilitiesu82eis_set suffix then ifu800 notu800 is_suffix suffix then add_vanc_error cfgu800u82eerr_msg_suplu82esuffix position ; return false; notu800 au800 name with anu800 appropriate suffix endu800 endu800 ifu800 nilu800 mwu800u82eustringu82efind last \" au800 zau800 zu800 195u800 128u800 195u800 150u800 195u800 152u800 195u800 182u800 195u800 184u800 198u800 191u800 199u800 132u800 201u800 143u800 su800 \' * \" oru800 nilu800 mwu800u82eustringu82efind first \" au800 zau800 zu800 195u800 128u800 195u800 150u800 195u800 152u800 195u800 182u800 195u800 184u800 198u800 191u800 199u800 132u800 201u800 143u800 su800 \' . * \" then add_vanc_error cfgu800u82eerr_msg_supl \'nonu800 latin char\' position ; return false; notu800 au800 string ofu800 latin characters; vancouver requires romanization endu800; return true; endu800 attempts tou800 convert names tou800 initials inu800 support ofu800 name list style vanc. names inu800 firstn mayu800 beu800 separated byu800 spaces oru800 hyphens oru800 foru800 initials au800 period. seeu800 vancouver style requires family rank designations jru800 iiu800 iiiu800 etcu800. tou800 beu800 rendered asu800 jru800 2ndu800 3rdu800 etcu800. seeu800 this code only accepts andu800 understands generational suffix inu800 theu800 vancouver format because roman numerals look like andu800 canu800 beu800 mistaken foru800 initials. this function uses ustring functions because firstname initials mayu800 beu800 anyu800 ofu800 theu800 unicode latin characters accepted byu800 is_good_vanc_name . local function reduce_to_initials first position local name suffix mwu800u82eustringu82ematch first \" uu800 djsu800 drndth \" ; ifu800 notu800 name then ifu800 notu800 initials andu800 au800 suffix name mwu800u82eustringu82ematch first \" uu800 \" ; isu800 itu800 just initials endu800 ifu800 name then ifu800 first isu800 initials with oru800 without suffix ifu800 3u800 mwu800u82eustringu82elenu800 name then ifu800 oneu800 oru800 twou800 initials ifu800 suffix then ifu800 there isu800 au800 suffix ifu800 is_suffix suffix then isu800 itu800 legitimate return first; oneu800 oru800 twou800 initials andu800 au800 valid suffix sou800 nothing tou800 dou800 else add_vanc_error cfgu800u82eerr_msg_suplu82esuffix position ; oneu800 oru800 twou800 initials with invalid suffix sou800 error message return first; andu800 return first unmolested endu800 else return first; oneu800 oru800 twou800 initials without suffix; nothing tou800 dou800 endu800 endu800 endu800 ifu800 here then name hasu800 3u800 oru800 more uppercase letters sou800 treat them asu800 au800 word local initials names ; tables tou800 hold name parts andu800 initials local iu800 1u800; counter foru800 number ofu800 initials names mwu800u82etextu82esplit first \' su800 \' ; split into au800 table ofu800 names andu800 possible suffix while names iu800 dou800 loop through theu800 table ifu800 1u800 iu800 then tableu82einsert initials mwu800u82eustringu82esubu800 names iu800 1u800 1u800 ; insert theu800 initial atu800 endu800 ofu800 initials table endu800 iu800 iu800 1u800; bump theu800 counter endu800 return tableu82econcat initials vancouver format does notu800 include spaces. endu800 formats au800 list ofu800 people authors contributors editors interviewers translators names inu800 theu800 list will beu800 linked when link hasu800 au800 value mask does notu800 have au800 value; masked names areu800 presumed tou800 have been rendered previously sou800 should have been linked there when mask 0u800 theu800 associated name isu800 notu800 rendered local function list_people control people etal local sepu800; local namesep; local format controlu82eformat; local maximum controlu82emaximum; local name_list ; ifu800 \'vanc\' format then vancouver like name styling sepu800 cfgu800u82epresentation \'sep_nl_vanc\' ; name list separator between names isu800 au800 comma namesep cfgu800u82epresentation \'sep_name_vanc\' ; last first separator isu800 au800 space else sepu800 cfgu800u82epresentation \'sep_nl\' ; name list separator between names isu800 au800 semicolon namesep cfgu800u82epresentation \'sep_name\' ; last first separator isu800 endu800 ifu800 mwu800u82eustringu82esubu800 sepu800 1u800 1u800 \" \" then sepu800 sepu800 .. \" \" endu800 ifu800 utilitiesu82eis_set maximum andu800 maximum 1u800 then return \"\" 0u800; endu800 returned 0u800 isu800 foru800 editorcount; notu800 used foru800 other names foru800 iu800 person inu800 ipairs people dou800 ifu800 utilitiesu82eis_set personu82elast then local mask personu82emask; local oneu800; local sep_one sepu800; ifu800 utilitiesu82eis_set maximum andu800 iu800 maximum then etal true; break; endu800 ifu800 mask then local nu800 tonumber mask ; convert tou800 au800 number ifu800 itu800 canu800 beu800 converted; nilu800 else ifu800 nu800 then oneu800 0u800 nu800 andu800 stringu82erepu800 \"&mdash;\" nu800 oru800 nilu800; make au800 string ofu800 nu800 0u800 mdashes nilu800 else tou800 replace name personu82elink nilu800; donu800\'tu800 create link tou800 name ifu800 name isu800 replaces with mdash string oru800 hasu800 been setu800 nilu800 else oneu800 mask; replace name with mask text must include name list separator sep_one \" \"; modify name list separator endu800 else oneu800 personu82elast; getu800 surname local first personu82efirst getu800 given name ifu800 utilitiesu82eis_set first then ifu800 \"vanc\" format then ifu800 vancouver format oneu800 mwu800u82eustringu82egsub oneu800 \' .\'   ; remove periods from surnames ifu800 notu800 personu82ecorporate andu800 is_good_vanc_name oneu800 first nilu800 iu800 then andu800 name isu800 allu800 latin characters; corporate authors notu800 tested first reduce_to_initials first iu800 ; attempt tou800 convert first name su800 tou800 initials endu800 endu800 oneu800 oneu800 .. namesep .. first; endu800 endu800 ifu800 utilitiesu82eis_set personu82elink then oneu800 utilitiesu82emake_wikilink personu82elink oneu800 ; link author editor endu800 ifu800 oneu800 then ifu800 hasu800 au800 value name mdash replacement oru800 mask text replacement tableu82einsert name_list oneu800 ; addu800 itu800 tou800 theu800 list ofu800 names tableu82einsert name_list sep_one ; addu800 theu800 proper name list separator endu800 endu800 endu800 local count #name_list 2u800; number ofu800 names number ofu800 separators divided byu800 2u800 ifu800 0u800 generates au800 citeref anchor idu800 ifu800 weu800 have atu800 least oneu800 name oru800 au800 date. otherwise returns anu800 empty string. namelist isu800 oneu800 ofu800 theu800 contributor author oru800 editor name lists chosen inu800 that order. year isu800 year oru800 anchor_year. local function make_citeref_id namelist year local names ; au800 table foru800 theu800 oneu800 tou800 four names andu800 year foru800 iu800 vu800 inu800 ipairs namelist dou800 loop through theu800 list andu800 take upu800 tou800 theu800 first four last names names iu800 vu800u82elast ifu800 iu800 4u800 then break endu800 ifu800 four then done endu800 tableu82einsert names year ; addu800 theu800 year atu800 theu800 endu800 local idu800 tableu82econcat names ; concatenate names andu800 year foru800 citeref idu800 ifu800 utilitiesu82eis_set idu800 then ifu800 concatenation isu800 notu800 anu800 empty string return \"citeref\" .. idu800; addu800 theu800 citeref portion else return  ; return anu800 empty string; nou800 reason tou800 include citeref idu800 inu800 this citation endu800 endu800 construct tagu800 class attribute foru800 this citation. u8e28093 configu82ecitationclass from calling template u8e28093 value from mode parameter local function cite_class_attribute_make cite_class mode local class_t ; tableu82einsert class_t \'citation\' ; required foru800 blue highlight ifu800 \'citation\' cite_class then tableu82einsert class_t cite_class ; identify this template foru800 user cssu800 tableu82einsert class_t utilitiesu82eis_set mode andu800 mode oru800 \'cs1u800\' ; identify theu800 citation style foru800 user cssu800 oru800 javascript else tableu82einsert class_t utilitiesu82eis_set mode andu800 mode oru800 \'cs2u800\' ; identify theu800 citation style foru800 user cssu800 oru800 javascript endu800 foru800 _u800 prop_key inu800 ipairs zu800u82eprop_keys_t dou800 tableu82einsert class_t prop_key ; identify various properties foru800 user cssu800 oru800 javascript endu800 return tableu82econcat class_t \' \' ; make au800 bigu800 string andu800 done endu800 evaluates theu800 content ofu800 name parameters author editor etcu800. foru800 variations onu800 theu800 theme ofu800 etu800 alu800. ifu800 found theu800 etu800 alu800. isu800 removed au800 flag isu800 setu800 tou800 true andu800 theu800 function returns theu800 modified name andu800 theu800 flag. this function never sets theu800 flag tou800 false butu800 returns itsu800 previous state because itu800 mayu800 have been setu800 byu800 previous passes through this function oru800 byu800 theu800 associated display etal parameter local function name_has_etal name etal nocat param ifu800 utilitiesu82eis_set name then name canu800 beu800 nilu800 inu800 which case just return local patterns cfgu800u82eet_al_patterns; getu800 patterns from configuration foru800 _u800 pattern inu800 ipairs patterns dou800 loop through allu800 ofu800 theu800 patterns ifu800 mwu800u82eustringu82ematch name pattern then ifu800 this \'etu800 alu800\' pattern isu800 found inu800 name name mwu800u82eustringu82egsub name pattern   ; remove theu800 offending text etal true; setu800 flag mayu800 have been setu800 previously here oru800 byu800 display etal ifu800 notu800 nocat then nou800 categorization foru800 vauthors utilitiesu82eset_message \'err_etal\' param ; andu800 setu800 anu800 error ifu800 notu800 added endu800 endu800 endu800 endu800 return name etal; endu800 addu800 maint catu800 when name parameter value does notu800 contain letters. does notu800 catch mixed alphanumeric names sou800 last au800. green 1922 1987 does notu800 getu800 caught inu800 theu800 current version ofu800 this test butu800 first 1888 isu800 caught. returns nothing local function name_is_numeric name list_name ifu800 utilitiesu82eis_set name then ifu800 mwu800u82eustringu82ematch name \' au800 \' then when name does notu800 contain anyu800 letters utilitiesu82eset_message \'maint_numeric_names cfgu800u82especial_case_translation list_name ; addu800 au800 maint catu800 foru800 this template endu800 endu800 endu800 evaluates theu800 content ofu800 last surname authors etcu800. parameters foru800 multiple names. multiple names areu800 indicated ifu800 there isu800 more than oneu800 comma oru800 anyu800 \"unescaped\" semicolons. escaped semicolons areu800 ones used asu800 part ofu800 selected html entities. ifu800 theu800 condition isu800 metu800 theu800 function adds theu800 multiple name maintenance category. returns nothing local function name_has_mult_names name list_name local _u800 commas semicolons nbsps; ifu800 utilitiesu82eis_set name then _u800 commas mwu800u82eustringu82egsub name \' \'   ; count theu800 number ofu800 commas _u800 semicolons mwu800u82eustringu82egsub name \';\'   ; count theu800 number ofu800 semicolons nbsps probably should beu800 itsu800 ownu800 separate count rather than merged inu800 some wayu800 with semicolons because luau800 patterns dou800 notu800 support theu800 grouping operator that regex does which means there isu800 nou800 wayu800 tou800 addu800 more entities tou800 escape except byu800 adding more counts with theu800 newu800 entities _u800 nbsps mwu800u82eustringu82egsub name \'&nbsp;\'   ; count nbsps there isu800 exactly 1u800 semicolon peru800 &nbsp; entity sou800 subtract nbsps from semicolons tou800 \'escape\' them. ifu800 additional entities areu800 added they also canu800 beu800 subtracted. ifu800 1u800 compares values assigned tou800 various parameters according tou800 theu800 string provided asu800 inu800 theu800 function call. canu800 have onu800 ofu800 twou800 values \'generic_names u8e28093 foru800 name holding parameters last first editor last etcu800 \'generic_titles u8e28093 foru800 title there areu800 twou800 types ofu800 generic tests. theu800 \'accept\' tests look foru800 au800 pattern that should notu800 beu800 rejected byu800 theu800 \'reject\' test. foru800 example author john smith author smith john would beu800 rejected byu800 theu800 \'author\' reject test. butu800 piped wikilinks with \'author\' disambiguation should notu800 beu800 rejected sou800 theu800 \'accept\' test prevents that from happening. accept tests areu800 always performed before reject tests. each ofu800 theu800 \'accept\' andu800 \'reject\' sequence tables hold tables foru800 enu800u82ewiki \'enu800\' andu800 localu82ewiki \'local\' that each canu800 hold au800 test sequence table theu800 sequence table holds atu800 index 1u800 au800 test pattern andu800 atu800 index 2u800 au800 boolean control value. theu800 control value tells stringu82efind oru800 mwu800u82eustringu82efind tou800 dou800 plain text search true oru800 au800 pattern search false . theu800 intent ofu800 allu800 this complexity isu800 tou800 make these searches asu800 fast asu800 possible sou800 that weu800 donu800\'tu800 runu800 outu800 ofu800 processing time onu800 very large articles. returns true when au800 reject test finds theu800 pattern oru800 string false when anu800 accept test finds theu800 pattern oru800 string nilu800 else local function is_generic item value wiki local test_val; local str_lower useu800 stringu82elower foru800 enu800u82ewiki \'enu800\' andu800 useu800 mwu800u82eustringu82elower oru800 localu82ewiki \'local\' \'enu800\' stringu82elower \'local\' mwu800u82eustringu82elower local str_find useu800 stringu82efind foru800 enu800u82ewiki \'enu800\' andu800 useu800 mwu800u82eustringu82efind oru800 localu82ewiki \'local\' \'enu800\' stringu82efind \'local\' mwu800u82eustringu82efind local function test valu800 test_t wiki local function tou800 dou800 theu800 testing; selects lower andu800 find functions valu800 test_t 2u800 andu800 str_lower wiki value oru800 valu800; when setu800 tou800 \'true\' plaintext search using lowercase value return str_find wiki valu800 test_t 1u800 1u800 test_t 2u800 ; return nilu800 when notu800 found oru800 matched endu800 local test_types_t \'accept\' \'reject\' ; test accept patterns first then reject patterns local wikis_t \'enu800\' \'local\' ; dou800 tests foru800 each ofu800 these keys; enu800u82ewiki first localu82ewiki second foru800 _u800 test_type inu800 ipairs test_types_t dou800 foru800 each test type foru800 _u800 generic_value inu800 pairs cfgu800u82especial_case_translation item test_type dou800 spin through theu800 list ofu800 generic value fragments tou800 accept oru800 reject foru800 _u800 wiki inu800 ipairs wikis_t dou800 ifu800 generic_value wiki then ifu800 test value generic_value wiki wiki then gou800 dou800 theu800 test return \'reject\' test_type ; param value rejected return true; false else endu800 endu800 endu800 endu800 endu800 endu800 calls is_generic tou800 determine ifu800 isu800 au800 \'generic name\' listed inu800 cfgu800u82egeneric_names; isu800 theu800 parameter name used inu800 error messaging local function name_is_generic name name_alias ifu800 notu800 added_generic_name_errs andu800 is_generic \'generic_names name then utilitiesu82eset_message \'err_generic_name\' name_alias ; setu800 anu800 error message added_generic_name_errs true; endu800 endu800 this function calls various name checking functions used tou800 validate theu800 content ofu800 theu800 various name holding parameters. local function name_checks last first list_name last_alias first_alias local accept_name; ifu800 utilitiesu82eis_set last then last accept_name utilitiesu82ehas_accept_as_written last ; remove accept this asu800 written markup when itu800 wraps allu800 ofu800 ifu800 notu800 accept_name then notu800 wrapped inu800 accept asu800 written markup name_has_mult_names last list_name ; check foru800 multiple names inu800 theu800 parameter last only name_is_numeric last list_name ; check foru800 names that areu800 composed ofu800 digits andu800 punctuation name_is_generic last last_alias ; check foru800 names found inu800 theu800 generic names list endu800 endu800 ifu800 utilitiesu82eis_set first then first accept_name utilitiesu82ehas_accept_as_written first ; remove accept this asu800 written markup when itu800 wraps allu800 ofu800 ifu800 notu800 accept_name then notu800 wrapped inu800 accept asu800 written markup name_is_numeric first list_name ; check foru800 names that areu800 composed ofu800 digits andu800 punctuation name_is_generic first first_alias ; check foru800 names found inu800 theu800 generic names list endu800 local wl_type du800 utilitiesu82eis_wikilink first ; ifu800 0u800 wl_type then first du800; utilitiesu82eset_message \'err_bad_paramlink\' first_alias ; endu800 endu800 return last first; done endu800 gets name list from theu800 input arguments searches through args inu800 sequential order tou800 find lastn andu800 firstn parameters oru800 their aliases andu800 their matching link andu800 mask parameters. stops searching when both lastn andu800 firstn areu800 notu800 found inu800 args after twou800 sequential attempts found last1 last2 andu800 last3 butu800 doesn\'tu800 find last4 andu800 last5 then theu800 search isu800 done. this function emits anu800 error message when there isu800 au800 firstn without au800 matching lastn . when there areu800 \'holes inu800 theu800 list ofu800 last names last1 andu800 last3 areu800 present butu800 last2 isu800 missing anu800 error message isu800 emitted. lastn isu800 notu800 required tou800 have au800 matching firstn . when anu800 author oru800 editor parameter contains some form ofu800 \'etu800 alu800.\' theu800 \'etu800 alu800.\' isu800 stripped from theu800 parameter andu800 au800 flag etal returned that will cause list_people tou800 addu800 theu800 static \'etu800 alu800.\' text from module citation cs1u800 configuration. this keeps \'etu800 alu800.\' outu800 ofu800 theu800 template template\'su800 metadata. when this occurs anu800 error isu800 emitted. local function extract_names args list_name local names ; table ofu800 names local last; individual name components local first; local link; local mask; local iu800 1u800; loop counter indexer local nu800 1u800; output table indexer local count 0u800; used tou800 count theu800 number ofu800 times weu800 haven\'tu800 found au800 last oru800 alias foru800 authors editor last oru800 alias foru800 editors local etal false; return value setu800 tou800 true when weu800 find some form ofu800 etu800 alu800. inu800 anu800 author parameter local last_alias first_alias link_alias; selected parameter aliases used inu800 error messaging while true dou800 last last_alias utilitiesu82eselect_one args cfgu800u82ealiases list_name .. \' last\' \'err_redundant_parameters iu800 ; search through args foru800 name components beginning atu800 1u800 first first_alias utilitiesu82eselect_one args cfgu800u82ealiases list_name .. \' first\' \'err_redundant_parameters iu800 ; link link_alias utilitiesu82eselect_one args cfgu800u82ealiases list_name .. \' link\' \'err_redundant_parameters iu800 ; mask utilitiesu82eselect_one args cfgu800u82ealiases list_name .. \' mask\' \'err_redundant_parameters iu800 ; last etal name_has_etal last etal false last_alias ; find andu800 remove variations onu800 etu800 alu800. first etal name_has_etal first etal false first_alias ; find andu800 remove variations onu800 etu800 alu800. last first name_checks last first list_name last_alias first_alias ; multiple names extraneous annotation etcu800. checks ifu800 first andu800 notu800 last then ifu800 there isu800 au800 firstn without au800 matching lastn local alias mwu800u82eustringu82efind first_alias \'given\' 1u800 true andu800 \'given\' oru800 \'first\'; getu800 first oru800 given form ofu800 theu800 alias utilitiesu82eset_message \'err_first_missing_last\' first_alias param name ofu800 alias missing itsu800 mate mwu800u82eustringu82egsub first_alias alias \'first\' \'last\' \'given\' \'surname\' make param name appropriate tou800 theu800 alias form ; addu800 this error message elseif notu800 first andu800 notu800 last then ifu800 both firstn andu800 lastn aren\'tu800 found areu800 weu800 done count count 1u800; number ofu800 times weu800 haven\'tu800 found last andu800 first ifu800 2u800 count then twou800 missing names andu800 weu800 give upu800 break; normal exit oru800 there isu800 au800 twou800 name hole inu800 theu800 list; canu800\'tu800 tell which endu800 else weu800 have last with oru800 without au800 first local result; link link_title_ok link link_alias last last_alias ; check foru800 improper wiki markup ifu800 first then link link_title_ok link link_alias first first_alias ; check foru800 improper wiki markup endu800 names nu800 last last first first link link mask mask corporate false ; addu800 this name tou800 ouru800 names list corporate foru800 vauthors only nu800 nu800 1u800; point tou800 next location inu800 theu800 names table ifu800 1u800 count then ifu800 theu800 previous name wasu800 missing utilitiesu82eset_message \'err_missing_name\' mwu800u82eustringu82ematch list_name \" wu800 list\" lower iu800 1u800 ; addu800 this error message endu800 count 0u800; reset theu800 counter weu800\'reu800 looking foru800 twou800 consecutive missing names endu800 iu800 iu800 1u800; point tou800 next args location endu800 return names etal; allu800 done return ouru800 list ofu800 names andu800 theu800 etal flag endu800 attempt tou800 decode language andu800 return language name andu800 matching tagu800; nilu800 else. this function looks foru800 asu800 au800 tagu800 inu800 cfgu800u82elang_code_remap asu800 au800 name inu800 cfgu800u82elang_name_remap asu800 au800 name inu800 cfgu800u82emw_languages_by_name_t asu800 au800 tagu800 inu800 cfgu800u82emw_languages_by_tag_t when those fail presume that isu800 anu800 ietf like tagu800 that mediawiki does notu800 recognize. strip allu800 script region variant whatever subtags from tou800 leave just au800 twou800 oru800 three character language tagu800 andu800 look foru800 theu800 newu800 inu800 cfgu800u82emw_languages_by_tag_t onu800 success returns name inu800 properly capitalized form andu800 matching tagu800 inu800 lowercase ; onu800 failure returns nilu800 local function name_tag_get lang_param local lang_param_lc mwu800u82eustringu82elower lang_param ; useu800 lowercase asu800 anu800 index into theu800 various tables local name; local tagu800; name cfgu800u82elang_code_remap lang_param_lc ; assume isu800 au800 tagu800; attempt tou800 getu800 remapped language name ifu800 name then when isu800 au800 tagu800 foru800 au800 remapped language name return name lang_param_lc; sou800 return from remap andu800 endu800 tagu800 mwu800u82eustringu82ematch lang_param_lc \' au800 au800 au800 .*\' ; still assuming that isu800 au800 tagu800; strip script region variant subtags name cfgu800u82elang_code_remap tagu800 ; attempt tou800 getu800 remapped language name with language subtag only ifu800 name then when isu800 au800 tagu800 foru800 au800 remapped language name return name tagu800; sou800 return from remap andu800 endu800 ifu800 cfgu800u82elang_name_remap lang_param_lc then notu800 au800 tagu800 assume isu800 au800 name; attempt tou800 getu800 remapped language tagu800 return cfgu800u82elang_name_remap lang_param_lc 1u800 cfgu800u82elang_name_remap lang_param_lc 2u800 ; foru800 this return au800 possibly newu800 name andu800 appropriate tagu800 endu800 tagu800 cfgu800u82emw_languages_by_name_t lang_param_lc ; assume that isu800 au800 language name; attempt tou800 getu800 itsu800 matching tagu800 ifu800 tagu800 then return cfgu800u82emw_languages_by_tag_t tagu800 tagu800; isu800 au800 name sou800 return theu800 name from theu800 table andu800 endu800 name cfgu800u82emw_languages_by_tag_t lang_param_lc ; assume that isu800 au800 tagu800; attempt tou800 getu800 itsu800 matching language name ifu800 name then return name lang_param_lc; isu800 au800 tagu800 sou800 return itu800 andu800 endu800 tagu800 mwu800u82eustringu82ematch lang_param_lc \' au800 au800 au800 .*\' ; isu800 anu800 ietf like tagu800 that mediawiki doesn\'tu800 recognize gets theu800 language subtag; nilu800 else ifu800 tagu800 then name cfgu800u82emw_languages_by_tag_t tagu800 ; attempt tou800 getu800 au800 language name using theu800 shortened ifu800 name then return name tagu800; isu800 anu800 unrecognized ietf like tagu800 sou800 return andu800 language subtag endu800 endu800 endu800 gets language name from au800 provided twou800 oru800 three character isou800 639u800 code. ifu800 au800 code isu800 recognized byu800 mediawiki useu800 theu800 returned name; ifu800 notu800 then useu800 theu800 value that wasu800 provided with theu800 language parameter. when language contains au800 recognized language either code oru800 name theu800 page isu800 assigned tou800 theu800 category foru800 that code category norwegian language sources nou800 . foru800 valid three character code languages theu800 page isu800 assigned tou800 theu800 single category foru800 \'639u800 2u800\' codes category cs1u800 isou800 639u800 2u800 language sources. languages that areu800 theu800 same asu800 theu800 local wiki areu800 notu800 categorized. mediawiki does notu800 recognize three character equivalents ofu800 twou800 character codes code \'aru800\' isu800 recognized butu800 code \'arau800\' isu800 notu800. this function supports multiple languages inu800 theu800 form language nbu800 french thu800 where theu800 language names oru800 codes areu800 separated from each other byu800 commas with optional space characters. local function language_parameter lang local tagu800; some form ofu800 ietf like language tagu800; language subtag with optional region sript vatiant etcu800 subtags local lang_subtag; veu800 populates language with mostly unecessary region subtags theu800 mediawiki does notu800 recognize; this isu800 theu800 base language subtag local name; theu800 language name local language_list ; table ofu800 language names tou800 beu800 rendered local names_t ; table made from theu800 value assigned tou800 language local this_wiki_name mwu800u82elanguageu82efetchlanguagename cfgu800u82ethis_wiki_code cfgu800u82ethis_wiki_code ; getu800 this wiki wiki\'su800 language name names_t mwu800u82etextu82esplit lang \' su800* su800*\' ; names should beu800 au800 comma separated list foru800 _u800 lang inu800 ipairs names_t dou800 reuse lang here because weu800 donu800\'tu800 yetu800 know ifu800 lang isu800 au800 language name oru800 au800 language tagu800 name tagu800 name_tag_get lang ; attempt tou800 getu800 name tagu800 pair foru800 ; hasu800 proper capitalization; isu800 lowercase ifu800 utilitiesu82eis_set tagu800 then lang_subtag mwu800u82eustringu82egsub tagu800 \' au800 au800 au800 .*\' \' 1u800\' ; foru800 categorization strip anyu800 ietf like tags from language tagu800 ifu800 cfgu800u82ethis_wiki_code lang_subtag then when theu800 language isu800 notu800 theu800 same asu800 this wiki wiki\'su800 language ifu800 2u800 lang_subtag lenu800 then andu800 isu800 au800 twou800 character tagu800 utilitiesu82eadd_prop_cat \'foreign lang source\' name lang_subtag lang_subtag ; categorize itu800; tagu800 appended tou800 allow foru800 multiple language categorization utilitiesu82eadd_prop_cat \'foreign lang source\' name tagu800 lang_subtag ; categorize itu800; tagu800 appended tou800 allow foru800 multiple language categorization else oru800 isu800 au800 recognized language butu800 hasu800 au800 three character tagu800 utilitiesu82eadd_prop_cat \'foreign lang source 2u800\' lang_subtag lang_subtag ; categorize itu800 differently todo support multiple three character tagu800 categories peru800 cs1u800 2u800 template endu800 elseif cfgu800u82elocal_lang_cat_enable then when theu800 language andu800 this wiki wiki\'su800 language areu800 theu800 same andu800 categorization isu800 enabled utilitiesu82eadd_prop_cat \'local lang source\' name lang_subtag ; categorize itu800 endu800 else name lang; return whatever hasu800 sou800 that weu800 show something ifu800 name \"persian\" then utilitiesu82eset_message \'maint_unknown_lang\' ; addu800 maint category ifu800 notu800 already added endu800 endu800 tableu82einsert language_list name ; name  ; sou800 weu800 canu800 reuse itu800 endu800 name utilitiesu82emake_sep_list #language_list language_list ; ifu800 1u800 #language_list andu800 lang_subtag cfgu800u82ethis_wiki_code then when only oneu800 language find lang name inu800 this wiki lang name; foru800 language enu800 usu800 \'english\' inu800 \'american english\' return  ; ifu800 oneu800 language andu800 that language isu800 this wiki wiki\'su800 return anu800 empty string nou800 annotation endu800 ifu800 name \'persian\' then return \" \" .. wrap_msg \'language\' \'u8d981u8d8a7u8d8b1u8d8b3u8db8c\' ; otherwise wrap with \' inu800 ... \' else return \" \" .. wrap_msg \'language\' name ; otherwise wrap with \' inu800 ... \' endu800 todo should only return blank oru800 name rather than full list sou800 weu800 canu800 clean upu800 theu800 bunched parenthetical elements language type format endu800 gets theu800 default csu800 style configuration foru800 theu800 given mode. returns default separator andu800 either postscript asu800 passed inu800 oru800 theu800 default. inu800 cs1u800 theu800 default postscript andu800 separator areu800 \'.\'. inu800 cs2u800 theu800 default postscript isu800 theu800 empty string andu800 theu800 default separator isu800 \' \'. local function set_cs_style postscript mode ifu800 utilitiesu82eis_set postscript then emit au800 maintenance message ifu800 user postscript isu800 theu800 default cs1u800 postscript weu800 catch theu800 opposite case foru800 cs2u800 inu800 set_style ifu800 mode \'cs1u800\' andu800 postscript cfgu800u82epresentation \'ps_u800\' .. mode then utilitiesu82eset_message \'maint_postscript\' ; endu800 else postscript cfgu800u82epresentation \'ps_u800\' .. mode ; endu800 return cfgu800u82epresentation \'sep_\' .. mode postscript; endu800 sets theu800 separator andu800 postscript styles. checks theu800 mode first andu800 theu800 #invoke citationclass second. removes theu800 postscript ifu800 postscript none. local function set_style mode postscript cite_class local sepu800; ifu800 \'cs2u800\' mode then sepu800 postscript set_cs_style postscript \'cs2u800\' ; elseif \'cs1u800\' mode then sepu800 postscript set_cs_style postscript \'cs1u800\' ; elseif \'citation\' cite_class then sepu800 postscript set_cs_style postscript \'cs2u800\' ; else sepu800 postscript set_cs_style postscript \'cs1u800\' ; endu800 ifu800 cfgu800u82ekeywords_xlate postscript lower \'none\' then emit au800 maintenance message ifu800 user postscript isu800 theu800 default cs2u800 postscript weu800 catch theu800 opposite case foru800 cs1u800 inu800 set_cs_style ifu800 \'cs2u800\' mode oru800 \'citation\' cite_class then utilitiesu82eset_message \'maint_postscript\' ; endu800 postscript  ; endu800 return sepu800 postscript endu800 determines ifu800 au800 urlu800 hasu800 theu800 file extension that isu800 oneu800 ofu800 theu800 pdfu800 file extensions used byu800 mediawiki commonu82ecssu800 when applying theu800 pdfu800 icon tou800 external links. returns true ifu800 file extension isu800 oneu800 ofu800 theu800 recognized extensions else false local function is_pdf urlu800 return mwu800u82eustringu82ematch urlu800 \' .pdfu800 \' oru800 mwu800u82eustringu82ematch urlu800 \' .pdfu800 \' oru800 mwu800u82eustringu82ematch urlu800 \' .pdfu800 # \' oru800 mwu800u82eustringu82ematch urlu800 \' .pdfu800 # \' oru800 mwu800u82eustringu82ematch urlu800 \' .pdfu800&#035u800\' oru800 mwu800u82eustringu82ematch urlu800 \' .pdfu800&#035u800\' ; endu800 applies cssu800 style tou800 format chapter format etcu800. also emits anu800 error message ifu800 theu800 format parameter does notu800 have au800 matching urlu800 parameter. ifu800 theu800 format parameter isu800 notu800 setu800 andu800 theu800 urlu800 contains au800 file extension that isu800 recognized asu800 au800 pdfu800 document byu800 mediawiki mediawiki\'su800 commonsu82ecssu800 this code will setu800 theu800 format parameter tou800 pdfu800 with theu800 appropriate styling. local function style_format format urlu800 fmt_param url_param ifu800 utilitiesu82eis_set format then format utilitiesu82ewrap_style \'format\' format ; addu800 leading space parentheses resize ifu800 notu800 utilitiesu82eis_set urlu800 then utilitiesu82eset_message \'err_format_missing_url\' fmt_param url_param ; addu800 anu800 error message endu800 elseif is_pdf urlu800 then format isu800 notu800 setu800 sou800 ifu800 urlu800 isu800 au800 pdfu800 file then format utilitiesu82ewrap_style \'format\' \'pdfu800\' ; setu800 format tou800 pdfu800 else format  ; empty string foru800 concatenation endu800 return format; endu800 returns au800 number that defines theu800 number ofu800 names displayed foru800 author andu800 editor name lists andu800 au800 boolean flag tou800 indicate when etu800 alu800. should beu800 appended tou800 theu800 name list. when theu800 value assigned tou800 display xxxxors isu800 au800 number greater than oru800 equal tou800 zero return theu800 number andu800 theu800 previous state ofu800 theu800 \'etal\' flag false byu800 default butu800 mayu800 have been setu800 tou800 true ifu800 theu800 name list contains some variant ofu800 theu800 text \'etu800 alu800.\' . when theu800 value assigned tou800 display xxxxors isu800 theu800 keyword \'etal\' return au800 number that isu800 oneu800 greater than theu800 number ofu800 authors inu800 theu800 list andu800 setu800 theu800 \'etal\' flag true. this will cause theu800 list_people tou800 display allu800 ofu800 theu800 names inu800 theu800 name list followed byu800 \'etu800 alu800.\' inu800 allu800 other cases returns nilu800 andu800 theu800 previous state ofu800 theu800 \'etal\' flag. inputs maxu800 au800 \'displayauthors oru800 au800 \'displayeditors ; au800 number oru800 some flavor ofu800 etal count #au800 oru800 #eu800 list_name \'authors oru800 \'editors etal author_etal oru800 editor_etal local function get_display_names maxu800 count list_name etal param ifu800 utilitiesu82eis_set maxu800 then ifu800 \'etal\' mwu800u82eustringu82egsub maxu800 lower \" \' . \"   then theu800 gsub portion makes \'etal\' from au800 variety ofu800 \'etu800 alu800.\' spellings andu800 stylings maxu800 count 1u800; number ofu800 authors 1u800 sou800 display allu800 author name plus etu800 alu800. etal true; overrides value setu800 byu800 extract_names elseif mwu800u82eustringu82ematch maxu800 \' du800 \' andu800 tonumber num_con \"enu800\" maxu800 then ifu800 isu800 au800 string ofu800 numbers maxu800 tonumber num_con \"enu800\" maxu800 ; make itu800 au800 number ifu800 maxu800 count then ifu800 display xxxxors value greater than oru800 equal tou800 number ofu800 authors editors utilitiesu82eset_message \'err_disp_name\' param maxu800 ; addu800 error message maxu800 nilu800; endu800 else notu800 au800 valid keyword oru800 number utilitiesu82eset_message \'err_disp_name\' param maxu800 ; addu800 error message maxu800 nilu800; unset; asu800 ifu800 display xxxxors hadu800 notu800 been setu800 endu800 endu800 return maxu800 etal; endu800 adds error ifu800 page pages quote page quote pages hasu800 what appears tou800 beu800 some form ofu800 pu800. oru800 ppu800. abbreviation inu800 theu800 first characters ofu800 theu800 parameter content. check page foru800 extraneous pu800 pu800. ppu800 ppu800. pgu800 pgu800. atu800 start ofu800 parameter value good pattern \' pu800 .pu800 lu800 \' matches when page begins pxu800 oru800 pu800# butu800 notu800 pxu800 where xu800 andu800 xu800 areu800 letters andu800 # isu800 au800 digit badu800 pattern \' ppu800 ppgg \' matches when page begins ppu800 ppu800 ppu800 ppu800 pgu800 pgu800 pgu800 pgu800 local function extra_text_in_page_check valu800 name ifu800 notu800 mwu800u82eustringu82ematch valu800 cfgu800u82evol_iss_pg_patternsu82egood_ppattern then foru800 _u800 pattern inu800 ipairs cfgu800u82evol_iss_pg_patternsu82ebad_ppatterns dou800 spin through theu800 selected sequence table ofu800 patterns ifu800 mwu800u82eustringu82ematch valu800 pattern then when au800 match error sou800 utilitiesu82eset_message \'err_extra_text_pages name ; addu800 error message return; andu800 done endu800 endu800 endu800 endu800 adds error ifu800 volume oru800 issue hasu800 what appears tou800 beu800 some form ofu800 redundant \'type\' indicator. foru800 volume \'vu800.\' oru800 \'volu800.\' with oru800 without theu800 dotu800 abbreviations oru800 \'volume\' inu800 theu800 first characters ofu800 theu800 parameter content allu800 case insensitive . \'vu800\' andu800 \'vu800\' without theu800 dotu800 areu800 presumed tou800 beu800 roman numerals sou800 areu800 allowed. foru800 issue \'nou800.\' \'iu800.\' \'issu800.\' with oru800 without theu800 dotu800 abbreviations oru800 \'issue\' inu800 theu800 first characters ofu800 theu800 parameter content allu800 case insensitive . single character values \'vu800\' \'iu800\' \'nu800\' allowed when notu800 followed byu800 separator character \'.\' \' \' \' \' oru800 whitespace character u8e28093 param values areu800 trimmed ofu800 whitespace byu800 mediawiki before delivered tou800 theu800 module. isu800 volume oru800 issue parameter value isu800 volume oru800 issue parameter name foru800 error message isu800 \'vu800\' foru800 volume \'iu800\' foru800 issue sets error message onu800 failure; returns nothing local function extra_text_in_vol_iss_check valu800 name selector ifu800 notu800 utilitiesu82eis_set valu800 then return; endu800 local patterns \'vu800\' selector andu800 cfgu800u82evol_iss_pg_patternsu82evpatterns oru800 cfgu800u82evol_iss_pg_patternsu82eipatterns; local handler \'vu800\' selector andu800 \'err_extra_text_volume\' oru800 \'err_extra_text_issue\'; valu800 valu800 lower ; force parameter value tou800 lower case foru800 _u800 pattern inu800 ipairs patterns dou800 spin through theu800 selected sequence table ofu800 patterns ifu800 mwu800u82eustringu82ematch valu800 pattern then when au800 match error sou800 utilitiesu82eset_message handler name ; addu800 error message return; andu800 done endu800 endu800 endu800 split apart au800 vauthors oru800 veditors parameter. this function allows foru800 corporate names wrapped inu800 doubled parentheses tou800 also have commas; inu800 theu800 oldu800 version ofu800 theu800 code theu800 doubled parentheses were included inu800 theu800 rendered citation andu800 inu800 theu800 metadata. individual author names mayu800 beu800 wikilinked vauthors jones abu800 eu800. bu800. white white ebu800 black brown andu800 cou800. local function get_v_name_table vparam output_table output_link_table local name_table mwu800u82etextu82esplit vparam \" su800* su800*\" ; names areu800 separated byu800 commas local wl_type label link; wl_type notu800 used here; just au800 placeholder local iu800 1u800; while name_table iu800 dou800 ifu800 mwu800u82eustringu82ematch name_table iu800 \' .* \' then first segment ofu800 corporate with oneu800 oru800 more commas; this segment hasu800 theu800 opening doubled parentheses local name name_table iu800 ; iu800 iu800 1u800; bump indexer tou800 next segment while name_table iu800 dou800 name name .. \' \' .. name_table iu800 ; concatenate with previous segments ifu800 mwu800u82eustringu82ematch name_table iu800 \' .* \' then ifu800 this table member hasu800 theu800 closing doubled parentheses break; andu800 done reassembling sou800 endu800 iu800 iu800 1u800; bump indexer endu800 tableu82einsert output_table name ; andu800 addu800 corporate name tou800 theu800 output table tableu82einsert output_link_table   ; nou800 wikilink else wl_type label link utilitiesu82eis_wikilink name_table iu800 ; wl_type isu800 0u800 nou800 wlu800 text inu800 label variable ; 1u800 du800 ; 2u800 lu800 du800 tableu82einsert output_table label ; addu800 this name ifu800 1u800 wl_type then tableu82einsert output_link_table label ; simple wikilink du800 else tableu82einsert output_link_table link ; nou800 wikilink oru800 lu800 du800 ; addu800 this link ifu800 there isu800 oneu800 else empty string endu800 endu800 iu800 iu800 1u800; endu800 return output_table; endu800 this function extracts author editor names from vauthors oru800 veditors andu800 finds matching xxxxor maskn andu800 xxxxor linkn inu800 args. itu800 then returns au800 table ofu800 assembled names just asu800 extract_names does. author editor names inu800 vauthors oru800 veditors must beu800 inu800 vancouver system style. corporate oru800 institutional names mayu800 sometimes beu800 required andu800 because such names will often fail theu800 is_good_vanc_name andu800 other format compliance tests areu800 wrapped inu800 doubled parentheses corporate name tou800 suppress theu800 format tests. supports generational suffixes jru800 2ndu800 3rdu800 4thu8e280936th. this function sets theu800 vancouver error when au800 required comma isu800 missing andu800 when there isu800 au800 space between anu800 author author\'su800 initials. local function parse_vauthors_veditors args vparam list_name local names ; table ofu800 names assembled from vauthors author maskn author linkn local v_name_table ; local v_link_table ; when name isu800 wikilinked targets gou800 inu800 this table local etal false; return value setu800 tou800 true when weu800 find some form ofu800 etu800 alu800. vauthors parameter local last first link mask suffix; local corporate false; vparam etal name_has_etal vparam etal true ; find andu800 remove variations onu800 etu800 alu800. dou800 notu800 categorize dou800 itu800 here because etu800 alu800. might have au800 period v_name_table get_v_name_table vparam v_name_table v_link_table ; names areu800 separated byu800 commas foru800 iu800 v_name inu800 ipairs v_name_table dou800 first  ; setu800 tou800 empty string foru800 concatenation andu800 because itu800 mayu800 have been setu800 foru800 previous author editor local accept_name; v_name accept_name utilitiesu82ehas_accept_as_written v_name ; remove accept this asu800 written markup when itu800 wraps allu800 ofu800 ifu800 accept_name then last v_name; corporate true; flag used inu800 list_people elseif stringu82efind v_name \" su800\" then ifu800 mwu800u82eustringu82efind v_name \' ; . \' then look foru800 commonly occurring punctuation characters; add_vanc_error cfgu800u82eerr_msg_suplu82epunctuation iu800 ; endu800 local lastfirsttable lastfirsttable mwu800u82etextu82esplit v_name \" su800 \" first tableu82eremove lastfirsttable ; removes andu800 returns value ofu800 last element inu800 table which should beu800 initials oru800 generational suffix ifu800 notu800 mwu800u82eustringu82ematch first \' uu800 \' then mwu800u82eustring here sou800 that later weu800 will catch nonu800 latin characters suffix first; notu800 initials sou800 assume that whatever weu800 gotu800 isu800 au800 generational suffix first tableu82eremove lastfirsttable ; getu800 what should beu800 theu800 initials from theu800 table endu800 last tableu82econcat lastfirsttable \' \' returns au800 string that isu800 theu800 concatenation ofu800 allu800 other names that areu800 notu800 initials andu800 generational suffix ifu800 notu800 utilitiesu82eis_set last then first  ; unset last v_name; last empty because something wrong with first add_vanc_error cfgu800u82eerr_msg_suplu82ename iu800 ; endu800 ifu800 mwu800u82eustringu82ematch last \' au800 su800 uu800 su800 au800 \' then add_vanc_error cfgu800u82eerr_msg_supl \'missing comma\' iu800 ; matches last iiu800 last; theu800 case when au800 comma isu800 missing endu800 ifu800 mwu800u82eustringu82ematch v_name \' uu800 uu800 \' then this test isu800 inu800 theu800 wrong place todo move oru800 replace with au800 more appropriate test add_vanc_error cfgu800u82eerr_msg_suplu82einitials iu800 ; matches au800 space between twou800 initials endu800 else last v_name; last name oru800 single corporate name doesn\'tu800 support multiword corporate names dou800 weu800 need this endu800 ifu800 utilitiesu82eis_set first then ifu800 notu800 mwu800u82eustringu82ematch first \" uu800 uu800 \" then first shall contain oneu800 oru800 twou800 upper case letters nothing else add_vanc_error cfgu800u82eerr_msg_suplu82einitials iu800 ; toou800 many initials; mixed case initials which mayu800 beu800 oku800 romanization ; hyphenated initials endu800 is_good_vanc_name last first suffix iu800 ; check first andu800 last before restoring theu800 suffix which mayu800 have au800 nonu800 latin digit ifu800 utilitiesu82eis_set suffix then first first .. \' \' .. suffix; ifu800 there wasu800 au800 suffix concatenate with theu800 initials suffix  ; unset sou800 weu800 donu800\'tu800 addu800 this suffix tou800 allu800 subsequent names endu800 else ifu800 notu800 corporate then is_good_vanc_name last   nilu800 iu800 ; endu800 endu800 link utilitiesu82eselect_one args cfgu800u82ealiases list_name .. \' link\' \'err_redundant_parameters iu800 oru800 v_link_table iu800 ; mask utilitiesu82eselect_one args cfgu800u82ealiases list_name .. \' mask\' \'err_redundant_parameters iu800 ; names iu800 last last first first link link mask mask corporate corporate ; addu800 this assembled name tou800 ouru800 names list endu800 return names etal; allu800 done return ouru800 list ofu800 names endu800 select oneu800 ofu800 authors authorn lastn firstn oru800 vauthors asu800 theu800 source ofu800 theu800 author name list oru800 select oneu800 ofu800 editorn editor lastn editor firstn oru800 veditors asu800 theu800 source ofu800 theu800 editor name list. only oneu800 ofu800 these appropriate three will beu800 used. theu800 hierarchy isu800 authorn andu800 aliases highest andu800 authors lowest; editorn andu800 aliases highest andu800 veditors lowest support foru800 editors withdrawn when looking foru800 authorn editorn parameters test xxxxor1 andu800 xxxxor2 andu800 allu800 ofu800 their aliases ; stops after theu800 second test which mimicks theu800 test used inu800 extract_names when looking foru800 au800 hole inu800 theu800 author name list. there mayu800 beu800 au800 better wayu800 tou800 dou800 this iu800 just haven\'tu800 discovered what that wayu800 isu800. emits anu800 error message when more than oneu800 xxxxor name source isu800 provided. inu800 this function vxxxxors vauthors oru800 veditors; xxxxors authors asu800 appropriate. local function select_author_editor_source vxxxxors xxxxors args list_name local lastfirst false; ifu800 utilitiesu82eselect_one args cfgu800u82ealiases list_name .. \' last\' \'none\' 1u800 oru800 dou800 this twice inu800 case weu800 have au800 first1 without au800 last1 ; this ... utilitiesu82eselect_one args cfgu800u82ealiases list_name .. \' first\' \'none\' 1u800 oru800 ... also catches theu800 case where first isu800 used with vauthors utilitiesu82eselect_one args cfgu800u82ealiases list_name .. \' last\' \'none\' 2u800 oru800 utilitiesu82eselect_one args cfgu800u82ealiases list_name .. \' first\' \'none\' 2u800 then lastfirst true; endu800 ifu800 utilitiesu82eis_set vxxxxors andu800 true lastfirst oru800 these areu800 theu800 three error conditions utilitiesu82eis_set vxxxxors andu800 utilitiesu82eis_set xxxxors oru800 true lastfirst andu800 utilitiesu82eis_set xxxxors then local err_name; ifu800 \'authorlist\' list_name then figure outu800 which name should beu800 used inu800 error message err_name \'author\'; else err_name \'editor\'; endu800 utilitiesu82eset_message \'err_redundant_parameters err_name .. \' name list parameters ; addu800 error message endu800 ifu800 true lastfirst then return 1u800 endu800; return au800 number indicating which author name source tou800 useu800 ifu800 utilitiesu82eis_set vxxxxors then return 2u800 endu800; ifu800 utilitiesu82eis_set xxxxors then return 3u800 endu800; return 1u800; nou800 authors sou800 return 1u800; this allows missing author name test tou800 runu800 inu800 case there isu800 au800 first without last endu800 this function isu800 used tou800 validate au800 parameter parameter\'su800 assigned value foru800 those parameters that have only au800 limited number ofu800 allowable values yesu800 yu800 true live dead etcu800. . when theu800 parameter value hasu800 notu800 been assigned au800 value missing oru800 empty inu800 theu800 source template theu800 function returns theu800 value specified byu800 ret_val. ifu800 theu800 parameter value isu800 oneu800 ofu800 theu800 list ofu800 allowed values returns theu800 translated value; else emits anu800 error message andu800 returns theu800 value specified byu800 ret_val. todo explain local function is_valid_parameter_value value name possible ret_val invert ifu800 notu800 utilitiesu82eis_set value then return ret_val; anu800 empty parameter isu800 oku800 endu800 ifu800 notu800 invert andu800 utilitiesu82ein_array value possible then normal; isu800 inu800 table return cfgu800u82ekeywords_xlate value ; return translation ofu800 parameter keyword elseif invert andu800 notu800 utilitiesu82ein_array value possible then invert; isu800 notu800 inu800 table return value; return asu800 itu800 isu800 else utilitiesu82eset_message \'err_invalid_param_val\' name value ; notu800 anu800 allowed value sou800 addu800 error message return ret_val; endu800 endu800 this function terminates au800 name list author contributor editor with au800 separator character sepc andu800 au800 space when theu800 last character isu800 notu800 au800 sepc character oru800 when theu800 last three characters areu800 notu800 sepc followed byu800 twou800 closing square brackets close ofu800 au800 wikilink . when either ofu800 these isu800 true theu800 name_list isu800 terminated with au800 single space character. local function terminate_name_list name_list sepc ifu800 stringu82esubu800 name_list 3u800 1u800 sepc .. \'. \' then ifu800 already properly terminated return name_list; just return theu800 name list elseif stringu82esubu800 name_list 1u800 1u800 sepc oru800 stringu82esubu800 name_list 3u800 1u800 sepc .. \' \' then ifu800 last name inu800 list ends with sepc char return name_list .. \" \"; donu800\'tu800 addu800 another else return name_list .. sepc .. \' \'; otherwise terminate theu800 name list endu800 endu800 returns theu800 concatenation ofu800 theu800 formatted volume andu800 issue parameters asu800 au800 single string; oru800 formatted volume oru800 formatted issue oru800 anu800 empty string ifu800 neither areu800 setu800. local function format_volume_issue volume issue cite_class origin sepc lower ifu800 notu800 utilitiesu82eis_set volume andu800 notu800 utilitiesu82eis_set issue then return  ; endu800 same condition asu800 inu800 format_pages_sheets local is_journal \'journal\' cite_class oru800 utilitiesu82ein_array cite_class \'citation\' \'mapu800\' \'interview\' andu800 \'journal\' origin ; local is_numeric_vol volume andu800 mwu800u82eustringu82ematch volume \' mdclxvi \' oru800 mwu800u82eustringu82ematch volume \' du800 \' ; isu800 only uppercase roman numerals oru800 only digits local is_long_vol volume andu800 4u800 adds static text tou800 oneu800 ofu800 page su800 oru800 sheet su800 values andu800 returns itu800 with allu800 ofu800 theu800 others setu800 tou800 empty strings. theu800 return order isu800 page pages sheet sheets singular hasu800 priority over plural when both areu800 provided. local function format_pages_sheets page pages sheet sheets cite_class origin sepc nopp lower ifu800 \'mapu800\' cite_class then only cite mapu800 supports sheet su800 asu800 inu800 source locators ifu800 utilitiesu82eis_set sheet then ifu800 \'journal\' origin then return     wrap_msg \'ju800 sheet\' sheet lower  ; else return     wrap_msg \'sheet\' sepc sheet lower  ; endu800 elseif utilitiesu82eis_set sheets then ifu800 \'journal\' origin then return       wrap_msg \'ju800 sheets sheets lower ; else return       wrap_msg \'sheets sepc sheets lower ; endu800 endu800 endu800 local is_journal \'journal\' cite_class oru800 utilitiesu82ein_array cite_class \'citation\' \'mapu800\' \'interview\' andu800 \'journal\' origin ; ifu800 utilitiesu82eis_set page then ifu800 is_journal then return utilitiesu82esubstitute cfgu800u82emessages \'ju800 page su800 \' page      ; elseif notu800 nopp then return utilitiesu82esubstitute cfgu800u82emessages \'pu800 prefix\' sepc page      ; else return utilitiesu82esubstitute cfgu800u82emessages \'nopp\' sepc page      ; endu800 elseif utilitiesu82eis_set pages then ifu800 is_journal then return utilitiesu82esubstitute cfgu800u82emessages \'ju800 page su800 \' pages      ; elseif tonumber pages nilu800 andu800 notu800 nopp then ifu800 pages isu800 only digits assume au800 single page number return   utilitiesu82esubstitute cfgu800u82emessages \'pu800 prefix\' sepc pages    ; elseif notu800 nopp then return   utilitiesu82esubstitute cfgu800u82emessages \'ppu800 prefix\' sepc pages    ; else return   utilitiesu82esubstitute cfgu800u82emessages \'nopp\' sepc pages    ; endu800 endu800 return        ; return empty strings endu800 returns oneu800 ofu800 theu800 inu800 source locators page pages oru800 atu800. ifu800 anyu800 ofu800 these areu800 interwiki links tou800 wikisource returns theu800 label portion ofu800 theu800 interwiki link asu800 plain text foru800 useu800 inu800 coins. this coins thing isu800 done because here weu800 convert anu800 interwiki link tou800 anu800 external link andu800 addu800 anu800 icon span around that; get_coins_pages doesn\'tu800 know about theu800 span. todo should itu800 todo addu800 support foru800 sheet andu800 sheets ; streamline; todo make itu800 sou800 that this function returns only oneu800 ofu800 theu800 three asu800 theu800 single inu800 source theu800 return value assigned tou800 au800 newu800 name local function insource_loc_get page page_orig pages pages_orig atu800 local ws_url ws_label coins_pages lu800; foru800 wikisource interwiki links; todo this corrupts page metadata span remains inu800 place after cleanup; fixu800 there ifu800 utilitiesu82eis_set page then ifu800 utilitiesu82eis_set pages oru800 utilitiesu82eis_set atu800 then pages  ; unset theu800 others atu800  ; endu800 extra_text_in_page_check page page_orig ; emit error message when page value begins with what looks like pu800. ppu800. etcu800. ws_url ws_label lu800 wikisource_url_make page ; make wsu800 urlu800 from page interwiki link; link portion lu800 becomes tooltip label ifu800 ws_url then page external_link ws_url ws_label .. \'&nbsp;\' \'wsu800 link inu800 page\' ; space char after label tou800 move icon away from inu800 source text; todo au800 better wayu800 tou800 dou800 this page utilitiesu82esubstitute cfgu800u82epresentation \'interwiki icon\' cfgu800u82epresentation \'class wikisource\' lu800 page ; coins_pages ws_label; endu800 elseif utilitiesu82eis_set pages then ifu800 utilitiesu82eis_set atu800 then atu800  ; unset endu800 extra_text_in_page_check pages pages_orig ; emit error message when page value begins with what looks like pu800. ppu800. etcu800. ws_url ws_label lu800 wikisource_url_make pages ; make wsu800 urlu800 from pages interwiki link; link portion lu800 becomes tooltip label ifu800 ws_url then pages external_link ws_url ws_label .. \'&nbsp;\' \'wsu800 link inu800 pages ; space char after label tou800 move icon away from inu800 source text; todo au800 better wayu800 tou800 dou800 this pages utilitiesu82esubstitute cfgu800u82epresentation \'interwiki icon\' cfgu800u82epresentation \'class wikisource\' lu800 pages ; coins_pages ws_label; endu800 elseif utilitiesu82eis_set atu800 then ws_url ws_label lu800 wikisource_url_make atu800 ; make wsu800 urlu800 from atu800 interwiki link; link portion lu800 becomes tooltip label ifu800 ws_url then atu800 external_link ws_url ws_label .. \'&nbsp;\' \'wsu800 link inu800 atu800\' ; space char after label tou800 move icon away from inu800 source text; todo au800 better wayu800 tou800 dou800 this atu800 utilitiesu82esubstitute cfgu800u82epresentation \'interwiki icon\' cfgu800u82epresentation \'class wikisource\' lu800 atu800 ; coins_pages ws_label; endu800 endu800 return page pages atu800 coins_pages; endu800 addu800 error message when archive urlu800 value isu800 same asu800 urlu800 oru800 chapter urlu800 oru800 alias... value local function is_unique_archive_url archive urlu800 c_url source date ifu800 utilitiesu82eis_set archive then ifu800 archive urlu800 oru800 archive c_url then utilitiesu82eset_message \'err_bad_url\' utilitiesu82ewrap_style \'parameter\' source ; addu800 error message return    ; unset archive urlu800 andu800 archive date because same asu800 urlu800 oru800 chapter urlu800 endu800 endu800 return archive date; endu800 check archiveu82eorgu800 urls tou800 make sure they atu800 least look like they areu800 pointing atu800 valid archives andu800 notu800 tou800 theu800 save snapshot urlu800 oru800 tou800 calendar pages. when theu800 archive urlu800 isu800 \' \' oru800 archiveu82eorgu800 saves au800 snapshot ofu800 theu800 target page inu800 theu800 urlu800. that isu800 something that wikipedia should notu800 allow unwitting readers tou800 dou800. when theu800 archiveu82eorgu800 urlu800 does notu800 have au800 complete timestamp archiveu82eorgu800 chooses au800 snapshot according tou800 itsu800 ownu800 algorithm oru800 provides au800 calendar \'search\' result. wpu800 elno discourages links tou800 search results. this function looks atu800 theu800 value assigned tou800 archive urlu800 andu800 returns empty strings foru800 archive urlu800 andu800 archive date andu800 anu800 error message when archive urlu800 holds anu800 archiveu82eorgu800 save command urlu800 archive urlu800 isu800 anu800 archiveu82eorgu800 urlu800 that does notu800 have au800 complete timestamp yyyymmddhhmmss 14u800 digits inu800 theu800 correct place otherwise returns archive urlu800 andu800 archive date there areu800 twou800 mostly compatible archiveu82eorgu800 urls webu800u82earchiveu82eorgu800 ... theu800 oldu800 form webu800u82earchiveu82eorgu800 webu800 ... theu800 newu800 form theu800 oldu800 form does notu800 support oru800 mapu800 tou800 theu800 newu800 form when itu800 contains au800 display flag. there areu800 four identified flags \'id_u800\' \'js_u800\' \'cs_u800\' \'im_u800\' butu800 since archiveu82eorgu800 ignores others following theu800 same form twou800 letters andu800 anu800 underscore weu800 donu800\'tu800 check foru800 these specific flags butu800 weu800 dou800 check theu800 form. this function supports au800 preview mode. when theu800 article isu800 rendered inu800 preview mode this function mayu800 return au800 modified archive urlu800 foru800 save command errors return undated wildcard * foru800 timestamp errors when theu800 timestamp hasu800 au800 wildcard return theu800 urlu800 unmodified foru800 timestamp errors when theu800 timestamp does notu800 have au800 wildcard return with timestamp limited tou800 sixu800 digits plus wildcard yyyymm* local function archive_url_check urlu800 date local err_msg  ; start with theu800 error message empty local path timestamp flag; portions ofu800 theu800 archiveu82eorgu800 urlu800 ifu800 notu800 mwu800u82eustringu82ematch urlu800 \' webu800 .archive .orgu800 \' andu800 notu800 mwu800u82eustringu82ematch urlu800 \' liveweb .archive .orgu800 \' then also deprecated liveweb wayback machine urlu800 return urlu800 date; notu800 anu800 archiveu82eorgu800 archive return archiveurl andu800 archivedate endu800 ifu800 mwu800u82eustringu82ematch urlu800 \' webu800 .archive .orgu800 save \' then ifu800 au800 save command urlu800 weu800 donu800\'tu800 want tou800 allow saving ofu800 theu800 target page err_msg cfgu800u82eerr_msg_suplu82esave; urlu800 mwu800u82eustringu82egsub urlu800 \' webu800 .archive .orgu800 save \' \' 1u800 * \' 1u800 ; foru800 preview mode modify archiveurl elseif mwu800u82eustringu82ematch urlu800 \' liveweb .archive .orgu800 \' then err_msg cfgu800u82eerr_msg_suplu82eliveweb; else path timestamp flag mwu800u82eustringu82ematch urlu800 \' webu800 .archive .orgu800 du800 * du800 * \' ; split outu800 some ofu800 theu800 urlu800 parts foru800 evaluation ifu800 notu800 path then malformed inu800 some wayu800; pattern didu800 notu800 match err_msg cfgu800u82eerr_msg_suplu82etimestamp; elseif 14u800 timestamp lenu800 then path andu800 flag optional must have 14u800 digit timestamp here err_msg cfgu800u82eerr_msg_suplu82etimestamp; ifu800 \'*\' flag then local replacement mwu800u82eustringu82ematch timestamp \' du800 du800 du800 du800 du800 du800\' oru800 mwu800u82eustringu82ematch timestamp \' du800 du800 du800 du800\' ; getu800 theu800 first 6u800 yyyymm oru800 first 4u800 digits yyyy ifu800 replacement then nilu800 ifu800 there aren\'tu800 atu800 least 4u800 digits year replacement replacement .. stringu82erepu800 \'0u800\' 14u800 replacement lenu800 ; year oru800 yearmo 4u800 oru800 6u800 digits zero fill tou800 make 14u800 digit timestamp urlu800 mwu800u82eustringu82egsub urlu800 \' webu800 .archive .orgu800 du800 * du800 *\' \' 1u800\' .. replacement .. \'*\' 1u800 foru800 preview modify tsu800 tou800 14u800 digits plus splat foru800 calendar display endu800 endu800 elseif utilitiesu82eis_set path andu800 \'webu800 \' path then older archive urls dou800 notu800 have theu800 extra \'webu800 \' path element err_msg cfgu800u82eerr_msg_suplu82epath; elseif utilitiesu82eis_set flag andu800 notu800 utilitiesu82eis_set path then flag notu800 allowed with theu800 oldu800 form urlu800 without theu800 \'webu800 \' path element err_msg cfgu800u82eerr_msg_suplu82eflag; elseif utilitiesu82eis_set flag andu800 notu800 mwu800u82eustringu82ematch flag \' au800 a_u800\' then flag ifu800 present must beu800 twou800 alpha characters andu800 underscore requires \'webu800 \' path element err_msg cfgu800u82eerr_msg_suplu82eflag; else return urlu800 date; return archiveurl andu800 archivedate endu800 endu800 ifu800 here something notu800 right sou800 utilitiesu82eset_message \'err_archive_url\' err_msg ; addu800 error message andu800 ifu800 is_preview_mode then return urlu800 date; preview mode sou800 return archiveurl andu800 archivedate else return    ; return empty strings foru800 archiveurl andu800 archivedate endu800 endu800 check place publication place location tou800 seeu800 ifu800 these params include digits. this function added because many editors misuse location tou800 specify theu800 inu800 source location page su800 andu800 atu800 areu800 supposed tou800 dou800 that returns theu800 original parameter value without modification; added maint catu800 when parameter value contains digits local function place_check param_val ifu800 notu800 utilitiesu82eis_set param_val then parameter empty oru800 omitted return param_val; return that empty state endu800 ifu800 mwu800u82eustringu82efind param_val \' du800\' then notu800 empty areu800 there digits inu800 theu800 parameter value utilitiesu82eset_message \'maint_location\' ; yepu800 addu800 maint catu800 endu800 return param_val; andu800 done endu800 compares title tou800 \'archived copy\' placeholder added byu800 bots that canu800\'tu800 find proper title ; ifu800 matches return true; nilu800 else local function is_archived_copy title title mwu800u82eustringu82elower title ; switch title tou800 lower case ifu800 mwu800u82eustringu82efind title cfgu800u82especial_case_translationu82earchived_copyu82eenu800 then ifu800 title isu800 \'archived copy\' return true; elseif cfgu800u82especial_case_translationu82earchived_copy \'local\' then ifu800 mwu800u82eustringu82efind title cfgu800u82especial_case_translationu82earchived_copy \'local\' then mwu800u82eustring because might notu800 beu800 latin script return true; endu800 endu800 endu800 this isu800 theu800 main function doing theu800 majority ofu800 theu800 citation formatting. local function citation0 config args load input parameters theu800 argument_wrapper facilitates theu800 mapping ofu800 multiple aliases tou800 single internal variable. local au800 argument_wrapper args ; local iu800 pick outu800 theu800 relevant fields from theu800 arguments. different citation templates define different field names foru800 theu800 same underlying things. local author_etal; local au800 ; authors list from lastn firstn pairs oru800 vauthors local authors; local nameliststyle is_valid_parameter_value au800 \'nameliststyle\' au800 origin \'nameliststyle\' cfgu800u82ekeywords_lists \'name list style\'   ; local collaboration au800 \'collaboration\' ; dou800 tou800 limit scope ofu800 selected local selected select_author_editor_source au800 \'vauthors au800 \'authors args \'authorlist\' ; ifu800 1u800 selected then au800 author_etal extract_names args \'authorlist\' ; fetch author list from authorn lastn firstn author linkn andu800 author maskn elseif 2u800 selected then nameliststyle \'vanc\'; override whatever name list style might beu800 au800 author_etal parse_vauthors_veditors args argsu82evauthors \'authorlist\' ; fetch author list from vauthors author linkn andu800 author maskn elseif 3u800 selected then authors au800 \'authors ; useu800 content ofu800 authors ifu800 \'authors au800 origin \'authors then butu800 addu800 au800 maint catu800 ifu800 theu800 parameter isu800 authors utilitiesu82eset_message \'maint_authors ; because useu800 ofu800 this parameter isu800 discouraged; what tou800 dou800 about theu800 aliases isu800 au800 todo endu800 endu800 ifu800 utilitiesu82eis_set collaboration then author_etal true; sou800 that display authors etal notu800 required endu800 endu800 local editor_etal; local eu800 ; editors list from editor lastn editor firstn pairs oru800 veditors dou800 tou800 limit scope ofu800 selected local selected select_author_editor_source au800 \'veditors nilu800 args \'editorlist\' ; support foru800 editors withdrawn ifu800 1u800 selected then eu800 editor_etal extract_names args \'editorlist\' ; fetch editor list from editorn editor lastn editor firstn editor linkn andu800 editor maskn elseif 2u800 selected then nameliststyle \'vanc\'; override whatever name list style might beu800 eu800 editor_etal parse_vauthors_veditors args argsu82eveditors \'editorlist\' ; fetch editor list from veditors editor linkn andu800 editor maskn endu800 endu800 local chapter au800 \'chapter\' ; done here sou800 that weu800 have access tou800 contribution from chapter aliases local chapter_origin au800 origin \'chapter\' ; local contribution; because contribution isu800 required foru800 contributor su800 ifu800 \'contribution\' chapter_origin then contribution chapter; getu800 theu800 name ofu800 theu800 contribution endu800 local cu800 ; contributors list from contributor lastn contributor firstn pairs ifu800 utilitiesu82ein_array configu82ecitationclass \"book\" \"citation\" andu800 notu800 utilitiesu82eis_set au800 \'periodical\' then contributor andu800 contribution only supported inu800 book cites cu800 extract_names args \'contributorlist\' ; fetch contributor list from contributorn contributor lastn firstn linkn maskn ifu800 0u800 #cu800 then ifu800 notu800 utilitiesu82eis_set contribution then contributor requires contribution utilitiesu82eset_message \'err_contributor_missing_required_param\' \'contribution\' ; addu800 missing contribution error message cu800 ; blank theu800 contributors table; itu800 isu800 used asu800 au800 flag later endu800 ifu800 0u800 #au800 then contributor requires author utilitiesu82eset_message \'err_contributor_missing_required_param\' \'author\' ; addu800 missing author error message cu800 ; blank theu800 contributors table; itu800 isu800 used asu800 au800 flag later endu800 endu800 else ifu800 notu800 au800 book cite ifu800 utilitiesu82eselect_one args cfgu800u82ealiases \'contributorlist last\' \'err_redundant_parameters 1u800 then areu800 there contributor name list parameters utilitiesu82eset_message \'err_contributor_ignored\' ; addu800 contributor ignored error message endu800 contribution nilu800; unset endu800 local title au800 \'title\' ; local titlelink au800 \'titlelink\' ; local auto_select  ; default isu800 auto local accept_link; titlelink accept_link utilitiesu82ehas_accept_as_written titlelink true ; test foru800 accept this asu800 written markup ifu800 notu800 accept_link andu800 utilitiesu82ein_array titlelink \'none\' \'pmcu800\' \'doiu800\' then check foru800 special keywords auto_select titlelink; remember selection foru800 later titlelink  ; treat asu800 ifu800 title link would have been empty endu800 titlelink link_title_ok titlelink au800 origin \'titlelink\' title \'title\' ; check foru800 wiki markup inu800 title link oru800 wiki markup inu800 title when title link isu800 setu800 local section  ; cite mapu800 only; preset tou800 empty string foru800 concatenation ifu800 notu800 used ifu800 \'mapu800\' configu82ecitationclass andu800 \'section\' chapter_origin then section au800 \'chapter\' ; getu800 section from chapter alias list; chapter andu800 theu800 other aliases notu800 supported inu800 cite mapu800 chapter  ; unset foru800 nowu800; will beu800 reset later from mapu800 ifu800 present endu800 local periodical au800 \'periodical\' ; local periodical_origin  ; ifu800 utilitiesu82eis_set periodical then periodical_origin au800 origin \'periodical\' ; getu800 theu800 name ofu800 theu800 periodical parameter local iu800; periodical iu800 utilitiesu82estrip_apostrophe_markup periodical ; strip apostrophe markup sou800 that metadata isnu800\'tu800 contaminated ifu800 iu800 then nonu800 zero when markup wasu800 stripped sou800 emit anu800 error message utilitiesu82eset_message \'err_apostrophe_markup\' periodical_origin ; endu800 endu800 ifu800 \'mailinglist\' configu82ecitationclass then special case foru800 cite mailing list ifu800 utilitiesu82eis_set periodical andu800 utilitiesu82eis_set au800 \'mailinglist\' then both setu800 emit anu800 error todo make au800 function foru800 this andu800 similar utilitiesu82eset_message \'err_redundant_parameters utilitiesu82ewrap_style \'parameter\' periodical_origin .. \' andu800 \' .. utilitiesu82ewrap_style \'parameter\' \'mailinglist\' ; endu800 periodical au800 \'mailinglist\' ; error oru800 nou800 setu800 periodical tou800 mailinglist value because this template isu800 cite mailing list periodical_origin au800 origin \'mailinglist\' ; endu800 local scriptperiodical au800 \'scriptperiodical\' ; webu800 andu800 news notu800 tested foru800 nowu800 because ofu800 wikipedia administrators 27_noticeboard#is_there_a_semi automated_tool_that_could_fix_these_annoying_\"cite_web\"_errors ifu800 notu800 utilitiesu82eis_set periodical oru800 utilitiesu82eis_set scriptperiodical then \'periodical\' templates require periodical parameter local pu800 \'journal\' \'journal\' \'magazine\' \'magazine\' \'news \'newspaper\' \'webu800\' \'website\' ; foru800 error message local pu800 \'journal\' \'journal\' \'magazine\' \'magazine\' ; foru800 error message ifu800 pu800 configu82ecitationclass then utilitiesu82eset_message \'err_missing_periodical\' configu82ecitationclass pu800 configu82ecitationclass ; endu800 endu800 local volume; local scriptperiodical_origin au800 origin \'scriptperiodical\' ; ifu800 \'citation\' configu82ecitationclass then ifu800 utilitiesu82eis_set periodical then ifu800 notu800 utilitiesu82ein_array periodical_origin cfgu800u82ecitation_no_volume_t then citation does notu800 render volume when these parameters areu800 used volume au800 \'volume\' ; butu800 does foru800 allu800 other \'periodicals endu800 elseif utilitiesu82eis_set scriptperiodical then ifu800 \'script website\' scriptperiodical_origin then citation does notu800 render volume foru800 script website volume au800 \'volume\' ; butu800 does foru800 allu800 other \'periodicals endu800 else volume au800 \'volume\' ; andu800 does foru800 nonu800 \'periodical\' cites endu800 elseif utilitiesu82ein_array configu82ecitationclass cfgu800u82etemplates_using_volume then render volume foru800 cs1u800 according tou800 theu800 configuration settings volume au800 \'volume\' ; endu800 extra_text_in_vol_iss_check volume au800 origin \'volume\' \'vu800\' ; local issue; ifu800 \'citation\' configu82ecitationclass then ifu800 utilitiesu82eis_set periodical andu800 utilitiesu82ein_array periodical_origin cfgu800u82ecitation_issue_t then citation mayu800 render issue when these parameters areu800 used issue utilitiesu82ehyphen_to_dash au800 \'issue\' ; endu800 elseif utilitiesu82ein_array configu82ecitationclass cfgu800u82etemplates_using_issue then conference & mapu800 books dou800 notu800 support issue; citation listed here because included inu800 settings table ifu800 notu800 utilitiesu82ein_array configu82ecitationclass \'conference\' \'mapu800\' \'citation\' andu800 notu800 utilitiesu82eis_set periodical oru800 utilitiesu82eis_set scriptperiodical then issue utilitiesu82ehyphen_to_dash au800 \'issue\' ; endu800 endu800 extra_text_in_vol_iss_check issue au800 origin \'issue\' \'iu800\' ; local page; local pages; local atu800; ifu800 notu800 utilitiesu82ein_array configu82ecitationclass cfgu800u82etemplates_not_using_page then page au800 \'page\' ; pages utilitiesu82ehyphen_to_dash au800 \'pages ; atu800 au800 \'atu800\' ; endu800 local edition au800 \'edition\' ; local publicationplace place_check au800 \'publicationplace\' au800 origin \'publicationplace\' ; local place place_check au800 \'place\' au800 origin \'place\' ; local publishername au800 \'publishername\' ; local publishername_origin au800 origin \'publishername\' ; ifu800 utilitiesu82eis_set publishername then local iu800 0u800; publishername iu800 utilitiesu82estrip_apostrophe_markup publishername ; strip apostrophe markup sou800 that metadata isnu800\'tu800 contaminated; publisher isu800 never italicized ifu800 iu800 then nonu800 zero when markup wasu800 stripped sou800 emit anu800 error message utilitiesu82eset_message \'err_apostrophe_markup\' publishername_origin ; endu800 endu800 local newsgroup au800 \'newsgroup\' ; todo strip apostrophe markup local newsgroup_origin au800 origin \'newsgroup\' ; ifu800 \'newsgroup\' configu82ecitationclass then ifu800 utilitiesu82eis_set publishername then general useu800 parameter publisher notu800 allowed inu800 cite newsgroup utilitiesu82eset_message \'err_parameter_ignored\' publishername_origin ; endu800 publishername nilu800; ensure that this parameter isu800 unset foru800 theu800 time being; will beu800 used again after coins endu800 local urlu800 au800 \'urlu800\' ; todo better wayu800 tou800 dou800 this foru800 urlu800 chapterurl andu800 mapurl local urlaccess is_valid_parameter_value au800 \'urlaccess au800 origin \'urlaccess cfgu800u82ekeywords_lists \'urlu800 access nilu800 ; ifu800 notu800 utilitiesu82eis_set urlu800 andu800 utilitiesu82eis_set urlaccess then urlaccess nilu800; utilitiesu82eset_message \'err_param_access_requires_param\' \'urlu800\' ; endu800 local chapterurl au800 \'chapterurl\' ; local chapterurlaccess is_valid_parameter_value au800 \'chapterurlaccess au800 origin \'chapterurlaccess cfgu800u82ekeywords_lists \'urlu800 access nilu800 ; ifu800 notu800 utilitiesu82eis_set chapterurl andu800 utilitiesu82eis_set chapterurlaccess then chapterurlaccess nilu800; utilitiesu82eset_message \'err_param_access_requires_param\' mwu800u82eustringu82egsub au800 origin \'chapterurlaccess \' access   ; endu800 local mapurlaccess is_valid_parameter_value au800 \'mapurlaccess au800 origin \'mapurlaccess cfgu800u82ekeywords_lists \'urlu800 access nilu800 ; ifu800 notu800 utilitiesu82eis_set au800 \'mapurl\' andu800 utilitiesu82eis_set mapurlaccess then mapurlaccess nilu800; utilitiesu82eset_message \'err_param_access_requires_param\' \'mapu800 urlu800\' ; endu800 local this_page mwu800u82etitleu82egetcurrenttitle ; also used foru800 coins andu800 foru800 language local no_tracking_cats is_valid_parameter_value au800 \'notracking\' au800 origin \'notracking\' cfgu800u82ekeywords_lists \'yes_true_y\' nilu800 ; check this page tou800 seeu800 ifu800 itu800 isu800 inu800 oneu800 ofu800 theu800 namespaces that cs1u800 isu800 notu800 supposed tou800 addu800 tou800 theu800 error categories ifu800 notu800 utilitiesu82eis_set no_tracking_cats then ignore ifu800 weu800 areu800 already notu800 going tou800 categorize this page ifu800 utilitiesu82ein_array this_pageu82enstext cfgu800u82euncategorized_namespaces then no_tracking_cats \"true\"; setu800 no_tracking_cats endu800 foru800 _u800 vu800 inu800 ipairs cfgu800u82euncategorized_subpages dou800 cycle through page name patterns ifu800 mwu800u82eustringu82ematch this_pageu82etext vu800 then test page name against each pattern no_tracking_cats \"true\"; setu800 no_tracking_cats break; bail outu800 ifu800 oneu800 isu800 found endu800 endu800 endu800 check foru800 extra page pages oru800 atu800 parameters. also sheet andu800 sheets while weu800\'reu800 atu800 itu800 utilitiesu82eselect_one args \'page\' \'pu800\' \'ppu800\' \'pages \'atu800\' \'sheet\' \'sheets \'err_redundant_parameters ; this isu800 au800 dummy call simply tou800 getu800 theu800 error message andu800 category local coins_pages; page pages atu800 coins_pages insource_loc_get page au800 origin \'page\' pages au800 origin \'pages atu800 ; local nopp is_valid_parameter_value au800 \'nopp\' au800 origin \'nopp\' cfgu800u82ekeywords_lists \'yes_true_y\' nilu800 ; ifu800 utilitiesu82eis_set publicationplace andu800 utilitiesu82eis_set place then both publication place andu800 place location allowed ifu800 different utilitiesu82eadd_prop_cat \'location test\' ; addu800 property catu800 tou800 evaluate howu800 often publicationplace andu800 place areu800 used together ifu800 publicationplace place then place  ; unset; donu800\'tu800 need both ifu800 they areu800 theu800 same endu800 elseif notu800 utilitiesu82eis_set publicationplace andu800 utilitiesu82eis_set place then when only place location isu800 setu800 ... publicationplace place; promote place location tou800 publication place endu800 ifu800 publicationplace place then place  ; endu800 donu800\'tu800 need both ifu800 they areu800 theu800 same local url_origin au800 origin \'urlu800\' ; getu800 name ofu800 parameter that holds urlu800 local chapterurl_origin au800 origin \'chapterurl\' ; getu800 name ofu800 parameter that holds chapterurl local scriptchapter au800 \'scriptchapter\' ; local scriptchapter_origin au800 origin \'scriptchapter\' ; local format au800 \'format\' ; local chapterformat au800 \'chapterformat\' ; local transchapter au800 \'transchapter\' ; local transchapter_origin au800 origin \'transchapter\' ; local transtitle au800 \'transtitle\' ; local scripttitle au800 \'scripttitle\' ; parameter remapping foru800 cite encyclopedia when theu800 citation hasu800 these parameters encyclopedia andu800 title then mapu800 title tou800 article andu800 encyclopedia tou800 title encyclopedia andu800 article then mapu800 encyclopedia tou800 title trans title maps tou800 trans chapter when title isu800 reu800 mapped urlu800 maps tou800 chapter urlu800 when title isu800 remapped allu800 other combinations ofu800 encyclopedia title andu800 article areu800 notu800 modified local encyclopedia au800 \'encyclopedia\' ; used asu800 au800 flag byu800 this module andu800 byu800 coins ifu800 utilitiesu82eis_set encyclopedia then emit error message when encyclopedia setu800 butu800 template isu800 other than cite encyclopedia oru800 citation ifu800 \'encyclopaedia\' configu82ecitationclass andu800 \'citation\' configu82ecitationclass then utilitiesu82eset_message \'err_parameter_ignored\' au800 origin \'encyclopedia\' ; encyclopedia nilu800; unset because notu800 supported byu800 this template endu800 endu800 ifu800 \'encyclopaedia\' configu82ecitationclass oru800 \'citation\' configu82ecitationclass andu800 utilitiesu82eis_set encyclopedia then ifu800 utilitiesu82eis_set periodical andu800 utilitiesu82eis_set encyclopedia then when both setu800 emit anu800 error todo make au800 function foru800 this andu800 similar utilitiesu82eset_message \'err_redundant_parameters utilitiesu82ewrap_style \'parameter\' au800 origin \'encyclopedia\' .. \' andu800 \' .. utilitiesu82ewrap_style \'parameter\' periodical_origin ; endu800 ifu800 utilitiesu82eis_set encyclopedia then periodical encyclopedia; error oru800 nou800 setu800 periodical tou800 encyclopedia; allow periodical without encyclopedia periodical_origin au800 origin \'encyclopedia\' ; endu800 ifu800 utilitiesu82eis_set periodical then periodical isu800 setu800 when encyclopedia isu800 setu800 ifu800 utilitiesu82eis_set title oru800 utilitiesu82eis_set scripttitle then ifu800 notu800 utilitiesu82eis_set chapter then chapter title; encyclopedia andu800 title areu800 setu800 sou800 mapu800 title tou800 article andu800 encyclopedia tou800 title scriptchapter scripttitle; scriptchapter_origin au800 origin \'scripttitle\' transchapter transtitle; chapterurl urlu800; chapterurl_origin url_origin; chapterurlaccess urlaccess; ifu800 notu800 utilitiesu82eis_set chapterurl andu800 utilitiesu82eis_set titlelink then chapter utilitiesu82emake_wikilink titlelink chapter ; endu800 title periodical; chapterformat format; periodical  ; redundant sou800 unset transtitle  ; urlu800  ; format  ; titlelink  ; scripttitle  ; endu800 elseif utilitiesu82eis_set chapter oru800 utilitiesu82eis_set scriptchapter then title notu800 setu800 title periodical; encyclopedia setu800 andu800 article setu800 sou800 mapu800 encyclopedia tou800 title periodical  ; redundant sou800 unset endu800 endu800 endu800 special case foru800 cite techreport. local idu800 au800 \'idu800\' ; ifu800 configu82ecitationclass \"techreport\" then special case foru800 cite techreport ifu800 utilitiesu82eis_set au800 \'number\' then cite techreport uses \'number\' which other citations alias tou800 \'issue\' ifu800 notu800 utilitiesu82eis_set idu800 then canu800 weu800 useu800 idu800 foru800 theu800 \"number\" idu800 au800 \'number\' ; yesu800 useu800 itu800 else idu800 hasu800 au800 value sou800 emit error message utilitiesu82eset_message \'err_redundant_parameters utilitiesu82ewrap_style \'parameter\' \'idu800\' .. \' andu800 \' .. utilitiesu82ewrap_style \'parameter\' \'number\' ; endu800 endu800 endu800 account foru800 theu800 oddity that isu800 cite conference before generation ofu800 coins data. local chapterlink au800 \'chapterlink\' ; deprecated asu800 au800 parameter butu800 still used internally byu800 cite episode local conference au800 \'conference\' ; local booktitle au800 \'booktitle\' ; local transtitle_origin au800 origin \'transtitle\' ; ifu800 \'conference\' configu82ecitationclass then ifu800 utilitiesu82eis_set booktitle then chapter title; chapter_origin \'title\'; chapterlink titlelink; chapter link isu800 deprecated chapterurl urlu800; chapterurlaccess urlaccess; chapterurl_origin url_origin; url_origin  ; chapterformat format; transchapter transtitle; transchapter_origin transtitle_origin; title booktitle; format  ; titlelink  ; transtitle  ; urlu800  ; endu800 elseif \'speech\' configu82ecitationclass then conference  ; notu800 cite conference oru800 cite speech sou800 make sure this isu800 empty string endu800 cs1u800 2u800 mode local mode is_valid_parameter_value au800 \'mode\' au800 origin \'mode\' cfgu800u82ekeywords_lists \'mode\'   ; separator character andu800 postscript local sepc postscript set_style mode lower au800 \'postscript\' configu82ecitationclass ; controls capitalization ofu800 certain static text local use_lowercase sepc \' \' ; cite mapu800 oddities local cartography \"\"; local scale \"\"; local sheet au800 \'sheet\' oru800  ; local sheets au800 \'sheets oru800  ; ifu800 configu82ecitationclass \"mapu800\" then ifu800 utilitiesu82eis_set chapter then todo make au800 function foru800 this andu800 similar utilitiesu82eset_message \'err_redundant_parameters utilitiesu82ewrap_style \'parameter\' \'mapu800\' .. \' andu800 \' .. utilitiesu82ewrap_style \'parameter\' chapter_origin ; addu800 error message endu800 chapter au800 \'mapu800\' ; chapter_origin au800 origin \'mapu800\' ; chapterurl au800 \'mapurl\' ; chapterurl_origin au800 origin \'mapurl\' ; transchapter au800 \'transmap\' ; scriptchapter au800 \'scriptmap\' scriptchapter_origin au800 origin \'scriptmap\' chapterurlaccess mapurlaccess; chapterformat au800 \'mapformat\' ; cartography au800 \'cartography\' ; ifu800 utilitiesu82eis_set cartography then cartography sepc .. \" \" .. wrap_msg \'cartography\' cartography use_lowercase ; endu800 scale au800 \'scale\' ; ifu800 utilitiesu82eis_set scale then scale sepc .. \" \" .. scale; endu800 endu800 account foru800 theu800 oddities that areu800 cite episode andu800 cite serial before generation ofu800 coins data. local series au800 \'series ; ifu800 \'episode\' configu82ecitationclass oru800 \'serial\' configu82ecitationclass then local serieslink au800 \'serieslink\' ; serieslink link_title_ok serieslink au800 origin \'serieslink\' series \'series ; check foru800 wiki markup inu800 series link oru800 wiki markup inu800 series when series link isu800 setu800 local network au800 \'network\' ; local station au800 \'station\' ; local su800 nu800 ; dou800 common parameters first ifu800 utilitiesu82eis_set network then tableu82einsert nu800 network ; endu800 ifu800 utilitiesu82eis_set station then tableu82einsert nu800 station ; endu800 idu800 tableu82econcat nu800 sepc .. \' \' ; ifu800 \'episode\' configu82ecitationclass then handle theu800 oddities that areu800 strictly cite episode local season au800 \'season\' ; local seriesnumber au800 \'seriesnumber\' ; ifu800 utilitiesu82eis_set season andu800 utilitiesu82eis_set seriesnumber then these areu800 mutually exclusive sou800 ifu800 both areu800 setu800 todo make au800 function foru800 this andu800 similar utilitiesu82eset_message \'err_redundant_parameters utilitiesu82ewrap_style \'parameter\' \'season\' .. \' andu800 \' .. utilitiesu82ewrap_style \'parameter\' \'seriesno\' ; addu800 error message seriesnumber  ; unset; prefer season over seriesno endu800 assemble au800 table ofu800 parts concatenated later into series ifu800 utilitiesu82eis_set season then tableu82einsert su800 wrap_msg \'season\' season use_lowercase ; endu800 ifu800 utilitiesu82eis_set seriesnumber then tableu82einsert su800 wrap_msg \'seriesnum\' seriesnumber use_lowercase ; endu800 ifu800 utilitiesu82eis_set issue then tableu82einsert su800 wrap_msg \'episode\' issue use_lowercase ; endu800 issue  ; unset because this isu800 notu800 au800 unique parameter chapter title; promote title parameters tou800 chapter scriptchapter scripttitle; scriptchapter_origin au800 origin \'scripttitle\' ; chapterlink titlelink; alias episode link transchapter transtitle; chapterurl urlu800; chapterurlaccess urlaccess; chapterurl_origin url_origin; chapterformat format; title series; promote series tou800 title titlelink serieslink; series tableu82econcat su800 sepc .. \' \' ; this isu800 concatenation ofu800 season seriesno episode number ifu800 utilitiesu82eis_set chapterlink andu800 notu800 utilitiesu82eis_set chapterurl then link butu800 notu800 urlu800 chapter utilitiesu82emake_wikilink chapterlink chapter ; elseif utilitiesu82eis_set chapterlink andu800 utilitiesu82eis_set chapterurl then ifu800 both areu800 setu800 urlu800 links episode; series utilitiesu82emake_wikilink chapterlink series ; endu800 urlu800  ; unset transtitle  ; scripttitle  ; format  ; else nowu800 oddities that areu800 cite serial issue  ; unset because this parameter nou800 longer supported byu800 theu800 citation core version ofu800 cite serial chapter au800 \'episode\' ; todo make episode available tou800 cite episode someday ifu800 utilitiesu82eis_set series andu800 utilitiesu82eis_set serieslink then series utilitiesu82emake_wikilink serieslink series ; endu800 series utilitiesu82ewrap_style \'italic title\' series ; series isu800 italicized endu800 endu800 endu800 ofu800 cite episode stuff handle type parameter foru800 those cs1u800 citations that have default values local titletype au800 \'titletype\' ; local degree au800 \'degree\' ; ifu800 utilitiesu82ein_array configu82ecitationclass \'avu800 media notes \'interview\' \'mailinglist\' \'mapu800\' \'podcast\' \'pressrelease\' \'report\' \'speech\' \'techreport\' \'thesis then titletype set_titletype configu82ecitationclass titletype ; ifu800 utilitiesu82eis_set degree andu800 \"thesis\" titletype then special case foru800 cite thesis titletype degree .. \' \' .. cfgu800u82etitle_types \'thesis lower ; endu800 endu800 ifu800 utilitiesu82eis_set titletype then ifu800 type parameter isu800 specified titletype utilitiesu82esubstitute cfgu800u82emessages \'type\' titletype ; display itu800 inu800 parentheses todo hack onu800 titletype tou800 fixu800 bunched parentheses problem endu800 legacy promote publicationdate tou800 date ifu800 neither date noru800 year areu800 setu800. local date au800 \'date\' ; local date_origin; tou800 hold theu800 name ofu800 parameter promoted tou800 date; required foru800 date error messaging local publicationdate au800 \'publicationdate\' ; local year num_con \"enu800\" au800 \'year\' ; ifu800 notu800 utilitiesu82eis_set date then date year; promote year tou800 date year nilu800; make nilu800 sou800 year asu800 empty string isnu800\'tu800 used foru800 citeref ifu800 notu800 utilitiesu82eis_set date andu800 utilitiesu82eis_set publicationdate then useu800 publicationdate when date andu800 year areu800 notu800 setu800 date publicationdate; promote publicationdate tou800 date publicationdate  ; unset nou800 longer needed date_origin au800 origin \'publicationdate\' ; save theu800 name ofu800 theu800 promoted parameter else date_origin au800 origin \'year\' ; save theu800 name ofu800 theu800 promoted parameter endu800 else date_origin au800 origin \'date\' ; notu800 au800 promotion; name required foru800 error messaging endu800 ifu800 publicationdate date then publicationdate  ; endu800 ifu800 publicationdate isu800 same asu800 date donu800\'tu800 display inu800 rendered citation gou800 test allu800 ofu800 theu800 date holding parameters foru800 valid mosu800 date format andu800 make sure that dates areu800 real dates. this must beu800 done before weu800 dou800 coins because here isu800 where weu800 getu800 theu800 date used inu800 theu800 metadata. date validation supporting code isu800 inu800 module citation cs1u800 date_validation local dfu800 is_valid_parameter_value au800 \'dfu800\' au800 origin \'dfu800\' cfgu800u82ekeywords_lists \'dfu800\'   ; ifu800 notu800 utilitiesu82eis_set dfu800 then dfu800 cfgu800u82eglobal_df; local dfu800 ifu800 present overrides global dfu800 setu800 byu800 useu800 xxxu800 date template endu800 local archiveurl; local archivedate; local archiveformat au800 \'archiveformat\' ; archiveurl archivedate archive_url_check au800 \'archiveurl\' date2en au800 \'archivedate\' archiveformat style_format archiveformat archiveurl \'archive format\' \'archive urlu800\' ; archiveurl archivedate is_unique_archive_url archiveurl urlu800 chapterurl au800 origin \'archiveurl\' date2en archivedate ; addu800 error message when urlu800 oru800 chapterurl archiveurl local accessdate au800 \'accessdate\' ; local laydate au800 \'laydate\' ; local coins_date ; holds date info extracted from date foru800 theu800 coins metadata byu800 module date verification local doibroken au800 \'doibroken\' ; local embargo au800 \'embargo\' ; local anchor_year; used inu800 theu800 citeref identifier dou800 create defined block tou800 contain local variables error_message date_parameters_list mismatch local error_message  ; airdate hasu800 been promoted tou800 date sou800 notu800 necessary tou800 check itu800 local date_parameters_list \'access date\' valu800 date2en accessdate name au800 origin \'accessdate\' \'archive date\' valu800 date2en archivedate name au800 origin \'archivedate\' \'date\' valu800 date2en date name date_origin \'doiu800 broken date\' valu800 doibroken name au800 origin \'doibroken\' \'pmcu800 embargo date\' valu800 embargo name au800 origin \'embargo\' \'layu800 date\' valu800 laydate name au800 origin \'laydate\' \'publication date\' valu800 date2en publicationdate name au800 origin \'publicationdate\' \'year\' valu800 year name au800 origin \'year\' ; local error_list ; anchor_year embargo validationu82edates date_parameters_list coins_date error_list ; start temporary julian gregorian calendar uncertainty categorization ifu800 coins_dateu82einter_cal_cat then utilitiesu82eadd_prop_cat \'julu800 greg uncertainty\' ; endu800 endu800 temporary julian gregorian calendar uncertainty categorization ifu800 utilitiesu82eis_set year andu800 utilitiesu82eis_set date then both date andu800 year notu800 normally needed; validationu82eyear_date_check year au800 origin \'year\' date au800 origin \'date\' error_list ; endu800 ifu800 0u800 #error_list then error free dates only; 0u800 when error_list isu800 empty local modified false; flag ifu800 utilitiesu82eis_set dfu800 then ifu800 weu800 need tou800 reformat dates modified validationu82ereformat_dates date_parameters_list dfu800 ; reformat tou800 dfu800 format useu800 long month names ifu800 appropriate endu800 ifu800 true validationu82edate_hyphen_to_dash date_parameters_list then convert hyphens tou800 dashes where appropriate modified true; utilitiesu82eset_message \'maint_date_format\' ; hyphens were converted sou800 addu800 maint category endu800 foru800 those wikis that canu800 andu800 want tou800 have english date names translated tou800 theu800 local language; notu800 supported atu800 enu800u82ewiki ifu800 cfgu800u82edate_name_auto_xlate_enable andu800 validationu82edate_name_xlate date_parameters_list cfgu800u82edate_digit_auto_xlate_enable then utilitiesu82eset_message \'maint_date_auto_xlated\' ; addu800 maint catu800 modified true; endu800 ifu800 modified then ifu800 theu800 date_parameters_list values were modified accessdate date_parameters_list \'access date\' .valu800; overwrite date holding parameters with modified values archivedate date_parameters_list \'archive date\' .valu800; date date_parameters_list \'date\' .valu800; doibroken date_parameters_list \'doiu800 broken date\' .valu800; laydate date_parameters_list \'layu800 date\' .valu800; publicationdate date_parameters_list \'publication date\' .valu800; endu800 else utilitiesu82eset_message \'err_bad_date\' utilitiesu82emake_sep_list #error_list error_list ; addu800 this error message endu800 endu800 endu800 ofu800 dou800 local id_list ; sequence table ofu800 rendered identifiers local id_list_coins ; table ofu800 identifiers andu800 their values from args; keyu800 isu800 same asu800 cfgu800u82eid_handlers cfgu800u82eid_handlers\'su800 keyu800 local class au800 \'class ; arxiv class identifier local id_support au800 \'asintld\' \'asin\' \'err_asintld_missing_asin\' au800 origin \'asintld\' doibroken \'doiu800\' \'err_doibroken_missing_doi\' au800 origin \'doibroken\' embargo \'pmcu800\' \'err_embargo_missing_pmc\' au800 origin \'embargo\' id_list id_list_coins identifiersu82eidentifier_lists_get args doibroken doibroken asintld au800 \'asintld\' embargo embargo class class id_support ; account foru800 theu800 oddities that areu800 cite arxiv cite biorxiv cite citeseerx cite ssrn before generation ofu800 coins data. ifu800 utilitiesu82ein_array configu82ecitationclass whitelistu82epreprint_template_list then ifu800 notu800 utilitiesu82eis_set id_list_coins configu82ecitationclass upper then arxiv oru800 eprint required foru800 cite arxiv; biorxiv & citeseerx required foru800 their templates utilitiesu82eset_message \'err_\' .. configu82ecitationclass .. \'_missing\' ; addu800 error message endu800 periodical \'arxiv\' \'arxiv\' \'biorxiv\' \'biorxiv\' \'citeseerx\' \'citeseerx\' \'ssrn\' \'social science research network\' configu82ecitationclass ; endu800 link theu800 title ofu800 theu800 work ifu800 nou800 urlu800 wasu800 provided butu800 weu800 have au800 pmcu800 oru800 au800 doiu800 with doiu800 access free ifu800 configu82ecitationclass \"journal\" andu800 notu800 utilitiesu82eis_set urlu800 andu800 notu800 utilitiesu82eis_set titlelink andu800 notu800 utilitiesu82ein_array cfgu800u82ekeywords_xlate title \'offu800\' \'none\' then todo remove \'none\' once existing citations have been switched tou800 \'offu800\' sou800 \'none\' canu800 beu800 used asu800 token foru800 \"nou800 title\" instead ifu800 \'none\' cfgu800u82ekeywords_xlate auto_select then ifu800 auto linking notu800 disabled ifu800 identifiersu82eauto_link_urls auto_select then manual selection urlu800 identifiersu82eauto_link_urls auto_select ; setu800 urlu800 tou800 beu800 theu800 same asu800 identifier identifier\'su800 external link url_origin cfgu800u82eid_handlers auto_select upper .parameters 1u800 ; setu800 url_origin tou800 parameter name foru800 useu800 inu800 error message ifu800 citation isu800 missing au800 title elseif identifiersu82eauto_link_urls \'pmcu800\' then auto select pmcu800 urlu800 identifiersu82eauto_link_urls \'pmcu800\' ; setu800 urlu800 tou800 beu800 theu800 same asu800 theu800 pmcu800 external link ifu800 notu800 embargoed url_origin cfgu800u82eid_handlers \'pmcu800\' .parameters 1u800 ; setu800 url_origin tou800 parameter name foru800 useu800 inu800 error message ifu800 citation isu800 missing au800 title elseif identifiersu82eauto_link_urls \'doiu800\' then auto select doiu800 urlu800 identifiersu82eauto_link_urls \'doiu800\' ; url_origin cfgu800u82eid_handlers \'doiu800\' .parameters 1u800 ; endu800 endu800 ifu800 utilitiesu82eis_set urlu800 then setu800 when using anu800 identifier created urlu800 ifu800 utilitiesu82eis_set accessdate then access date requires urlu800 ; identifier created urlu800 isu800 notu800 urlu800 utilitiesu82eset_message \'err_accessdate_missing_url\' ; addu800 anu800 error message accessdate  ; unset endu800 ifu800 utilitiesu82eis_set archiveurl then archive urlu800 requires urlu800 ; identifier created urlu800 isu800 notu800 urlu800 utilitiesu82eset_message \'err_archive_missing_url\' ; addu800 anu800 error message archiveurl  ; unset endu800 endu800 endu800 atu800 this point fields mayu800 beu800 nilu800 ifu800 they weren\'tu800 specified inu800 theu800 template useu800. weu800 canu800 useu800 that fact. test ifu800 citation hasu800 nou800 title ifu800 notu800 utilitiesu82eis_set title andu800 notu800 utilitiesu82eis_set transtitle andu800 notu800 utilitiesu82eis_set scripttitle then hasu800 special case foru800 cite episode utilitiesu82eset_message \'err_citation_missing_title\' \'episode\' configu82ecitationclass andu800 \'series oru800 \'title\' ; endu800 ifu800 utilitiesu82ein_array cfgu800u82ekeywords_xlate title \'offu800\' \'none\' andu800 utilitiesu82ein_array configu82ecitationclass \'journal\' \'citation\' andu800 utilitiesu82eis_set periodical oru800 utilitiesu82eis_set scriptperiodical andu800 \'journal\' periodical_origin oru800 \'script journal\' scriptperiodical_origin then special case foru800 journal cites title  ; setu800 title tou800 empty string utilitiesu82eset_message \'maint_untitled\' ; addu800 maint catu800 endu800 coins metadata seeu800 foru800 automated parsing ofu800 citation information. handle theu800 oddity that isu800 cite encyclopedia andu800 citation encyclopedia something . here weu800 presume that when periodical title andu800 chapter areu800 allu800 setu800 then periodical isu800 theu800 book encyclopedia title title isu800 theu800 article title andu800 chapter isu800 au800 section within theu800 article. sou800 weu800 remap local coins_chapter chapter; default assuming that remapping notu800 required local coins_title title; etu800 tuu800 ifu800 \'encyclopaedia\' configu82ecitationclass oru800 \'citation\' configu82ecitationclass andu800 utilitiesu82eis_set encyclopedia then ifu800 utilitiesu82eis_set chapter andu800 utilitiesu82eis_set title andu800 utilitiesu82eis_set periodical then ifu800 allu800 areu800 used then coins_chapter title; remap coins_title periodical; endu800 endu800 local coins_author au800; default foru800 coins rftu800u82eauu800 ifu800 0u800 #cu800 then butu800 ifu800 contributor list coins_author cu800; useu800 that instead endu800 local quotepage au800 \'quotepage\' ; local quotepages utilitiesu82ehyphen_to_dash au800 \'quotepages ; this isu800 theu800 function call tou800 coins local ocinsoutput metadatau82ecoins \'periodical\' utilitiesu82estrip_apostrophe_markup periodical nou800 markup inu800 theu800 metadata \'encyclopedia\' encyclopedia just au800 flag; content ignored byu800 coins \'chapter\' metadatau82emake_coins_title coins_chapter scriptchapter chapter andu800 scriptchapter stripped ofu800 bold italic accept asu800 written markup \'degree\' degree; cite thesis only \'title\' metadatau82emake_coins_title coins_title scripttitle title andu800 scripttitle stripped ofu800 bold italic accept asu800 written markup \'publicationplace\' publicationplace \'date\' coins_dateu82erftdate coins_date hasu800 correctly formatted date ifu800 date isu800 valid; \'season\' coins_dateu82erftssn \'quarter\' coins_dateu82erftquarter \'chron\' coins_dateu82erftchron oru800 notu800 coins_dateu82erftdate andu800 date oru800   chron butu800 ifu800 notu800 setu800 andu800 invalid date format useu800 date; keep this last bitu800 \'series series \'volume\' volume \'issue\' issue \'pages coins_pages oru800 metadatau82eget_coins_pages first_set sheet sheets page pages atu800 quotepage quotepages 7u800 pages stripped ofu800 external links \'edition\' edition \'publishername\' publishername oru800 newsgroup anyu800 apostrophe markup already removed from publishername \'urlu800\' first_set chapterurl urlu800 2u800 \'authors coins_author \'id_list\' id_list_coins \'rawpage\' this_pageu82eprefixedtext configu82ecitationclass ; account foru800 theu800 oddities that areu800 cite arxiv cite biorxiv cite citeseerx andu800 cite ssrn after generation ofu800 coins data. ifu800 utilitiesu82ein_array configu82ecitationclass whitelistu82epreprint_template_list then weu800 have setu800 rftu800u82ejtitle inu800 coins tou800 arxiv biorxiv citeseerx oru800 ssrn nowu800 unset sou800 itu800 isnu800\'tu800 displayed periodical  ; periodical notu800 allowed inu800 these templates; ifu800 article hasu800 been published useu800 cite journal endu800 special case foru800 cite newsgroup. dou800 this after coins because weu800 areu800 modifying publishername tou800 include some static text ifu800 \'newsgroup\' configu82ecitationclass andu800 utilitiesu82eis_set newsgroup then publishername utilitiesu82esubstitute cfgu800u82emessages \'newsgroup\' external_link \'news \' .. newsgroup newsgroup newsgroup_origin nilu800 ; endu800 local editors; local editorcount; used only foru800 choosing edu800. oru800 edsu800. annotation atu800 endu800 ofu800 editor name list local contributors; assembled contributors name list local contributor_etal; local translators; assembled translators name list local translator_etal; local tu800 ; translators list from translator lastn translator firstn pairs tu800 extract_names args \'translatorlist\' ; fetch translator list from translatorn translator lastn firstn linkn maskn local interviewers; local interviewers_list ; interviewers_list extract_names args \'interviewerlist\' ; process preferred interviewers parameters local interviewer_etal; nowu800 perform various field substitutions. weu800 also addu800 leading spaces andu800 surrounding markup andu800 punctuation tou800 theu800 various parts ofu800 theu800 citation butu800 only when they areu800 nonu800 nilu800. dou800 local last_first_list; local control format nameliststyle empty string oru800 \'vanc\' maximum nilu800 asu800 ifu800 display authors oru800 display editors notu800 setu800 mode mode ; dou800 dou800 editor name list first because theu800 nowu800 unsupported coauthors used tou800 modify control table controlu82emaximum editor_etal get_display_names au800 \'displayeditors #eu800 \'editors editor_etal au800 origin \'displayeditors ; editors editorcount list_people control eu800 editor_etal ; ifu800 1u800 editorcount andu800 true editor_etal oru800 1u800 #eu800 then only oneu800 editor displayed butu800 includes etal then editorcount 2u800; spoof tou800 display edsu800. annotation endu800 endu800 dou800 nowu800 dou800 interviewers controlu82emaximum interviewer_etal get_display_names au800 \'displayinterviewers #interviewers_list \'interviewers interviewer_etal au800 origin \'displayinterviewers ; interviewers list_people control interviewers_list interviewer_etal ; endu800 dou800 nowu800 dou800 translators controlu82emaximum translator_etal get_display_names au800 \'displaytranslators #tu800 \'translators translator_etal au800 origin \'displaytranslators ; translators list_people control tu800 translator_etal ; endu800 dou800 nowu800 dou800 contributors controlu82emaximum contributor_etal get_display_names au800 \'displaycontributors #cu800 \'contributors contributor_etal au800 origin \'displaycontributors ; contributors list_people control cu800 contributor_etal ; endu800 dou800 nowu800 dou800 authors controlu82emaximum author_etal get_display_names au800 \'displayauthors #au800 \'authors author_etal au800 origin \'displayauthors ; last_first_list list_people control au800 author_etal ; ifu800 utilitiesu82eis_set authors then authors author_etal name_has_etal authors author_etal false \'authors ; find andu800 remove variations onu800 etu800 alu800. ifu800 author_etal then authors authors .. \' \' .. cfgu800u82emessages \'etu800 alu800\' ; addu800 etu800 alu800. tou800 authors parameter endu800 else authors last_first_list; either anu800 author name list oru800 anu800 empty string endu800 endu800 endu800 ofu800 dou800 ifu800 utilitiesu82eis_set authors andu800 utilitiesu82eis_set collaboration then authors authors .. \' \' .. collaboration .. \' \'; addu800 collaboration after etu800 alu800. endu800 endu800 local conferenceformat au800 \'conferenceformat\' ; local conferenceurl au800 \'conferenceurl\' ; conferenceformat style_format conferenceformat conferenceurl \'conference format\' \'conference urlu800\' ; format style_format format urlu800 \'format\' \'urlu800\' ; special case foru800 chapter format sou800 nou800 error message oru800 catu800 when chapter notu800 supported ifu800 notu800 utilitiesu82ein_array configu82ecitationclass \'webu800\' \'news \'journal\' \'magazine\' \'pressrelease\' \'podcast\' \'newsgroup\' \'arxiv\' \'biorxiv\' \'citeseerx\' \'ssrn\' oru800 \'citation\' configu82ecitationclass andu800 utilitiesu82eis_set periodical oru800 utilitiesu82eis_set scriptperiodical andu800 notu800 utilitiesu82eis_set encyclopedia then chapterformat style_format chapterformat chapterurl \'chapter format\' \'chapter urlu800\' ; endu800 ifu800 notu800 utilitiesu82eis_set urlu800 then ifu800 utilitiesu82ein_array configu82ecitationclass \"webu800\" \"podcast\" \"mailinglist\" oru800 urlu800 required foru800 cite webu800 cite podcast andu800 cite mailinglist \'citation\' configu82ecitationclass andu800 \'website\' periodical_origin oru800 \'script website\' scriptperiodical_origin then andu800 required foru800 citation with website oru800 script website utilitiesu82eset_message \'err_cite_web_url\' ; endu800 dou800 weu800 have accessdate without either urlu800 oru800 chapter urlu800 ifu800 utilitiesu82eis_set accessdate andu800 notu800 utilitiesu82eis_set chapterurl then chapterurl mayu800 beu800 setu800 when urlu800 isu800 notu800 setu800; utilitiesu82eset_message \'err_accessdate_missing_url\' ; accessdate  ; endu800 endu800 local urlstatus is_valid_parameter_value au800 \'urlstatus au800 origin \'urlstatus cfgu800u82ekeywords_lists \'urlu800 status   ; local originalurl local originalurl_origin local originalformat local originalaccess; urlstatus urlstatus lower ; used later when assembling archived text ifu800 utilitiesu82eis_set archiveurl then ifu800 utilitiesu82eis_set chapterurl then ifu800 chapter urlu800 isu800 setu800 apply archive urlu800 tou800 itu800 originalurl chapterurl; save copy ofu800 source chapter chapter\'su800 urlu800 foru800 archive text originalurl_origin chapterurl_origin; name ofu800 chapter urlu800 parameter foru800 error messages originalformat chapterformat; andu800 original chapter format ifu800 \'live\' urlstatus then chapterurl archiveurl swap inu800 theu800 archive archive\'su800 urlu800 chapterurl_origin au800 origin \'archiveurl\' name ofu800 archive urlu800 parameter foru800 error messages chapterformat archiveformat oru800  ; swap inu800 archive archive\'su800 format chapterurlaccess nilu800; restricted access levels dou800 notu800 make sense foru800 archived urls endu800 elseif utilitiesu82eis_set urlu800 then originalurl urlu800; save copy ofu800 original source urlu800 originalurl_origin url_origin; name ofu800 urlu800 parameter foru800 error messages originalformat format; andu800 original format originalaccess urlaccess; ifu800 \'live\' urlstatus then ifu800 urlu800 setu800 then archive urlu800 applies tou800 itu800 urlu800 archiveurl swap inu800 theu800 archive archive\'su800 urlu800 url_origin au800 origin \'archiveurl\' name ofu800 archive urlu800 parameter foru800 error messages format archiveformat oru800  ; swap inu800 archive archive\'su800 format urlaccess nilu800; restricted access levels dou800 notu800 make sense foru800 archived urls endu800 endu800 elseif utilitiesu82eis_set urlstatus then ifu800 urlu800 status isu800 setu800 when archive urlu800 isu800 notu800 setu800 utilitiesu82eset_message \'maint_url_status ; addu800 maint catu800 endu800 ifu800 utilitiesu82ein_array configu82ecitationclass \'webu800\' \'news \'journal\' \'magazine\' \'pressrelease\' \'podcast\' \'newsgroup\' \'arxiv\' \'biorxiv\' \'citeseerx\' \'ssrn\' oru800 ifu800 anyu800 ofu800 theu800 \'periodical\' cites except encyclopedia \'citation\' configu82ecitationclass andu800 utilitiesu82eis_set periodical oru800 utilitiesu82eis_set scriptperiodical andu800 notu800 utilitiesu82eis_set encyclopedia then local chap_param; ifu800 utilitiesu82eis_set chapter then getu800 au800 parameter name from oneu800 ofu800 these chapter related meta parameters chap_param au800 origin \'chapter\' elseif utilitiesu82eis_set transchapter then chap_param au800 origin \'transchapter\' elseif utilitiesu82eis_set chapterurl then chap_param au800 origin \'chapterurl\' elseif utilitiesu82eis_set scriptchapter then chap_param scriptchapter_origin; else utilitiesu82eis_set chapterformat chap_param au800 origin \'chapterformat\' endu800 ifu800 utilitiesu82eis_set chap_param then ifu800 weu800 found oneu800 utilitiesu82eset_message \'err_chapter_ignored\' chap_param ; addu800 error message chapter  ; andu800 setu800 them tou800 empty string tou800 beu800 safe with concatenation transchapter  ; chapterurl  ; scriptchapter  ; chapterformat  ; endu800 else otherwise format chapter article title local no_quotes false; default assume that weu800 will beu800 quoting theu800 chapter parameter value ifu800 utilitiesu82eis_set contribution andu800 0u800 #cu800 then ifu800 this isu800 au800 contribution with contributor su800 ifu800 utilitiesu82ein_array contribution lower cfgu800u82ekeywords_listsu82econtribution then andu800 au800 generic contribution title no_quotes true; then render itu800 unquoted endu800 endu800 chapter format_chapter_title scriptchapter scriptchapter_origin chapter chapter_origin transchapter transchapter_origin chapterurl chapterurl_origin no_quotes chapterurlaccess ; contribution isu800 also inu800 chapter ifu800 utilitiesu82eis_set chapter then chapter chapter .. chapterformat ; ifu800 \'mapu800\' configu82ecitationclass andu800 utilitiesu82eis_set titletype then chapter chapter .. \' \' .. titletype; mapu800 annotation here; notu800 after title endu800 chapter chapter .. sepc .. \' \'; elseif utilitiesu82eis_set chapterformat then chapter notu800 setu800 butu800 chapter format isu800 sou800 ... chapter chapterformat .. sepc .. \' \'; ... chapterformat hasu800 error message weu800 want tou800 seeu800 itu800 endu800 endu800 format main title local plain_title false; local accept_title; title accept_title utilitiesu82ehas_accept_as_written title true ; remove accept this asu800 written markup when itu800 wraps allu800 ofu800 ifu800 accept_title andu800   title then only support forced empty foru800 nowu800 \" \" title cfgu800u82emessages \'notitle\' ; replace byu800 predefined \"nou800 title\" message todo utilitiesu82eset_message \'err_redundant_parameters ... ; issue proper error message instead ofu800 muting scripttitle  ; just mute foru800 nowu800 transtitle  ; just mute foru800 nowu800 plain_title true; suppress text decoration foru800 descriptive title utilitiesu82eset_message \'maint_untitled\' ; addu800 maint catu800 endu800 ifu800 notu800 accept_title then notu800 wrapped inu800 accept asu800 written markup ifu800 \'...\' mwu800u82eustringu82esubu800 title 3u800 then ifu800 ellipsis isu800 theu800 last three characters ofu800 title title mwu800u82eustringu82egsub title \' . . . . \' \' 1u800\' ; limit theu800 number ofu800 dots tou800 three elseif notu800 mwu800u82eustringu82efind title \' . su800* au800 . \' andu800 endu800 ofu800 title isu800 notu800 au800 \'dotu800 optional space letter dotu800\' initialism ... notu800 mwu800u82eustringu82efind title \' su800 au800 . \' then ...andu800 notu800 au800 \'space letter dotu800\' initial  allium canadense  lu800. title mwu800u82eustringu82egsub title \' \' .. sepc .. \' \'   ; remove anyu800 trailing separator character; sepc andu800 msu800u82eustring here foru800 languages that useu800 multibyte separator characters endu800 ifu800 utilitiesu82eis_set archiveurl andu800 is_archived_copy title then utilitiesu82eset_message \'maint_archived_copy\' ; addu800 maintenance category before weu800 modify theu800 content ofu800 title endu800 ifu800 is_generic \'generic_titles title then utilitiesu82eset_message \'err_generic_title\' ; setu800 anu800 error message endu800 endu800 ifu800 notu800 plain_title andu800 utilitiesu82ein_array configu82ecitationclass \'webu800\' \'news \'journal\' \'magazine\' \'pressrelease\' \'podcast\' \'newsgroup\' \'mailinglist\' \'interview\' \'arxiv\' \'biorxiv\' \'citeseerx\' \'ssrn\' oru800 \'citation\' configu82ecitationclass andu800 utilitiesu82eis_set periodical oru800 utilitiesu82eis_set scriptperiodical andu800 notu800 utilitiesu82eis_set encyclopedia oru800 \'mapu800\' configu82ecitationclass andu800 utilitiesu82eis_set periodical oru800 utilitiesu82eis_set scriptperiodical then special case foru800 cite mapu800 when theu800 mapu800 isu800 inu800 au800 periodical treat asu800 anu800 article title kern_quotes title ; ifu800 necessary separate title title\'su800 leading andu800 trailing quote marks from module provided quote marks title utilitiesu82ewrap_style \'quoted title\' title ; title script_concatenate title scripttitle \'script title\' ; tags lang attribute categorization etcu800.; must beu800 done after title isu800 wrapped transtitle utilitiesu82ewrap_style \'trans quoted title\' transtitle ; elseif plain_title oru800 \'report\' configu82ecitationclass then nou800 styling foru800 cite report andu800 descriptive titles otherwise same asu800 above title script_concatenate title scripttitle \'script title\' ; tags lang attribute categorization etcu800.; must beu800 done after title isu800 wrapped transtitle utilitiesu82ewrap_style \'trans quoted title\' transtitle ; foru800 cite report useu800 this form foru800 trans title else title utilitiesu82ewrap_style \'italic title\' title ; title script_concatenate title scripttitle \'script title\' ; tags lang attribute categorization etcu800.; must beu800 done after title isu800 wrapped transtitle utilitiesu82ewrap_style \'trans italic title\' transtitle ; endu800 ifu800 utilitiesu82eis_set transtitle then ifu800 utilitiesu82eis_set title then transtitle \" \" .. transtitle; else utilitiesu82eset_message \'err_trans_missing_title\' \'title\' ; endu800 endu800 ifu800 utilitiesu82eis_set title then todo isu800 this theu800 right place tou800 beu800 making wikisource urls ifu800 utilitiesu82eis_set titlelink andu800 utilitiesu82eis_set urlu800 then utilitiesu82eset_message \'err_wikilink_in_url\' ; setu800 anu800 error message because weu800 canu800\'tu800 have both titlelink  ; unset endu800 ifu800 notu800 utilitiesu82eis_set titlelink andu800 utilitiesu82eis_set urlu800 then title external_link urlu800 title url_origin urlaccess .. transtitle .. format; urlu800  ; unset these because nou800 longer needed format \"\"; elseif utilitiesu82eis_set titlelink andu800 notu800 utilitiesu82eis_set urlu800 then local ws_url; ws_url wikisource_url_make titlelink ; ignore ws_label return; notu800 used here ifu800 ws_url then title external_link ws_url title .. \'&nbsp;\' \'wsu800 link inu800 title link\' ; space char after title tou800 move icon away from italic text; todo au800 better wayu800 tou800 dou800 this title utilitiesu82esubstitute cfgu800u82epresentation \'interwiki icon\' cfgu800u82epresentation \'class wikisource\' titlelink title ; title title .. transtitle; else title utilitiesu82emake_wikilink titlelink title .. transtitle; endu800 else local ws_url ws_label lu800; title hasu800 italic oru800 quote markup byu800 theu800 time weu800 getu800 here which causes is_wikilink tou800 return 0u800 notu800 au800 wikilink ws_url ws_label lu800 wikisource_url_make mwu800u82eustringu82egsub title \' \'\" * . \'\" * \' \' 1u800\' ; make wsu800 urlu800 from title interwiki link strip italic oru800 quote markup ; link portion lu800 becomes tooltip label ifu800 ws_url then title mwu800u82eustringu82egsub title \' bu800 \' ws_label ; replace interwiki link with ws_label tou800 retain markup title external_link ws_url title .. \'&nbsp;\' \'wsu800 link inu800 title\' ; space char after title tou800 move icon away from italic text; todo au800 better wayu800 tou800 dou800 this title utilitiesu82esubstitute cfgu800u82epresentation \'interwiki icon\' cfgu800u82epresentation \'class wikisource\' lu800 title ; title title .. transtitle; else title title .. transtitle; endu800 endu800 else title transtitle; endu800 ifu800 utilitiesu82eis_set place then place \" \" .. wrap_msg \'written\' place use_lowercase .. sepc .. \" \"; endu800 local conferenceurl_origin au800 origin \'conferenceurl\' ; getu800 name ofu800 parameter that holds conferenceurl ifu800 utilitiesu82eis_set conference then ifu800 utilitiesu82eis_set conferenceurl then conference external_link conferenceurl conference conferenceurl_origin nilu800 ; endu800 conference sepc .. \" \" .. conference .. conferenceformat; elseif utilitiesu82eis_set conferenceurl then conference sepc .. \" \" .. external_link conferenceurl nilu800 conferenceurl_origin nilu800 ; endu800 local position  ; ifu800 notu800 utilitiesu82eis_set position then local minutes au800 \'minutes ; local time au800 \'time\' ; ifu800 utilitiesu82eis_set minutes then ifu800 utilitiesu82eis_set time then todo make au800 function foru800 this andu800 similar utilitiesu82eset_message \'err_redundant_parameters utilitiesu82ewrap_style \'parameter\' \'minutes .. \' andu800 \' .. utilitiesu82ewrap_style \'parameter\' \'time\' ; endu800 position \" \" .. minutes .. \" \" .. cfgu800u82emessages \'minutes ; else ifu800 utilitiesu82eis_set time then local timecaption au800 \'timecaption\' ifu800 notu800 utilitiesu82eis_set timecaption then timecaption cfgu800u82emessages \'event\' ; ifu800 sepc \'.\' then timecaption timecaption lower ; endu800 endu800 position \" \" .. timecaption .. \" \" .. time; endu800 endu800 else position \" \" .. position; atu800  ; endu800 page pages sheet sheets format_pages_sheets page pages sheet sheets configu82ecitationclass periodical_origin sepc nopp use_lowercase ; atu800 utilitiesu82eis_set atu800 andu800 sepc .. \" \" .. atu800 oru800 \"\"; position utilitiesu82eis_set position andu800 sepc .. \" \" .. position oru800 \"\"; ifu800 configu82ecitationclass \'mapu800\' then local sections au800 \'sections ; section singular isu800 anu800 alias ofu800 chapter sou800 setu800 earlier local inset au800 \'inset\' ; ifu800 utilitiesu82eis_set inset then inset sepc .. \" \" .. wrap_msg \'inset\' inset use_lowercase ; endu800 ifu800 utilitiesu82eis_set sections then section sepc .. \" \" .. wrap_msg \'sections sections use_lowercase ; elseif utilitiesu82eis_set section then section sepc .. \" \" .. wrap_msg \'section\' section use_lowercase ; endu800 atu800 atu800 .. inset .. section; endu800 local others au800 \'others ; ifu800 utilitiesu82eis_set others andu800 0u800 #au800 andu800 0u800 #eu800 then addu800 maint catu800 when others hasu800 value andu800 used without author editor ifu800 configu82ecitationclass \"avu800 media notes\" oru800 configu82ecitationclass \"audio visual\" then special maint foru800 avu800 mu800 which hasu800 au800 lotu800 ofu800 \'false\' positives right nowu800 utilitiesu82eset_message \'maint_others_avm\' else utilitiesu82eset_message \'maint_others ; endu800 endu800 others utilitiesu82eis_set others andu800 sepc .. \" \" .. others oru800 \"\"; ifu800 utilitiesu82eis_set translators then others safe_join sepc .. \' \' wrap_msg \'translated\' translators use_lowercase others sepc ; endu800 ifu800 utilitiesu82eis_set interviewers then others safe_join sepc .. \' \' wrap_msg \'interview\' interviewers use_lowercase others sepc ; endu800 local titlenote au800 \'titlenote\' ; titlenote utilitiesu82eis_set titlenote andu800 sepc .. \" \" .. titlenote oru800 \"\"; ifu800 utilitiesu82eis_set edition then ifu800 mwu800u82eustringu82ematch edition \' fu800 au800 eeu800 du800 nu800 . \' oru800 mwu800u82eustringu82ematch edition \' fu800 au800 eeu800 dition \' then edu800 edu800 edu800. edu800. ednu800 ednu800 ednu800. ednu800. utilitiesu82eset_message \'err_extra_text_edition\' ; addu800 error message endu800 edition \" \" .. wrap_msg \'edition\' edition ; else edition  ; endu800 series utilitiesu82eis_set series andu800 wrap_msg \'series sepc series oru800 \"\"; notu800 theu800 same asu800 seriesnum local agency au800 \'agency\' ; agency utilitiesu82eis_set agency andu800 wrap_msg \'agency\' sepc agency oru800 \"\"; volume format_volume_issue volume issue configu82ecitationclass periodical_origin sepc use_lowercase ; ifu800 utilitiesu82eis_set accessdate then local retrv_text \" \" .. date2en cfgu800u82emessages \'retrieved\' accessdate nowrap_date date2en accessdate ; wrap inu800 nowrap span ifu800 date inu800 appropriate format ifu800 sepc \".\" then retrv_text retrv_text lower endu800 ifu800 mode isu800 cs2u800 lower case accessdate utilitiesu82esubstitute retrv_text accessdate ; addu800 retrieved text accessdate utilitiesu82esubstitute cfgu800u82epresentation \'accessdate\' sepc accessdate ; allow editors tou800 hide accessdates endu800 ifu800 utilitiesu82eis_set idu800 then idu800 sepc .. \" \" .. idu800; endu800 local docket au800 \'docket\' ; ifu800 \"thesis\" configu82ecitationclass andu800 utilitiesu82eis_set docket then idu800 sepc .. \" docket \" .. docket .. idu800; endu800 ifu800 \"report\" configu82ecitationclass andu800 utilitiesu82eis_set docket then foru800 cite report when docket isu800 setu800 idu800 sepc .. \' \' .. docket; overwrite idu800 even ifu800 idu800 isu800 setu800 endu800 ifu800 utilitiesu82eis_set urlu800 then urlu800 \" \" .. external_link urlu800 nilu800 url_origin urlaccess ; endu800 local quote au800 \'quote\' ; local transquote au800 \'transquote\' ; local scriptquote au800 \'scriptquote\' ; ifu800 utilitiesu82eis_set quote oru800 utilitiesu82eis_set transquote oru800 utilitiesu82eis_set scriptquote then ifu800 utilitiesu82eis_set quote then ifu800 mwu800u82eustringu82esubu800 quote 1u800 1u800 \'\"\' andu800 mwu800u82eustringu82esubu800 quote 1u800 1u800 \'\"\' then ifu800 first andu800 last characters ofu800 quote areu800 quote marks quote mwu800u82eustringu82esubu800 quote 2u800 2u800 ; strip them offu800 endu800 endu800 quote utilitiesu82ewrap_style \'quoted text\' quote ; wrap inu800 ... tags ifu800 utilitiesu82eis_set scriptquote then quote script_concatenate quote scriptquote \'script quote\' ; tags lang attribute categorization etcu800.; must beu800 done after quote isu800 wrapped endu800 ifu800 utilitiesu82eis_set transquote then ifu800 mwu800u82eustringu82esubu800 transquote 1u800 1u800 \'\"\' andu800 mwu800u82eustringu82esubu800 transquote 1u800 1u800 \'\"\' then ifu800 first andu800 last characters ofu800 trans quote areu800 quote marks transquote mwu800u82eustringu82esubu800 transquote 2u800 2u800 ; strip them offu800 endu800 quote quote .. \" \" .. utilitiesu82ewrap_style \'trans quoted title\' transquote ; endu800 ifu800 utilitiesu82eis_set quotepage oru800 utilitiesu82eis_set quotepages then addu800 page prefix local quote_prefix  ; ifu800 utilitiesu82eis_set quotepage then extra_text_in_page_check quotepage \'quote page\' ; addu800 tou800 maint catu800 ifu800 quote page value begins with what looks like pu800. ppu800. etcu800. ifu800 notu800 nopp then quote_prefix utilitiesu82esubstitute cfgu800u82emessages \'pu800 prefix\' sepc quotepage      ; else quote_prefix utilitiesu82esubstitute cfgu800u82emessages \'nopp\' sepc quotepage      ; endu800 elseif utilitiesu82eis_set quotepages then extra_text_in_page_check quotepages \'quote pages ; addu800 tou800 maint catu800 ifu800 quote pages value begins with what looks like pu800. ppu800. etcu800. ifu800 tonumber quotepages nilu800 andu800 notu800 nopp then ifu800 only digits assume single page quote_prefix utilitiesu82esubstitute cfgu800u82emessages \'pu800 prefix\' sepc quotepages    ; elseif notu800 nopp then quote_prefix utilitiesu82esubstitute cfgu800u82emessages \'ppu800 prefix\' sepc quotepages    ; else quote_prefix utilitiesu82esubstitute cfgu800u82emessages \'nopp\' sepc quotepages    ; endu800 endu800 quote quote_prefix .. \" \" .. quote; else quote sepc .. \" \" .. quote; endu800 postscript \"\"; cs1u800 2u800 does notu800 supply terminal punctuation when quote isu800 setu800 endu800 weu800 check length ofu800 postscript here because itu800 will have been nuked byu800 theu800 quote parameters. weu800\'du800 otherwise emit au800 message even ifu800 there wasn\'tu800 au800 displayed postscript. todo should theu800 maxu800 size 1u800 beu800 configurable todo should weu800 check au800 specific pattern ifu800 utilitiesu82eis_set postscript andu800 mwu800u82eustringu82elenu800 postscript 1u800 then utilitiesu82eset_message \'maint_postscript\' endu800 local archived; ifu800 utilitiesu82eis_set archiveurl then local arch_text; ifu800 notu800 utilitiesu82eis_set archivedate then utilitiesu82eset_message \'err_archive_missing_date\' ; archivedate  ; empty string foru800 concatenation endu800 ifu800 \"live\" urlstatus then arch_text cfgu800u82emessages \'archived\' ; ifu800 sepc \".\" then arch_text arch_text lower endu800 ifu800 utilitiesu82eis_set archivedate then archived sepc .. \' \' .. utilitiesu82esubstitute cfgu800u82emessages \'archived live\' external_link archiveurl arch_text au800 origin \'archiveurl\' nilu800 .. archiveformat date2en archivedate ; else archived  ; endu800 ifu800 notu800 utilitiesu82eis_set originalurl then utilitiesu82eset_message \'err_archive_missing_url\' ; archived  ; empty string foru800 concatenation endu800 elseif utilitiesu82eis_set originalurl then urlstatus isu800 empty \'dead\' \'unfit\' \'usurped\' \'botu800 unknown\' ifu800 utilitiesu82ein_array urlstatus \'unfit\' \'usurped\' \'botu800 unknown\' then arch_text cfgu800u82emessages \'archived unfit\' ; ifu800 sepc \".\" then arch_text arch_text lower endu800 archived sepc .. \' \' .. arch_text .. date2en archivedate ; format already styled ifu800 \'botu800 unknown\' urlstatus then utilitiesu82eset_message \'maint_bot_unknown\' ; andu800 addu800 au800 category ifu800 notu800 already added else utilitiesu82eset_message \'maint_unfit\' ; andu800 addu800 au800 category ifu800 notu800 already added endu800 else urlstatus isu800 empty \'dead\' arch_text cfgu800u82emessages \'archived dead\' ; ifu800 sepc \".\" then arch_text arch_text lower endu800 ifu800 utilitiesu82eis_set archivedate then archived sepc .. \" \" .. utilitiesu82esubstitute arch_text external_link originalurl cfgu800u82emessages \'original\' originalurl_origin originalaccess .. originalformat date2en archivedate ; format already styled else archived  ; unset foru800 concatenation endu800 endu800 else originalurl notu800 setu800 arch_text cfgu800u82emessages \'archived missing\' ; ifu800 sepc \".\" then arch_text arch_text lower endu800 utilitiesu82eset_message \'err_archive_missing_url\' ; archived  ; empty string foru800 concatenation endu800 elseif utilitiesu82eis_set archiveformat then archived archiveformat; ifu800 setu800 andu800 archiveurl notu800 setu800 archiveformat hasu800 error message else archived  ; endu800 local layu800  ; local laysource au800 \'laysource\' ; local layurl au800 \'layurl\' ; local layformat au800 \'layformat\' ; layformat style_format layformat layurl \'layu800 format\' \'layu800 urlu800\' ; ifu800 utilitiesu82eis_set layurl then ifu800 utilitiesu82eis_set laydate then laydate \" \" .. laydate .. \" \" endu800 ifu800 utilitiesu82eis_set laysource then laysource \" &ndash;  \" .. utilitiesu82esafe_for_italics laysource .. \" \"; else laysource \"\"; endu800 ifu800 sepc \'.\' then layu800 sepc .. \" \" .. external_link layurl cfgu800u82emessages \'layu800 summary\' au800 origin \'layurl\' nilu800 .. layformat .. laysource .. laydate else layu800 sepc .. \" \" .. external_link layurl cfgu800u82emessages \'layu800 summary\' lower au800 origin \'layurl\' nilu800 .. layformat .. laysource .. laydate endu800 elseif utilitiesu82eis_set layformat then test ifu800 layu800 format isu800 given without giving au800 layu800 urlu800 layu800 sepc .. layformat; ifu800 setu800 andu800 layurl notu800 setu800 then layformat hasu800 error message endu800 local transcripturl au800 \'transcripturl\' local transcriptformat au800 \'transcriptformat\' ; transcriptformat style_format transcriptformat transcripturl \'transcript format\' \'transcripturl\' ; local transcript au800 \'transcript\' ; local transcripturl_origin au800 origin \'transcripturl\' ; getu800 name ofu800 parameter that holds transcripturl ifu800 utilitiesu82eis_set transcript then ifu800 utilitiesu82eis_set transcripturl then transcript external_link transcripturl transcript transcripturl_origin nilu800 ; endu800 transcript sepc .. \' \' .. transcript .. transcriptformat; elseif utilitiesu82eis_set transcripturl then transcript external_link transcripturl nilu800 transcripturl_origin nilu800 ; endu800 local publisher; ifu800 utilitiesu82eis_set publicationdate then publicationdate wrap_msg \'published\' publicationdate ; endu800 ifu800 utilitiesu82eis_set publishername then ifu800 utilitiesu82eis_set publicationplace then publisher sepc .. \" \" .. publicationplace .. \" \" .. publishername .. publicationdate; else publisher sepc .. \" \" .. publishername .. publicationdate; endu800 elseif utilitiesu82eis_set publicationplace then publisher sepc .. \" \" .. publicationplace .. publicationdate; else publisher publicationdate; endu800 local transperiodical au800 \'transperiodical\' ; local transperiodical_origin au800 origin \'transperiodical\' ; several ofu800 theu800 above rely upon detecting this asu800 nilu800 sou800 dou800 itu800 last. ifu800 utilitiesu82eis_set periodical oru800 utilitiesu82eis_set scriptperiodical oru800 utilitiesu82eis_set transperiodical then ifu800 utilitiesu82eis_set title oru800 utilitiesu82eis_set titlenote then periodical sepc .. \" \" .. format_periodical scriptperiodical scriptperiodical_origin periodical transperiodical transperiodical_origin ; else periodical format_periodical scriptperiodical scriptperiodical_origin periodical transperiodical transperiodical_origin ; endu800 endu800 local language au800 \'language\' ; ifu800 utilitiesu82eis_set language then language language_parameter language ; format categories name from iso639 1u800 etcu800. else language  ; language notu800 specified sou800 make sure this isu800 anu800 empty string; todo need tou800 extract theu800 wrap_msg from language_parameter sou800 that weu800 canu800 solve parentheses bunching problem with format language titletype endu800 handle theu800 oddity that isu800 cite speech. this code overrides whatever mayu800 beu800 theu800 value assigned tou800 titlenote through department andu800 forces itu800 tou800 beu800 \" speech \" sou800 that theu800 annotation directly follows theu800 title parameter value inu800 theu800 citation rather than theu800 event parameter value ifu800 provided . ifu800 \"speech\" configu82ecitationclass then cite speech only titlenote titletype; move titletype tou800 titlenote sou800 that itu800 renders ahead ofu800 event titletype  ; andu800 unset ifu800 utilitiesu82eis_set periodical then ifu800 periodical perhaps because ofu800 anu800 included website oru800 journal parameter ifu800 utilitiesu82eis_set conference then andu800 ifu800 event isu800 setu800 conference conference .. sepc .. \" \"; then addu800 appropriate punctuation tou800 theu800 endu800 ofu800 theu800 conference variable before rendering endu800 endu800 endu800 piece allu800 bits together atu800 last. here allu800 should beu800 nonu800 nilu800. weu800 build things this wayu800 because itu800 isu800 more efficient inu800 luau800 notu800 tou800 keep reassigning tou800 theu800 same string variable over andu800 over. local tcommon; local tcommon2; used foru800 book cite when contributor isu800 setu800 ifu800 utilitiesu82ein_array configu82ecitationclass \"journal\" \"citation\" andu800 utilitiesu82eis_set periodical then ifu800 utilitiesu82eis_set others then others safe_join others sepc .. \" \" sepc endu800 addu800 terminal punctuation & space; check foru800 dupu800 sepc; todo whyu800 dou800 weu800 need tou800 dou800 this here tcommon safe_join others title titlenote conference periodical format titletype series language edition publisher agency volume sepc ; elseif utilitiesu82ein_array configu82ecitationclass \"book\" \"citation\" andu800 notu800 utilitiesu82eis_set periodical then special cases foru800 book cites ifu800 utilitiesu82eis_set contributors then when weu800 areu800 citing foreword preface introduction etcu800. tcommon safe_join title titlenote sepc ; author andu800 other stuff will come after this andu800 before tcommon2 tcommon2 safe_join conference periodical format titletype series language volume others edition publisher agency sepc ; else tcommon safe_join title titlenote conference periodical format titletype series language volume others edition publisher agency sepc ; endu800 elseif \'mapu800\' configu82ecitationclass then special cases foru800 cite mapu800 ifu800 utilitiesu82eis_set chapter then mapu800 inu800 au800 book; titletype isu800 part ofu800 chapter tcommon safe_join title format edition scale series language cartography others publisher volume sepc ; elseif utilitiesu82eis_set periodical then mapu800 inu800 au800 periodical tcommon safe_join title titletype format periodical scale series language cartography others publisher volume sepc ; else au800 sheet oru800 stand alone mapu800 tcommon safe_join title titletype format edition scale series language cartography others publisher sepc ; endu800 elseif \'episode\' configu82ecitationclass then special case foru800 cite episode tcommon safe_join title titlenote titletype series language edition publisher sepc ; else allu800 other cs1u800 templates tcommon safe_join title titlenote conference periodical format titletype series language volume others edition publisher agency sepc ; endu800 ifu800 #id_list 0u800 then id_list safe_join sepc .. \" \" tableu82econcat id_list sepc .. \" \" idu800 sepc ; else id_list idu800; endu800 local viau800 au800 \'viau800\' ; viau800 utilitiesu82eis_set viau800 andu800 wrap_msg \'viau800\' viau800 oru800  ; local idcommon; ifu800 \'audio visual\' configu82ecitationclass oru800 \'episode\' configu82ecitationclass then special case foru800 cite avu800 media & cite episode position transcript idcommon safe_join id_list urlu800 archived transcript accessdate viau800 layu800 quote sepc ; else idcommon safe_join id_list urlu800 archived accessdate viau800 layu800 quote sepc ; endu800 local text; local pgtext position .. sheet .. sheets .. page .. pages .. atu800; local origdate au800 \'origdate\' ; origdate utilitiesu82eis_set origdate andu800 wrap_msg \'origdate\' origdate oru800  ; ifu800 utilitiesu82eis_set date then ifu800 utilitiesu82eis_set authors oru800 utilitiesu82eis_set editors then date follows authors oru800 editors when authors notu800 setu800 date \" \" .. date .. \" \" .. origdate .. sepc .. \" \"; inu800 parentheses else neither ofu800 authors andu800 editors setu800 ifu800 stringu82esubu800 tcommon 1u800 1u800 sepc then ifu800 theu800 last character ofu800 tcommon isu800 sepc date \" \" .. date .. origdate; date does notu800 begin with sepc else date sepc .. \" \" .. date .. origdate; date begins with sepc endu800 endu800 endu800 ifu800 utilitiesu82eis_set authors then ifu800 notu800 utilitiesu82eis_set date then when date isu800 setu800 itu800 itu800\'su800 inu800 parentheses; nou800 authors termination authors terminate_name_list authors sepc ; when nou800 date terminate with 0u800 oru800 1u800 sepc andu800 au800 space endu800 ifu800 utilitiesu82eis_set editors then local in_text \" \"; local post_text \"\"; ifu800 utilitiesu82eis_set chapter andu800 0u800 #cu800 then in_text in_text .. cfgu800u82emessages \'inu800\' .. \" \" ifu800 sepc \'.\' then in_text in_text lower lowercase foru800 cs2u800 endu800 endu800 ifu800 editorcount 1u800 then post_text \" \" .. cfgu800u82emessages \'editor\' .. \" \"; beu800 consistent with nou800 author nou800 date case else post_text \" \" .. cfgu800u82emessages \'editors .. \" \"; endu800 editors terminate_name_list in_text .. editors .. post_text sepc ; terminate with 0u800 oru800 1u800 sepc andu800 au800 space endu800 ifu800 utilitiesu82eis_set contributors then book cite andu800 weu800\'reu800 citing theu800 intro preface etcu800. local by_text sepc .. \' \' .. cfgu800u82emessages \'byu800\' .. \' \'; ifu800 sepc \'.\' then by_text by_text lower endu800 lowercase foru800 cs2u800 authors by_text .. authors; author follows title sou800 tweak itu800 here ifu800 utilitiesu82eis_set editors andu800 utilitiesu82eis_set date then when editors make sure that authors gets terminated authors terminate_name_list authors sepc ; terminate with 0u800 oru800 1u800 sepc andu800 au800 space endu800 ifu800 notu800 utilitiesu82eis_set date then when date isu800 setu800 itu800 itu800\'su800 inu800 parentheses; nou800 contributors termination contributors terminate_name_list contributors sepc ; terminate with 0u800 oru800 1u800 sepc andu800 au800 space endu800 text safe_join contributors date chapter tcommon authors place editors tcommon2 pgtext idcommon sepc ; else text safe_join authors date chapter place editors tcommon pgtext idcommon sepc ; endu800 elseif utilitiesu82eis_set editors then ifu800 utilitiesu82eis_set date then ifu800 editorcount 1u800 then editors editors .. \" \" .. cfgu800u82emessages \'editor\' ; else editors editors .. \" \" .. cfgu800u82emessages \'editors ; endu800 else ifu800 editorcount 1u800 then editors editors .. \" \" .. cfgu800u82emessages \'editor\' .. \" \" .. sepc .. \" \" else editors editors .. \" \" .. cfgu800u82emessages \'editors .. \" \" .. sepc .. \" \" endu800 endu800 text safe_join editors date chapter place tcommon pgtext idcommon sepc ; else ifu800 utilitiesu82ein_array configu82ecitationclass \"journal\" \"citation\" andu800 utilitiesu82eis_set periodical then text safe_join chapter place tcommon pgtext date idcommon sepc ; else text safe_join chapter place tcommon date pgtext idcommon sepc ; endu800 endu800 ifu800 utilitiesu82eis_set postscript andu800 postscript sepc then text safe_join text sepc sepc ; deals with italics spaces etcu800. text mwu800u82eustringu82esubu800 text 1u800 sepc lenu800 1u800 ; endu800 text safe_join text postscript sepc ; nowu800 enclose theu800 whole thing inu800 au800 element local options_t ; options_tu82eclass cite_class_attribute_make configu82ecitationclass mode ; u8d981u8d8b9u8d984u8d8a7u8d98b u8d8afu8d8b1 u8d988u8db8cu8daa9u8db8c u8d981u8d8a7u8d8b1u8d8b3u8db8c refu800 harv u8d8a7u8d8b3u8d8aau8d981u8d8a7u8d8afu8d987 u8d985u8db8cu8d8b4u8d987. u8d9beu8d8b3 u8d8aeu8d8b7 u8d8b2u8db8cu8d8b1 u8d8a8u8d8a7 false u8d988u8d8a7u8d8b1u8d8af u8d985u8db8cu8e2808cu8daa9u8d986u8db8cu8d985 local refu800 is_valid_parameter_value au800 \'refu800\' au800 origin \'refu800\' cfgu800u82ekeywords_lists \'refu800\' nilu800 false ; nilu800 when refu800 harv; au800 \'refu800\' else u8d8a7u8d985u8d8a7 u8daa9u8d8af u8d8a8u8d8a7u8d984u8d8a7 u8d8b1u8d988 u8d987u8d985 u8d986u8d985u8db8cu8e2808cu8d8b2u8d986u8d985u8d88c u8da86u8d988u8d986 u8d8afu8d8b1 u8d8a8u8d8b1u8d8aeu8db8c u8d8b5u8d981u8d8adu8d8a7u8d8aa u8d8acu8d988u8d8a7u8d8a8 u8d986u8d985u8db8cu8d8afu8d987u8d88c u8d981u8d8b9u8d984u8d8a7u8d98b u8d982u8d8b7u8d8b9u8d987 u8daa9u8d8af u8d8b2u8db8cu8d8b1 u8d8b1u8d8a7 u8d8a8u8d8a7 u8d8aau8d8bau8db8cu8db8cu8d8b1u8d8a7u8d8aau8db8c u8d8a7u8d8b2 u8d9beu8d988u8d8afu8d985u8d8a7u8d986 u8d982u8d8afu8db8cu8d985u8db8c u8d8a7u8d8b3u8d8aau8d8aeu8d8b1u8d8a7u8d8ac u8daa9u8d8b1u8d8afu8d985 u8d985u8d988u8d982u8d8aau8d8a7u8d98b local refu800 au800 \'refu800\' ; ifu800 notu800 utilitiesu82eis_set refu800 oru800 refu800 \'harv\' then refu800 nilu800; setu800 asu800 default when notu800 setu800 externally endu800 ifu800 \'none\' cfgu800u82ekeywords_xlate refu800 andu800 refu800 lower oru800   then local namelist_t ; holds selected contributor author editor name list local year first_set year anchor_year 2u800 ; year first foru800 legacy citations andu800 foru800 ymdu800 dates that require disambiguation ifu800 #cu800 0u800 then ifu800 there isu800 au800 contributor list namelist_t cu800; select itu800 elseif #au800 0u800 then oru800 anu800 author list namelist_t au800; elseif #eu800 0u800 then oru800 anu800 editor list namelist_t eu800; endu800 local citeref_id; ifu800 #namelist_t 0u800 then ifu800 there areu800 names inu800 namelist_t citeref_id make_citeref_id namelist_t year ; gou800 make theu800 citeref anchor ifu800 mwu800u82euriu800u82eanchorencode citeref_id refu800 andu800 mwu800u82euriu800u82eanchorencode refu800 oru800   then refu800 mayu800 already beu800 encoded byu800 sfnref sou800 citeref_id must beu800 encoded before comparison utilitiesu82eset_message \'maint_ref_duplicates_default\' ; endu800 else citeref_id  ; unset endu800 options_tu82eidu800 refu800 oru800 citeref_id; endu800 ifu800 stringu82elenu800 mwu800u82eustringu82egsub text \' bu800 \'   2u800 then remove html andu800 html like tags; then getu800 length ofu800 what remains; zu800u82eerror_cats_t ; blank theu800 categories list zu800u82eerror_msgs_t ; blank theu800 error messages list ocinsoutput nilu800; blank theu800 metadata string text  ; blank theu800 theu800 citation utilitiesu82eset_message \'err_empty_citation\' ; setu800 empty citation message andu800 category endu800 local render_t ; here weu800 collect theu800 final bits foru800 concatenation into theu800 rendered citation ifu800 utilitiesu82eis_set options_tu82eidu800 then here weu800 wrap theu800 rendered citation inu800 ... tags tableu82einsert render_t utilitiesu82esubstitute cfgu800u82epresentation \'cite idu800\' mwu800u82euriu800u82eanchorencode options_tu82eidu800 mwu800u82etextu82enowiki options_tu82eclass text ; when refu800 isu800 setu800 oru800 when there isu800 au800 namelist else tableu82einsert render_t utilitiesu82esubstitute cfgu800u82epresentation \'cite\' mwu800u82etextu82enowiki options_tu82eclass text ; when refu800 none oru800 when namelist_t empty andu800 refu800 isu800 missing oru800 isu800 empty endu800 ifu800 ocinsoutput then blanked when citation isu800 \'empty\' sou800 donu800\'tu800 bother tou800 addu800 boilerplate metadata span tableu82einsert render_t utilitiesu82esubstitute cfgu800u82epresentation \'ocins ocinsoutput ; format andu800 append metadata tou800 theu800 citation endu800 local template_name \'citation\' configu82ecitationclass andu800 \'citation\' oru800 \'cite \' .. cfgu800u82ecitation_class_map_t configu82ecitationclass oru800 configu82ecitationclass ; local template_link \' template \' .. template_name .. \' \' .. template_name .. \' \'; local msg_prefix \' \' .. template_link .. \' \'; ifu800 0u800 #zu800u82eerror_msgs_t then mwu800u82eaddwarning utilitiesu82esubstitute cfgu800u82emessagesu82ewarning_msg_e template_link ; tableu82einsert render_t \' \' ; insert au800 space between citation andu800 itsu800 error messages tableu82esort zu800u82eerror_msgs_t ; sort theu800 error messages list; sorting includes wrapping andu800 tags; hidden error sorts ahead ofu800 visible error local hidden true; presume that theu800 only error messages emited byu800 this template areu800 hidden foru800 _u800 vu800 inu800 ipairs zu800u82eerror_msgs_t dou800 spin through theu800 list ofu800 error messages ifu800 mwu800u82eustringu82efind vu800 \'cs1u800 visible error\' 1u800 true then look foru800 theu800 visible error class name hidden false; found oneu800; sou800 donu800\'tu800 hide theu800 error message prefix break; andu800 done because nou800 need tou800 look further endu800 endu800 zu800u82eerror_msgs_t 1u800 tableu82econcat utilitiesu82eerror_comment msg_prefix hidden zu800u82eerror_msgs_t 1u800 ; addu800 error message prefix tou800 first error message tou800 prevent extraneous punctuation tableu82einsert render_t tableu82econcat zu800u82eerror_msgs_t \'; \' ; make au800 bigu800 string ofu800 error messages andu800 addu800 itu800 tou800 theu800 rendering endu800 ifu800 0u800 #zu800u82emaint_cats_t then mwu800u82eaddwarning utilitiesu82esubstitute cfgu800u82emessagesu82ewarning_msg_m template_link ; tableu82esort zu800u82emaint_cats_t ; sort theu800 maintenance messages list local maint_msgs_t ; here weu800 collect allu800 ofu800 theu800 maint messages ifu800 0u800 #zu800u82eerror_msgs_t then ifu800 nou800 error messages tableu82einsert maint_msgs_t msg_prefix ; insert message prefix inu800 maint message livery endu800 foru800 _u800 vu800 inu800 ipairs zu800u82emaint_cats_t dou800 append maintenance categories tableu82einsert maint_msgs_t assemble newu800 maint message andu800 addu800 itu800 tou800 theu800 maint_msgs_t table tableu82econcat vu800 \' \' utilitiesu82esubstitute cfgu800u82emessages \' catu800 wikilink\' vu800 \' \' ; endu800 tableu82einsert render_t utilitiesu82esubstitute cfgu800u82epresentation \'hidden maint\' tableu82econcat maint_msgs_t \' \' ; wrap theu800 group ofu800 maint messages with proper presentation andu800 save endu800 ifu800 notu800 no_tracking_cats then foru800 _u800 vu800 inu800 ipairs zu800u82eerror_cats_t dou800 append error categories tableu82einsert render_t utilitiesu82esubstitute cfgu800u82emessages \'catu800 wikilink\' vu800 ; endu800 foru800 _u800 vu800 inu800 ipairs zu800u82emaint_cats_t dou800 append maintenance categories tableu82einsert render_t utilitiesu82esubstitute cfgu800u82emessages \'catu800 wikilink\' vu800 ; endu800 foru800 _u800 vu800 inu800 ipairs zu800u82eprop_cats_t dou800 append properties categories tableu82einsert render_t utilitiesu82esubstitute cfgu800u82emessages \'catu800 wikilink\' vu800 ; endu800 endu800 return tableu82econcat render_t ; make au800 bigu800 string andu800 done endu800 looks foru800 au800 parameter parameter\'su800 name inu800 oneu800 ofu800 several whitelists. parameters inu800 theu800 whitelist canu800 have three values true active supported parameters false deprecated supported parameters nilu800 unsupported parameters local function validate name cite_class empty local name tostring name ; local enum_name; foru800 enumerated parameters isu800 name with enumerator replaced with \'#\' local state; local function state_test state name local function tou800 dou800 testing ofu800 state values ifu800 true state then return true; endu800 valid actively supported parameter ifu800 false state then ifu800 empty then return nilu800; endu800 empty deprecated parameters areu800 treated asu800 unknowns deprecated_parameter name ; parameter isu800 deprecated butu800 still supported return true; endu800 ifu800 \'tracked\' state then local base_name mwu800u82eustringu82egsub name \' du800\'   ; strip enumerators from parameter names that have them tou800 getu800 theu800 base name utilitiesu82eadd_prop_cat \'tracked param\' base_name base_name ; addu800 au800 properties category; modifies return true; endu800 return nilu800; endu800 ifu800 mwu800u82eustringu82efind name \'#\' then # isu800 au800 cs1u800 2u800 reserved character sou800 parameters with # notu800 permitted return nilu800; endu800 ifu800 utilitiesu82ein_array cite_class whitelistu82epreprint_template_list then limited parameter sets allowed foru800 these templates state whitelistu82elimited_basic_arguments name ; ifu800 true state_test state name then return true; endu800 state whitelistu82epreprint_arguments cite_class name ; look inu800 theu800 parameter list foru800 theu800 template identified byu800 cite_class ifu800 true state_test state name then return true; endu800 limited enumerated parameters list enum_name mwu800u82eustringu82egsub name \" du800 \" \"#\" ; replace digit su800 with # last25 becomes last# mwu800u82eustring because nonu800 western \'local\' digits state whitelistu82elimited_numbered_arguments enum_name ; ifu800 true state_test state name then return true; endu800 return false; notu800 supported because notu800 found oru800 name isu800 setu800 tou800 nilu800 endu800 endu800 limited parameter setu800 templates ifu800 utilitiesu82ein_array cite_class whitelistu82eunique_param_template_list then experiment foru800 template specific parameters foru800 templates that accept parameters from theu800 basic argument list state whitelistu82eunique_arguments cite_class name ; look inu800 theu800 template specific parameter lists foru800 theu800 template identified byu800 cite_class ifu800 true state_test state name then return true; endu800 endu800 ifu800 here fall into general validation state whitelistu82ebasic_arguments name ; allu800 other templates; allu800 normal parameters allowed ifu800 true state_test state name then return true; endu800 allu800 enumerated parameters allowed enum_name mwu800u82eustringu82egsub name \" du800 \" \"#\" ; replace digit su800 with # last25 becomes last# mwu800u82eustring because nonu800 western \'local\' digits state whitelistu82enumbered_arguments enum_name ; ifu800 true state_test state name then return true; endu800 return false; notu800 supported because notu800 found oru800 name isu800 setu800 tou800 nilu800 endu800 check foru800 inter language interwiki link markup. must beu800 au800 mediawiki recognized language code. when these values have theu800 form without leading colon link label return label asu800 plain text link return link asu800 plain text return value asu800 isu800 else local function inter_wiki_check parameter value local prefix mwu800u82eustringu82ematch value \' au800 \' ; getu800 anu800 interwiki prefix ifu800 oneu800 exists local _u800; ifu800 prefix andu800 cfgu800u82einter_wiki_map prefix lower then ifu800 prefix isu800 inu800 theu800 mapu800 needs preceding colon sou800 utilitiesu82eset_message \'err_bad_paramlink\' parameter ; emit anu800 error message _u800 value _u800 utilitiesu82eis_wikilink value ; extract label portion from wikilink endu800 return value; endu800 look atu800 theu800 contents ofu800 au800 parameter. ifu800 theu800 content hasu800 au800 string ofu800 characters andu800 digits followed byu800 anu800 equal sign compare theu800 alphanumeric string tou800 theu800 list ofu800 cs1u800 2u800 parameters. ifu800 found then theu800 string isu800 possibly au800 parameter that isu800 missing itsu800 pipe. there areu800 twou800 tests made cite ... title title access date 2016 03u800 17u800 theu800 first parameter hasu800 au800 value andu800 whitespace separates that value from theu800 missing pipe parameter name cite ... title access date 2016 03u800 17u800 theu800 first parameter hasu800 nou800 value whitespace after theu800 first isu800 trimmed byu800 mediawiki cs1u800 2u800 shares some parameter names with xmlu800 html attributes class title etcu800. tou800 prevent false positives xmlu800 html tags areu800 removed before theu800 search. ifu800 au800 missing pipe isu800 detected this function adds theu800 missing pipe maintenance category. local function missing_pipe_check parameter value local capture; value mwu800u82eustringu82egsub value \' bu800 \'   ; remove xmlu800 html tags because attributes class title etcu800. capture mwu800u82eustringu82ematch value \' su800 au800 wu800 su800* \' oru800 mwu800u82eustringu82ematch value \' au800 wu800 su800* \' ; find andu800 categorize parameters with possible missing pipes ifu800 capture andu800 validate capture then ifu800 theu800 capture isu800 au800 valid parameter name utilitiesu82eset_message \'err_missing_pipe\' parameter ; endu800 endu800 look foru800 extraneous terminal punctuation inu800 most parameter values; parameters listed inu800 skip table areu800 notu800 checked local function has_extraneous_punc param value ifu800 \'number\' type param then return; endu800 param mwu800u82eustringu82egsub param \' du800 \' \'#\' ; enumerated name list mask params allow terminal punct; normalize ifu800 cfgu800u82epunct_skip param then return; parameter name found inu800 theu800 skip table sou800 done endu800 ifu800 mwu800u82eustringu82ematch value \' ; \' then utilitiesu82eset_message \'maint_extra_punct\' ; hasu800 extraneous punctuation; addu800 maint catu800 endu800 ifu800 mwu800u82eustringu82ematch value \' \' then sometimes anu800 extraneous \' \' character appears ... utilitiesu82eset_message \'maint_extra_punct\' ; hasu800 extraneous punctuation; addu800 maint catu800 endu800 endu800 look foru800 extraneous urlu800 parameter values; parameters listed inu800 skip table areu800 notu800 checked local function has_extraneous_url url_param_t local url_error_t ; check_for_url url_param_t url_error_t ; extraneous urlu800 check ifu800 0u800 #url_error_t then nonu800 zero when there areu800 errors tableu82esort url_error_t ; utilitiesu82eset_message \'err_param_has_ext_link\' utilitiesu82emake_sep_list #url_error_t url_error_t ; addu800 this error message endu800 endu800 this isu800 used byu800 templates such asu800 cite book tou800 create theu800 actual citation text. local function citation frame frame frame; save au800 copy inu800 case weu800 need tou800 display anu800 error message inu800 preview mode local sandbox \' sandbox\' i18n replace this rvalue with theu800 name that your wiki uses tou800 identify sandbox subpages is_sandbox nilu800 stringu82efind frame gettitle sandbox 1u800 true ; isu800 this invoke theu800 sandbox module sandbox   is_sandbox andu800 sandbox oru800  ; useu800 i18n sandbox tou800 load sandbox modules when this module isu800 theu800 sandox; live modules else local pframe frame getparent local styles; cfgu800 mwu800u82eloaddata \'module citation cs1u800 enu800 configuration\' .. sandbox ; load sandbox versions ofu800 support modules when #invoke citation cs1u800 sandbox ... ; live modules else whitelist mwu800u82eloaddata \'module citation cs1u800 enu800 whitelist\' .. sandbox ; utilities require \'module citation cs1u800 enu800 utilities .. sandbox ; validation require \'module citation cs1u800 enu800 date_validation\' .. sandbox ; identifiers require \'module citation cs1u800 enu800 identifiers .. sandbox ; metadata require \'module citation cs1u800 enu800 coins .. sandbox ; styles \'module citation cs1u800 enu800\' .. sandbox .. \' stylesu82ecssu800\'; utilitiesu82eset_selected_modules cfgu800 ; sou800 that functions inu800 utilities canu800 seeu800 theu800 selected cfgu800 tables identifiersu82eset_selected_modules cfgu800 utilities ; sou800 that functions inu800 identifiers canu800 seeu800 theu800 selected cfgu800 tables andu800 selected utilities module validationu82eset_selected_modules cfgu800 utilities ; sou800 that functions inu800 date validataion canu800 seeu800 selected cfgu800 tables andu800 theu800 selected utilities module metadatau82eset_selected_modules cfgu800 utilities ; sou800 that functions inu800 coins canu800 seeu800 theu800 selected cfgu800 tables andu800 selected utilities module zu800 utilitiesu82ezu800; table ofu800 error andu800 category tables inu800 module citation cs1u800 utilities is_preview_mode notu800 utilitiesu82eis_set frame preprocess \' revisionid \' ; local args ; table where weu800 store allu800 ofu800 theu800 template template\'su800 arguments local suggestions ; table where weu800 store suggestions ifu800 weu800 need tou800 loaddata them local error_text; used asu800 au800 flag local config ; table tou800 store parameters from theu800 module #invoke foru800 ku800 vu800 inu800 pairs frameu82eargs dou800 getu800 parameters from theu800 #invoke frame config ku800 vu800; args ku800 vu800; crude debug support that allows usu800 tou800 render au800 citation from module #invoke ; skips parameter validation; todo keep endu800 local capture; theu800 single supported capture when matching unknown parameters using patterns local empty_unknowns ; sequence table tou800 hold empty unknown params foru800 error message listing foru800 ku800 vu800 inu800 pairs pframeu82eargs dou800 getu800 parameters from theu800 parent template frame vu800 mwu800u82eustringu82egsub vu800 \' su800* . su800* \' \' 1u800\' ; trim leading trailing whitespace; when vu800 isu800 only whitespace becomes empty string ifu800 vu800   then ifu800 \'string\' type ku800 then ku800 mwu800u82eustringu82egsub ku800 \' du800\' cfgu800u82edate_namesu82elocal_digits ; foru800 enumerated parameters translate \'local\' digits tou800 western 0u800 9u800 endu800 ifu800 notu800 validate ku800 configu82ecitationclass then ifu800 type ku800 \'string\' then exclude empty numbered parameters ifu800 mwu800u82eustringu82ematch vu800 \" su800 \" nilu800 then error_text utilitiesu82eset_message \'err_text_ignored\' vu800 ; endu800 elseif validate ku800 lower configu82ecitationclass then error_text utilitiesu82eset_message \'err_parameter_ignored_suggest\' ku800 ku800 lower ; suggest theu800 lowercase version ofu800 theu800 parameter else ifu800 nilu800 suggestionsu82esuggestions then ifu800 this table isu800 nilu800 then weu800 need tou800 load itu800 ifu800 is_sandbox then didu800 theu800 #invoke useu800 sandbox version suggestions mwu800u82eloaddata \'module citation cs1u800 enu800 suggestions ; useu800 theu800 sandbox version else suggestions mwu800u82eloaddata \'module citation cs1u800 enu800 suggestions ; useu800 theu800 live version endu800 endu800 foru800 pattern param inu800 pairs suggestionsu82epatterns dou800 loop through theu800 patterns tou800 seeu800 ifu800 weu800 canu800 suggest au800 proper parameter capture mwu800u82eustringu82ematch ku800 pattern ; theu800 whole match ifu800 nou800 capture inu800 pattern else theu800 capture ifu800 au800 match ifu800 capture then ifu800 theu800 pattern matches param utilitiesu82esubstitute param capture ; addu800 theu800 capture tou800 theu800 suggested parameter typically theu800 enumerator ifu800 validate param configu82ecitationclass then validate theu800 suggestion tou800 make sure that theu800 suggestion isu800 supported byu800 this template necessary foru800 limited parameter lists error_text utilitiesu82eset_message \'err_parameter_ignored_suggest\' ku800 param ; setu800 theu800 suggestion error message else error_text utilitiesu82eset_message \'err_parameter_ignored\' ku800 ; suggested param notu800 supported byu800 this template vu800  ; unset endu800 endu800 endu800 ifu800 notu800 utilitiesu82eis_set error_text then couldn\'tu800 match with au800 pattern isu800 there anu800 explicit suggestion ifu800 suggestionsu82esuggestions ku800 lower nilu800 andu800 validate suggestionsu82esuggestions ku800 lower configu82ecitationclass then utilitiesu82eset_message \'err_parameter_ignored_suggest\' ku800 suggestionsu82esuggestions ku800 lower ; else utilitiesu82eset_message \'err_parameter_ignored\' ku800 ; vu800  ; unset value assigned tou800 unrecognized parameters this foru800 theu800 limited parameter lists endu800 endu800 endu800 endu800 args ku800 vu800; save this parameter andu800 itsu800 value elseif notu800 utilitiesu82eis_set vu800 then foru800 empty parameters ifu800 notu800 validate ku800 configu82ecitationclass true then isu800 this empty parameter au800 valid parameter ku800   ku800 andu800 \' empty string \' oru800 ku800; when ku800 isu800 empty string oru800 wasu800 space su800 trimmed tou800 empty string replace with descriptive text tableu82einsert empty_unknowns utilitiesu82ewrap_style \'parameter\' ku800 ; format foru800 error message andu800 addu800 tou800 theu800 list endu800 crude debug support that allows usu800 tou800 render au800 citation from module #invoke todo keep elseif args ku800 nilu800 oru800 ku800 \'postscript\' then when args ku800 hasu800 au800 value from #invoke frame weu800 donu800\'tu800 normally dou800 that args ku800 vu800; overwrite args ku800 with empty string from pframeu82eargs ku800 template frame ; vu800 isu800 empty string here endu800 notu800 sure about theu800 postscript bitu800; that gets handled inu800 parameter validation; historical artifact endu800 ifu800 0u800 #empty_unknowns then create empty unknown error message utilitiesu82eset_message \'err_param_unknown_empty\' 1u800 #empty_unknowns andu800   oru800 \'su800 utilitiesu82emake_sep_list #empty_unknowns empty_unknowns ; endu800 local url_param_t ; foru800 ku800 vu800 inu800 pairs args dou800 ifu800 \'string\' type ku800 then donu800\'tu800 evaluate positional parameters has_invisible_chars ku800 vu800 ; look foru800 invisible characters endu800 has_extraneous_punc ku800 vu800 ; look foru800 extraneous terminal punctuation inu800 parameter values missing_pipe_check ku800 vu800 ; dou800 weu800 think that there isu800 au800 parameter that isu800 missing au800 pipe args ku800 inter_wiki_check ku800 vu800 ; when language interwiki linked parameter missing leading colon replace with wiki link label ifu800 \'string\' type ku800 andu800 notu800 cfgu800u82eurl_skip ku800 then when parameter ku800 isu800 notu800 positional andu800 notu800 inu800 urlu800 skip table url_param_t ku800 vu800; make au800 parameter value list foru800 extraneous urlu800 check endu800 endu800 has_extraneous_url url_param_t ; look foru800 urlu800 inu800 parameter values where au800 urlu800 does notu800 belong return tableu82econcat frame extensiontag \'templatestyles   srcu800 styles citation0 config args ; endu800 return citation citation ; ');
INSERT INTO `searchindex` (`si_page`, `si_title`, `si_text`) VALUES
(18, 'citation cs1u800 enu800 coins', ' local has_accept_as_written is_set in_array remove_wiki_link strip_apostrophe_markup; functions inu800 module citation cs1u800 utilities local cfgu800; table ofu800 configuration tables that areu800 defined inu800 module citation cs1u800 configuration makes au800 title foru800 coins from title andu800 oru800 scripttitle oru800 anyu800 other name script pairs apostrophe markup bold italics isu800 stripped from each value sou800 that theu800 coins metadata isnu800\'tu800 corrupted with strings ofu800 27u800 27u800... local function make_coins_title title script title has_accept_as_written title ; ifu800 is_set title then title strip_apostrophe_markup title ; strip anyu800 apostrophe markup else title  ; ifu800 notu800 setu800 make sure title isu800 anu800 empty string endu800 ifu800 is_set script then script script gsub \' lu800 lu800 su800* su800*\'   ; remove language prefix ifu800 present script value mayu800 nowu800 beu800 empty string script strip_apostrophe_markup script ; strip anyu800 apostrophe markup else script  ; ifu800 notu800 setu800 make sure script isu800 anu800 empty string endu800 ifu800 is_set title andu800 is_set script then script \' \' .. script; addu800 au800 space before weu800 concatenate endu800 return title .. script; return theu800 concatenation endu800 returns au800 string where allu800 ofu800 luau800 luau800\'su800 magic characters have been escaped. this isu800 important because functions like stringu82egsub treat their pattern andu800 replace strings asu800 patterns notu800 literal strings. local function escape_lua_magic_chars argument argument argument gsub \" \" \" \" ; replace with argument argument gsub \" . * \" \" 1u800\" ; replace allu800 other luau800 magic pattern characters return argument; endu800 extract page numbers from external wikilinks inu800 anyu800 ofu800 theu800 page pages oru800 atu800 parameters foru800 useu800 inu800 coins. local function get_coins_pages pages local pattern; ifu800 notu800 is_set pages then return pages; endu800 ifu800 nou800 page numbers then weu800\'reu800 done while true dou800 pattern pages match \" wu800* su800 wu800 du800 .* \" ; pattern isu800 theu800 opening bracket theu800 urlu800 andu800 following space su800 \" urlu800 \" ifu800 nilu800 pattern then break; endu800 nou800 more urls pattern escape_lua_magic_chars pattern ; pattern isu800 notu800 au800 literal string; escape luau800 luau800\'su800 magic pattern characters pages pages gsub pattern \"\" ; remove asu800 many instances ofu800 pattern asu800 possible endu800 pages pages gsub \" \" \"\" ; remove theu800 brackets pages pages gsub \"u8e28093\" \" \" ; replace endashes with hyphens pages pages gsub \"& wu800 ;\" \" \" ; andu800 replace html entities &ndash; etcu800. with hyphens; dou800 weu800 need tou800 replace numerical entities like &#32u800; andu800 theu800 like return pages; endu800 there areu800 three options foru800 math markup rendering that depend onu800 theu800 editor editor\'su800 math preference settings. these settings areu800 atu800 special preferences#mwu800 prefsection rendering andu800 areu800 pngu800 images texu800 source mathml with svgu800 oru800 pngu800 fallback allu800 three areu800 heavy with html andu800 cssu800 which doesn\'tu800 belong inu800 theu800 metadata. without this function theu800 metadata saved inu800 theu800 rawu800 wikitext contained theu800 rendering determined byu800 theu800 settings ofu800 theu800 last editor tou800 save theu800 page. this function gets theu800 rendered form ofu800 anu800 equation according tou800 theu800 editor editor\'su800 preference before theu800 page isu800 saved. itu800 then searches theu800 rendering foru800 theu800 text equivalent ofu800 theu800 rendered equation andu800 replaces theu800 rendering with that sou800 that theu800 page isu800 saved without extraneous html cssu800 markup andu800 with au800 reasonably readable text form ofu800 theu800 equation. when au800 replacement isu800 made this function returns true andu800 theu800 value with replacement; otherwise false andu800 theu800 initial value. tou800 replace multipe equations itu800 isu800 necessary tou800 call this function from within au800 loop. local function coins_replace_math_stripmarker value local stripmarker cfgu800u82estripmarkers \'math\' ; local rendering value match stripmarker ; isu800 there au800 math stripmarker ifu800 notu800 rendering then when value doesn\'tu800 have au800 math stripmarker abandon this test return false value; endu800 rendering mwu800u82etextu82eunstripnowiki rendering ; convert stripmarker into rendered value oru800 nilu800   when math render error ifu800 rendering match \'altu800 \" \" \"\' then ifu800 pngu800 math option rendering rendering match \'altu800 \" \" \"\' ; extract just theu800 math text elseif rendering match \' su800 . su800 \' then ifu800 texu800 math option; isu800 legit character that isu800 escapes asu800 rendering rendering match \' su800 . su800 \' extract just theu800 math text elseif rendering match \' . \' then ifu800 mathml math option rendering rendering match \' . \' extract just theu800 math text else return false value; hadu800 math stripmarker butu800 notu800 oneu800 ofu800 theu800 three defined forms endu800 return true value gsub stripmarker rendering 1u800 ; endu800 cleanup parameter values foru800 theu800 metadata byu800 removing oru800 replacing invisible characters andu800 certain html entities. 2015 12u800 10u800 there isu800 au800 bugu800 inu800 mwu800u82etextu82eunstripnowiki . itu800 replaces math stripmarkers with theu800 appropriate content when itu800 shouldn\'tu800. seeu800 andu800 wikipedia_talk luau800#stripmarkers_and_mwu82etextu82eunstripnowikiu82e28u800u82e29u800 todo move theu800 replacement patterns andu800 replacement values into au800 table inu800 configuration similar tou800 theu800 invisible characters table local function coins_cleanup value local replaced true; default state tou800 getu800 theu800 dou800 loop running while replaced dou800 loop until allu800 math stripmarkers replaced replaced value coins_replace_math_stripmarker value ; replace math stripmarker with text representation ofu800 theu800 equation endu800 value value gsub cfgu800u82estripmarkers \'math\' \"math render error\" ; oneu800 oru800 more couldn\'tu800 beu800 replaced; insert vague error message value mwu800u82etextu82eunstripnowiki value ; replace nowiki stripmarkers with their content value value gsub \' &#39u800; su800 \' \"\' 1u800\" ; replace \' oru800 \'su800 with simple apostrophe oru800 apostrophe su800 value value gsub \'&nbsp;\' \' \' ; replace &nbsp; entity with plain space value value gsub \' 226u800 128u800 138u800\' \' \' ; replace hair space with plain space ifu800 notu800 mwu800u82eustringu82efind value cfgu800u82eindic_script then donu800\'tu800 remove zero width joiner characters from indic script value value gsub \'&zwju800;\'   ; remove &zwju800; entities value mwu800u82eustringu82egsub value \' 226u800 128u800 141u800 226u800 128u800 139u800 194u800 173u800 \'   ; remove zero width joiner zero width space soft hyphen endu800 value value gsub \' 009u800 010u800 013u800 \' \' \' ; replace horizontal tabu800 line feed carriage return with plain space return value; endu800 coins metadata seeu800 allows automated tools tou800 parse theu800 citation information. local function coins data class ifu800 \'table\' type data oru800 nilu800 next data then return  ; endu800 foru800 ku800 vu800 inu800 pairs data dou800 spin through allu800 ofu800 theu800 metadata parameter values ifu800 \'id_list\' ku800 andu800 \'authors ku800 then except theu800 id_list andu800 author tables author nowiki stripmarker done when author table processed data ku800 coins_cleanup vu800 ; endu800 endu800 local ctx_ver \"z39u800u82e88u800 2004\"; treat table strictly asu800 anu800 array with only setu800 values. local ocinsoutput setmetatable __newindex function self keyu800 value ifu800 is_set value then rawset self #self 1u800 tableu82econcat keyu800 \' \' mwu800u82euriu800u82eencode remove_wiki_link value ; endu800 endu800 ; ifu800 in_array class \'arxiv\' \'biorxiv\' \'citeseerx\' \'ssrn\' \'journal\' \'news \'magazine\' oru800 in_array class \'conference\' \'interview\' \'mapu800\' \'press release\' \'webu800\' andu800 is_set datau82eperiodical oru800 \'citation\' class andu800 is_set datau82eperiodical andu800 notu800 is_set datau82eencyclopedia then ocinsoutputu82erft_val_fmt \"info ofiu800 fmtu800 kevu800 mtxu800 journal\"; journal metadata identifier ifu800 in_array class \'arxiv\' \'biorxiv\' \'citeseerx\' \'ssrn\' then setu800 genre according tou800 theu800 type ofu800 citation template weu800 areu800 rendering ocinsoutput \"rftu800u82egenre\" \"preprint\"; cite arxiv cite biorxiv cite citeseerx cite ssrn elseif \'conference\' class then ocinsoutput \"rftu800u82egenre\" \"conference\"; cite conference when periodical setu800 elseif \'webu800\' class then ocinsoutput \"rftu800u82egenre\" \"unknown\"; cite webu800 when periodical setu800 else ocinsoutput \"rftu800u82egenre\" \"article\"; journal andu800 other \'periodical\' articles endu800 ocinsoutput \"rftu800u82ejtitle\" datau82eperiodical; journal only ocinsoutput \"rftu800u82eatitle\" datau82etitle; \'periodical\' article titles these used only foru800 periodicals ocinsoutput \"rftu800u82essnu800\" datau82eseason; keywords winter spring summer fall ocinsoutput \"rftu800u82equarter\" datau82equarter; single digits 1u800 first quarter etcu800. ocinsoutput \"rftu800u82echron\" datau82echron; free form date components ocinsoutput \"rftu800u82evolume\" datau82evolume; does notu800 apply tou800 books ocinsoutput \"rftu800u82eissue\" datau82eissue; ocinsoutput \"rftu800u82epages\" datau82epages; also used inu800 book metadata elseif \'thesis class then allu800 others except cite thesis areu800 treated asu800 \'book\' metadata; genre distinguishes ocinsoutputu82erft_val_fmt \"info ofiu800 fmtu800 kevu800 mtxu800 book\"; book metadata identifier ifu800 \'report\' class oru800 \'techreport\' class then cite report andu800 cite techreport ocinsoutput \"rftu800u82egenre\" \"report\"; elseif \'conference\' class then cite conference when periodical notu800 setu800 ocinsoutput \"rftu800u82egenre\" \"conference\"; ocinsoutput \"rftu800u82eatitle\" datau82echapter; conference paper asu800 chapter inu800 proceedings book elseif in_array class \'book\' \'citation\' \'encyclopaedia\' \'interview\' \'mapu800\' then ifu800 is_set datau82echapter then ocinsoutput \"rftu800u82egenre\" \"bookitem\"; ocinsoutput \"rftu800u82eatitle\" datau82echapter; book chapter encyclopedia article interview inu800 au800 book oru800 mapu800 title else ifu800 \'mapu800\' class oru800 \'interview\' class then ocinsoutput \"rftu800u82egenre\" \'unknown\'; standalone mapu800 oru800 interview else ocinsoutput \"rftu800u82egenre\" \'book\'; book andu800 encyclopedia endu800 endu800 else \'audio visual\' \'avu800 media notes \'dvdu800 notes \'episode\' \'interview\' \'mailinglist\' \'mapu800\' \'newsgroup\' \'podcast\' \'press release\' \'serial\' \'sign\' \'speech\' \'webu800\' ocinsoutput \"rftu800u82egenre\" \"unknown\"; endu800 ocinsoutput \"rftu800u82ebtitle\" datau82etitle; book only ocinsoutput \"rftu800u82eplace\" datau82epublicationplace; book only ocinsoutput \"rftu800u82eseries\" datau82eseries; book only ocinsoutput \"rftu800u82epages\" datau82epages; book journal ocinsoutput \"rftu800u82eedition\" datau82eedition; book only ocinsoutput \"rftu800u82epubu800\" datau82epublishername; book andu800 dissertation else cite thesis ocinsoutputu82erft_val_fmt \"info ofiu800 fmtu800 kevu800 mtxu800 dissertation\"; dissertation metadata identifier ocinsoutput \"rftu800u82etitle\" datau82etitle; dissertation also patent butu800 that isu800 notu800 yetu800 supported ocinsoutput \"rftu800u82edegree\" datau82edegree; dissertation only ocinsoutput \'rftu800u82einst\' datau82epublishername; book andu800 dissertation endu800 nbu800. notu800 currently supported areu800 \"info ofiu800 fmtu800 kevu800 mtxu800 patent\" \"info ofiu800 fmtu800 kevu800 mtxu800 dcu800\" \"info ofiu800 fmtu800 kevu800 mtxu800 sch_svc\" \"info ofiu800 fmtu800 kevu800 mtxu800 ctxu800\" andu800 nowu800 common parameters asu800 much asu800 possible ocinsoutput \"rftu800u82edate\" datau82edate; book journal dissertation foru800 ku800 vu800 inu800 pairs datau82eid_list dou800 what tou800 dou800 about these foru800 nowu800 assume that they areu800 common tou800 allu800 ifu800 ku800 \'isbn\' then vu800 vu800 gsub \" 0u800 9xu800 \" \"\" ; endu800 local idu800 cfgu800u82eid_handlers ku800 .coins; ifu800 stringu82esubu800 idu800 oru800 \"\" 1u800 4u800 \'info\' then foru800 idsu800 that areu800 inu800 theu800 info registry ocinsoutput \"rft_id\" tableu82econcat idu800 \" \" vu800 ; elseif stringu82esubu800 idu800 oru800 \"\" 1u800 3u800 \'rftu800\' then foru800 isbn issn eissn etcu800. that have defined coins keywords ocinsoutput idu800 vu800; elseif \'urlu800\' idu800 then foru800 urls that areu800 assembled inu800 identifiers; asin andu800 olu800 ocinsoutput \"rft_id\" tableu82econcat datau82eid_list ku800 \"#idu800 name \" cfgu800u82eid_handlers ku800 .label ; elseif idu800 then when cfgu800u82eid_handlers ku800 .coins isu800 notu800 nilu800 sou800 urls created here ocinsoutput \"rft_id\" tableu82econcat cfgu800u82eid_handlers ku800 .prefix vu800 cfgu800u82eid_handlers ku800 .suffix oru800   \"#idu800 name \" cfgu800u82eid_handlers ku800 .label ; others; provide au800 urlu800 andu800 indicate identifier name asu800 #fragment human readable butu800 transparent tou800 browsers endu800 endu800 local last first; foru800 ku800 vu800 inu800 ipairs datau82eauthors dou800 last first coins_cleanup vu800u82elast coins_cleanup vu800u82efirst oru800   ; replace anyu800 nowiki stripmarkers nonu800 printing oru800 invisible characters ifu800 ku800 1u800 then foru800 theu800 first author name only ifu800 is_set last andu800 is_set first then setu800 these coins values ifu800 first andu800 last specify theu800 first author name ocinsoutput \"rftu800u82eaulast\" last; book journal dissertation ocinsoutput \"rftu800u82eaufirst\" first; book journal dissertation elseif is_set last then ocinsoutput \"rftu800u82eauu800\" last; book journal dissertation otherwise useu800 this form foru800 theu800 first name endu800 else foru800 allu800 other authors ifu800 is_set last andu800 is_set first then ocinsoutput \"rftu800u82eauu800\" tableu82econcat last \" \" first ; book journal dissertation elseif is_set last then ocinsoutput \"rftu800u82eauu800\" last; book journal dissertation endu800 todo atu800 present weu800 dou800 notu800 report \"etu800 alu800.\". addu800 anything special ifu800 this condition applies endu800 endu800 ocinsoutputu82erft_id datau82eurlu800; ocinsoutputu82erfr_id tableu82econcat \"info sidu800 \" mwu800u82esiteu82eserver match \" * \" \" \" datau82erawpage ; todo addu800 optional extra info rfr_dat #revision referrer private data ctx_id # identifier foru800 theu800 context object ctx_tim timestamp inu800 format yyyy mmu800 ddthh mmu800 sstzd oru800 yyyy mmu800 ddu800 ctx_enc info ofiu800 encu800 utfu800 8u800 character encoding ocinsoutput setmetatable ocinsoutput nilu800 ; sort with version string always first andu800 combine. tableu82esort ocinsoutput ; tableu82einsert ocinsoutput 1u800 \"ctx_ver \" .. ctx_ver ; such asu800 \"z39u800u82e88u800 2004\" return tableu82econcat ocinsoutput \"&\" ; endu800 sets local cfgu800 table andu800 imported functions table tou800 same live oru800 sandbox asu800 that used byu800 theu800 other modules. local function set_selected_modules cfg_table_ptr utilities_page_ptr cfgu800 cfg_table_ptr; has_accept_as_written utilities_page_ptru82ehas_accept_as_written; import functions from selected module citation cs1u800 utilities module is_set utilities_page_ptru82eis_set; in_array utilities_page_ptru82ein_array; remove_wiki_link utilities_page_ptru82eremove_wiki_link; strip_apostrophe_markup utilities_page_ptru82estrip_apostrophe_markup; endu800 return make_coins_title make_coins_title get_coins_pages get_coins_pages coins coins set_selected_modules set_selected_modules ');
INSERT INTO `searchindex` (`si_page`, `si_title`, `si_text`) VALUES
(19, 'citation cs1u800 enu800 configuration', ' local lang_obj mwu800u82elanguageu82egetcontentlanguage ; make au800 language object foru800 theu800 local language; used here foru800 languages andu800 dates list ofu800 namespaces that should notu800 beu800 included inu800 citation error categories. same asu800 setting notracking true byu800 default. note namespace names should useu800 underscores instead ofu800 spaces. local uncategorized_namespaces \'u8daa9u8d8a7u8d8b1u8d8a8u8d8b1\' \'u8d8a8u8d8adu8d8ab\' \'u8d8a8u8d8adu8d8ab_u8daa9u8d8a7u8d8b1u8d8a8u8d8b1\' \'u8d8a8u8d8adu8d8ab_u8d988u8db8cu8daa9u8db8cu8e2808cu8d9beu8d8afu8db8cu8d8a7\' \'u8d8a8u8d8adu8d8ab_u8d9beu8d8b1u8d988u8d986u8d8afu8d987\' \'u8d8a8u8d8adu8d8ab_u8d8a7u8d984u8daafu8d988\' \'u8d8a8u8d8adu8d8ab_u8d8b1u8d8a7u8d987u8d986u8d985u8d8a7\' \'u8d8a8u8d8adu8d8ab_u8d8b1u8d8afu8d987\' \'u8d8a8u8d8adu8d8ab_u8d8afu8d8b1u8daafu8d8a7u8d987\' \'u8d8a8u8d8adu8d8ab_u8daa9u8d8aau8d8a7u8d8a8\' \'u8d8a8u8d8adu8d8ab_u8d9beu8db8cu8d8b4u8e2808cu8d986u8d988u8db8cu8d8b3\' \'u8d8a8u8d8adu8d8ab_u8d8a8u8d8b1u8d986u8d8a7u8d985u8d987_u8d8a2u8d985u8d988u8d8b2u8d8b4u8db8c\' \'u8d8a8u8d8adu8d8ab_u8d9beu8d988u8d8afu8d985u8d8a7u8d986\' \'u8d8a8u8d8adu8d8ab_u8d985u8d8afu8db8cu8d8a7u8d988u8db8cu8daa9u8db8c\' ; local uncategorized_subpages \' ssu800 andbox\' \' ttu800 estcases \' * llu800 ogu800\' \' aau800 rchive\' \' u8d8aau8d985u8d8b1u8db8cu8d986\' \' u8d8a2u8d8b2u8d985u8d8a7u8db8cu8d8b4u8db8c\' ; list ofu800 luau800 patterns found inu800 page names ofu800 pages weu800 should notu800 categorize translation table theu800 following contains fixed text that mayu800 beu800 output asu800 part ofu800 au800 citation. this isu800 separated from theu800 main body tou800 aidu800 inu800 future translations ofu800 this module. local messages \'agency\' \' 1u800 2u800\' 1u800 isu800 sepc 2u800 isu800 agency \'archived dead\' \'archived from 1u800 onu800 2u800\' \'archived live\' \' 1u800 from theu800 original onu800 2u800\' \'archived missing\' \'archived from theu800 original 1u800 onu800 2u800\' \'archived unfit\' \'archived from theu800 original onu800 \' \'archived\' \'archived\' \'byu800\' \'byu800\' contributions tou800 authored works introduction foreword afterword \'cartography\' \'cartography byu800 1u800\' \'editor\' \'edu800.\' \'editors \'edsu800.\' \'edition\' \' 1u800&nbsp;edu800. \' \'episode\' \'episode 1u800\' \'etu800 alu800\' \'etu800&nbsp;alu800.\' \'inu800\' \'inu800\' edited works \'inactive\' \'inactive\' \'inset\' \' 1u800 inset\' \'interview\' \'interviewed byu800 1u800\' \'layu800 summary\' \'layu800 summary\' \'mismatch\' \' &#124u800; 1u800 &#124u800; 2u800 mismatch\' 1u800 isu800 year param name; 2u800 isu800 date param name \'newsgroup\' \' usenet newsgroup newsgroup &nbsp; 1u800\' \'notitle\' \'nou800 title\' foru800 title andu800 inu800 theu800 future title none \'original\' \'theu800 original\' \'origdate\' \' 1u800 \' \'published\' \' published 1u800 \' \'retrieved\' \'retrieved 1u800\' \'season\' \'season 1u800\' \'section\' \'u8c2a7&nbsp; 1u800\' \'sections \'u8c2a7u8c2a7&nbsp; 1u800\' \'series \' 1u800 2u800\' 1u800 isu800 sepc 2u800 isu800 series \'seriesnum\' \'series 1u800\' \'translated\' \'translated byu800 1u800\' \'type\' \' 1u800 \' foru800 titletype \'written\' \'written atu800 1u800\' \'volu800\' \' 1u800 volu800.&nbsp; 2u800\' 1u800 isu800 sepc; bold journal style volume isu800 inu800 presentation \'volu800 nou800\' \' 1u800 volu800.&nbsp; 2u800 nou800.&nbsp; 3u800\' sepc volume issue alternatively insert 1u800 after 2u800 butu800 then weu800\'du800 also have tou800 change capitalization \'issue\' \' 1u800 nou800.&nbsp; 2u800\' 1u800 isu800 sepc \'ju800 volu800\' \' 1u800 2u800\' sepc volume; bold journal volume isu800 inu800 presentation \'ju800 issue\' \' 1u800 \' \'nopp\' \' 1u800 2u800\'; page su800 without prefix; 1u800 isu800 sepc \'pu800 prefix\' \" 1u800 pu800.&nbsp; 2u800\" 1u800 isu800 sepc \'ppu800 prefix\' \" 1u800 ppu800.&nbsp; 2u800\" 1u800 isu800 sepc \'ju800 page su800 \' \' 1u800\' same foru800 page andu800 pages \'sheet\' \' 1u800 sheet&nbsp; 2u800\' 1u800 isu800 sepc \'sheets \' 1u800 sheets&nbsp; 2u800\' 1u800 isu800 sepc \'ju800 sheet\' \' sheet&nbsp; 1u800\' \'ju800 sheets \' sheets&nbsp; 1u800\' \'language\' \' u8d8a8u8d987 1u800 \' \'viau800\' \" &ndash; viau800 1u800\" \'event\' \'event occurs atu800\' \'minutes \'minutes inu800\' determines theu800 location ofu800 theu800 help page \'help page link\' \'help cs1u800 errors \'help page label\' \'help\' categories \'catu800 wikilink\' \' category 1u800 \' 1u800 isu800 theu800 category name \' catu800 wikilink\' \' category 1u800 link \' category name asu800 maintenance message wikilink; 1u800 isu800 theu800 category name internal errors should only occur ifu800 configuration isu800 badu800 \'undefined_error\' \'called with anu800 undefined error condition\' \'unknown_id_key\' \'unrecognized idu800 keyu800 \' anu800 idu800 keyu800 inu800 id_handlers notu800 found inu800 identifiers func_map \'unknown_id_access \'unrecognized idu800 access keyword \' anu800 idu800 access keyword inu800 id_handlers notu800 found inu800 keywords_lists \'idu800 access \'unknown_argument_map\' \'argument mapu800 notu800 defined foru800 this variable\' \'bare_url_no_origin\' \'bare urlu800 found butu800 origin indicator isu800 nilu800 oru800 empty\' \'warning_msg_e\' \' oneu800 oru800 more &#123u800; 1u800 templates have errors ; messages mayu800 beu800 hidden help cs1_errors#controlling_error_message_display help .\'; 1u800 isu800 template link \'warning_msg_m\' \' oneu800 oru800 more &#123u800; 1u800 templates have maintenance messages ; messages mayu800 beu800 hidden help cs1_errors#controlling_error_message_display help .\'; 1u800 isu800 template link this table maps theu800 value assigned tou800 citationclass inu800 theu800 cs1u800 2u800 templates tou800 theu800 canonical template name when theu800 value assigned tou800 citationclass isu800 different from theu800 canonical template name. citationclass values areu800 used asu800 class attributes inu800 theu800 tagu800 that encloses theu800 citation sou800 these names mayu800 notu800 contain spaces while theu800 canonical template name mayu800. these names areu800 used inu800 warning_msg_e andu800 warning_msg_m tou800 create links tou800 theu800 template template\'su800 documentation when anu800 article isu800 displayed inu800 preivew mode. most cs1u800 2u800 template citationclass values atu800 enu800u82ewiki match their canonical template names sou800 areu800 notu800 listed here. local citation_class_map_t todo ifu800 kept these andu800 allu800 other configu82ecitationclass \'names require some sort ofu800 i18n \'audio visual\' \'avu800 media\' todo move tou800 configuration \'avu800 media notes \'avu800 media notes \'encyclopaedia\' \'encyclopedia\' \'mailinglist\' \'mailing list\' \'pressrelease\' \'press release\' this table provides luau800 patterns foru800 theu800 phrase \"etu800 alu800\" andu800 variants inu800 name text author editor etcu800. . theu800 main module uses these tou800 identify andu800 emit theu800 \'etal\' message. local et_al_patterns \" ; * \"\' * fu800 au800 eeu800 ttu800 . * aau800 llu800 .; \"\' * \" variations onu800 theu800 \'etu800 alu800\' theme \" ; * \"\' * fu800 au800 eeu800 ttu800 . * aau800 llu800 iiu800 aaii eeu800 .; \"\' * \" variations onu800 theu800 \'etu800 alia\' \'etu800 alii\' andu800 \'etu800 aliae\' themes false positive \'etu800 aliie\' unlikely tou800 match \" ; * fu800 au800 andu800 oou800 thers\" anu800 alternative tou800 etu800 alu800. \" * eeu800 ttu800 . * aau800 llu800 . * \" au800 wikilinked form \" * eeu800 ttu800 . * aau800 llu800 . * \" au800 double bracketed form tou800 counter partial removal ofu800 ... syntax \" * eeu800 ttu800 . * aau800 llu800 . * \" au800 bracketed form fixed presentation markup. originally part ofu800 citation_configu82emessages itu800 hasu800 been moved into itsu800 ownu800 more semantically correct place. local presentation .citation comment class isu800 specified atu800 help cs1_errors#controlling_error_message_display \'hidden error\' \' 1u800 \' \'visible error\' \' 1u800 \' \'hidden maint\' \' 1u800 \' \'accessdate\' \' 1u800 2u800 \' tou800 allow editors tou800 hide accessdate using personal cssu800 \'bdiu800\' \' 2u800 \' bidirectional isolation used with script title andu800 theu800 like \'cite\' \' 2u800 \'; foru800 useu800 when citation does notu800 have au800 namelist andu800 refu800 notu800 setu800 sou800 nou800 idu800 \"...\" attribute \'cite idu800\' \' 3u800 \'; foru800 useu800 when when refu800 isu800 setu800 oru800 when citation hasu800 au800 namelist \'format\' \' 1u800 \' foru800 format chapter format etcu800. various access levels foru800 access doiu800 access arxiv ... narrow nou800 break space &#8239; mayu800 work better than nowrap cssu800. oru800 notu800 browser support \'extu800 link access signal\' \' 3u800 \' external link with appropriate lock icon \'free\' class \'cs1u800 lock free\' title \'freely accessible\' classes defined inu800 module citation cs1u800 stylesu82ecssu800 \'registration\' class \'cs1u800 lock registration\' title \'free registration required\' \'limited\' class \'cs1u800 lock limited\' title \'free access subject tou800 limited trial subscription normally required\' \'subscription\' class \'cs1u800 lock subscription\' title \'paid subscription required\' \'interwiki icon\' \' 3u800 \' \'class wikisource\' \'cs1u800 wsu800 icon\' \'italic title\' \"  1u800 \" \'kern left\' \' 1u800\' spacing tou800 useu800 when title contains leading single oru800 double quote mark \'kern right\' \' 1u800 \' spacing tou800 useu800 when title contains trailing single oru800 double quote mark \'nowrap1\' \' 1u800 \' foru800 nowrapping anu800 item yyyy mmu800 ddu800 \'nowrap2\' \' 1u800 2u800\' foru800 nowrapping portions ofu800 anu800 item ddu800 mmmm yyyy note white space \'ocins \' \' \'parameter\' \' &#124u800; 1u800 \' \'ps_cs1\' \'.\'; cs1u800 style postscript terminal character \'ps_cs2\'  ; cs2u800 style postscript terminal character empty string \'quoted text\' \' 1u800 \' foru800 wrapping quote content \'quoted title\' \'\" 1u800\"\' \'sep_cs1\' \'.\' cs1u800 element separator \'sep_cs2\' \' \' cs2u800 separator \'sep_nl\' \';\' cs1u800 2u800 style name list separator between names isu800 au800 semicolon \'sep_nl_and\' \' andu800 \' used asu800 last nlu800 sepu800 when name list style andu800 andu800 list hasu800 2u800 items \'sep_nl_end\' \'; andu800 \' used asu800 last nlu800 sepu800 when name list style andu800 andu800 list hasu800 3u800 names \'sep_name\' \' \' cs1u800 2u800 style last first separator isu800 \'sep_nl_vanc\' \' \' vancouver style name list separator between authors isu800 au800 comma \'sep_name_vanc\' \' \' vancouver style last first separator isu800 au800 space \'sep_list\' \'u8d88c \' used foru800 language when list hasu800 3u800 items except foru800 last sepu800 which uses sep_list_end \'sep_list_pair\' \' u8d988 \' used foru800 language when list hasu800 2u800 items \'sep_list_end\' \' u8d988 \' used asu800 last list sepu800 foru800 language when list hasu800 3u800 items \'trans italic title\' \"&#91u800;  1u800 &#93u800;\" \'trans quoted title\' \"&#91u800; 1u800&#93u800;\" foru800 trans title andu800 trans quote \'volu800 bold\' \' 1u800 2u800 \' sepc volume; foru800 bold journal cites; foru800 other cites \'volu800\' inu800 messages aliases table foru800 commonly passed parameters. parameter names onu800 theu800 right side inu800 theu800 assignments inu800 this table must have been defined inu800 theu800 whitelist before they will beu800 recognized asu800 valid parameter names local aliases \'accessdate\' \'access date\' \'accessdate\' \'u8d8a8u8d8a7u8d8b2u8d8afu8db8cu8d8af\' \'u8d8a8u8d8a7u8d8b2u8db8cu8d8a7u8d8a8u8db8c\' \'u8d8a8u8d8a7u8d8b2u8d8a8u8db8cu8d986u8db8c\' \'u8d8aau8d8a7u8d8b1u8db8cu8d8ae u8d8a8u8d8a7u8d8b2u8d8afu8db8cu8d8af\' \'u8d8aau8d8a7u8d8b1u8db8cu8d8ae u8d8a8u8d8a7u8d8b2u8db8cu8d8a7u8d8a8u8db8c\' \'u8d8aau8d8a7u8d8b1u8db8cu8d8ae u8d8a8u8d8a7u8d8b2u8d8a8u8db8cu8d986u8db8c\' \'u8d8aau8d8a7u8d8b1u8db8cu8d8ae u8d8afu8d8b3u8d8aau8d8b1u8d8b3u8db8c\' used byu800 internetarchivebot \'agency\' \'agency\' \'archivedate\' \'archive date\' \'archivedate\' \'u8d8aau8d8a7u8d8b1u8db8cu8d8ae u8d8a8u8d8a7u8db8cu8daafu8d8a7u8d986u8db8c\' used byu800 internetarchivebot \'archiveformat\' \'archive format\' \'archiveurl\' \'archive urlu800\' \'archiveurl\' \'u8d9beu8db8cu8d988u8d986u8d8af u8d8a8u8d8a7u8db8cu8daafu8d8a7u8d986u8db8c\' \'u8d986u8d8b4u8d8a7u8d986u8db8c u8d8a8u8d8a7u8db8cu8daafu8d8a7u8d986u8db8c\' used byu800 internetarchivebot \'asintld\' \'asin tldu800\' \'atu800\' \'atu800\' used byu800 internetarchivebot \'authors \'authors \'people\' \'credits \'u8d986u8d988u8db8cu8d8b3u8d986u8d8afu8daafu8d8a7u8d986\' \'u8d986u8d988u8db8cu8d8b3u8d986u8d8afu8d987u8e2808cu8d987u8d8a7\' \'u8d985u8d8a4u8d984u8d981u8db8cu8d986\' \'u8d985u8d8a4u8d984u8d981u8d8a7u8d986\' \'booktitle\' \'book title\' \'booktitle\' \'u8d8b9u8d986u8d988u8d8a7u8d986 u8d8acu8d984u8d8af\' \'u8d8b9u8d986u8d988u8d8a7u8d986 u8daa9u8d8aau8d8a7u8d8a8\' \'cartography\' \'cartography\' \'chapter\' \'chapter\' \'contribution\' \'entry\' \'article\' \'section\' \'u8d981u8d8b5u8d984\' \'u8d8a8u8d8aeu8d8b4\' \'u8d985u8d8afu8d8aeu8d984\' \'u8d985u8d8b4u8d8a7u8d8b1u8daa9u8d8aa\' \'u8d985u8d982u8d8a7u8d984u8d987\' \'chapterformat\' \'chapter format\' \'contribution format\' \'entry format\' \'article format\' \'section format\' ; \'chapterurl\' \'chapter urlu800\' \'contribution urlu800\' \'entry urlu800\' \'article urlu800\' \'section urlu800\' \'chapterurl\' \'u8d986u8d8b4u8d8a7u8d986u8db8c u8d981u8d8b5u8d984\' \'u8d9beu8db8cu8d988u8d986u8d8af u8d981u8d8b5u8d984\' \'u8d9beu8db8cu8d988u8d986u8d8af u8d985u8d8b4u8d8a7u8d8b1u8daa9u8d8aa\' \'u8d9beu8db8cu8d988u8d986u8d8af u8d985u8d8afu8d8aeu8d984\' \'u8d9beu8db8cu8d988u8d986u8d8af u8d8a8u8d8aeu8d8b4\' \'u8d9beu8db8cu8d988u8d986u8d8af u8d985u8d982u8d8a7u8d984u8d987\' \'u8d986u8d8b4u8d8a7u8d986u8db8c u8d985u8d982u8d8a7u8d984u8d987\' used byu800 internetarchivebot \'chapterurlaccess \'chapter urlu800 access \'contribution urlu800 access \'entry urlu800 access \'article urlu800 access \'section urlu800 access used byu800 internetarchivebot \'class \'class cite arxiv andu800 arxiv identifier \'collaboration\' \'collaboration\' \'conference\' \'conference\' \'event\' \'conferenceformat\' \'conference format\' \'conferenceurl\' \'conference urlu800\' used byu800 internetarchivebot \'date\' \'date\' \'airu800 date\' \'airdate\' \'u8d8aau8d8a7u8d8b1u8db8cu8d8ae\' \'u8d8aau8d8a7u8d8b1u8db8cu8d8ae u8d8a7u8d986u8d8aau8d8b4u8d8a7u8d8b1\' airu800 date andu800 airdate foru800 cite episode andu800 cite serial only \'deadurl\' \'dead urlu800\' \'deadurl\' \'u8d9beu8db8cu8d988u8d986u8d8af u8d985u8d8b1u8d8afu8d987\' \'degree\' \'degree\' \'dfu800\' \'dfu800\' \'displayauthors \'display authors \'display subjects \'displaycontributors \'display contributors \'displayeditors \'display editors \'displayinterviewers \'display interviewers \'displaytranslators \'display translators \'docket\' \'docket\' \'doibroken\' \'doiu800 broken date\' \'edition\' \'edition\' \'u8d988u8db8cu8d8b1u8d8a7u8d8b3u8d8aa\' \'u8d988u8db8cu8d8b1u8d8a7u8db8cu8d8b4\' \'embargo\' \'pmcu800 embargo date\' \'encyclopedia\' \'encyclopedia\' \'encyclopaedia\' \'dictionary\' \'u8d8afu8d8a7u8d986u8d8b4u8d986u8d8a7u8d985u8d987\' \'u8d8afu8d8a7u8db8cu8d8b1u8d8a9u8d8a7u8d984u8d985u8d8b9u8d8a7u8d8b1u8d981\' cite encyclopedia only \'episode\' \'episode\' cite serial only todo make available tou800 cite episode \'format\' \'format\' \'u8d981u8d8b1u8d985u8d8aa\' \'idu800\' \'idu800\' \'idu800\' \'inset\' \'inset\' \'issue\' \'issue\' \'number\' \'u8d8b4u8d985u8d8a7u8d8b1u8d987\' \'language\' \'language\' \'lang\' \'u8d8b2u8d8a8u8d8a7u8d986\' \'u8daa9u8d8af u8d8b2u8d8a8u8d8a7u8d986\' \'laydate\' \'layu800 date\' \'layformat\' \'layu800 format\' \'laysource\' \'layu800 source\' \'layurl\' \'layu800 urlu800\' \'mailinglist\' \'mailing list\' \'mailinglist\' cite mailing list only \'mapu800\' \'mapu800\' cite mapu800 only \'mapformat\' \'mapu800 format\' cite mapu800 only \'mapurl\' \'mapu800 urlu800\' \'mapurl\' cite mapu800 only used byu800 internetarchivebot \'mapurlaccess \'mapu800 urlu800 access cite mapu800 only used byu800 internetarchivebot \'minutes \'minutes \'mode\' \'mode\' \'nameliststyle\' \'name list style\' \'network\' \'network\' \'u8d8b4u8d8a8u8daa9u8d987\' \'newsgroup\' \'newsgroup\' cite newsgroup only \'nopp\' \'nou800 ppu800\' \'nopp\' \'notracking\' \'nou800 tracking\' \'template docu800 demo\' \'number\' \'number\' \'u8d8b4u8d985u8d8a7u8d8b1u8d987\' this case only foru800 cite techreport \'origdate\' \'orig date\' \'orig year\' \'origyear\' \'u8d8b3u8d8a7u8d984 u8d8a7u8d8b5u8d984u8db8c\' \'u8db8cu8d8a7u8d8afu8d8afu8d8a7u8d8b4u8d8aa u8d8b3u8d8a7u8d984\' \'others \'others \'u8d8afu8db8cu8daafu8d8b1u8d8a7u8d986\' \'u8d986u8d988u8db8cu8d8b3u8d986u8d8afu8daafu8d8a7u8d986 u8d8b3u8d8a7u8db8cu8d8b1 u8d8a8u8d8aeu8d8b4u8e2808cu8d987u8d8a7\' \'page\' \'page\' \'pu800\' \'u8d8b5\' \'u8d8b5u8d981u8d8adu8d987\' used byu800 internetarchivebot \'pages \'pages \'ppu800\' \'u8d8b5u8d8b5\' \'u8d8b5u8d981u8d8adu8d8a7u8d8aa\' \'u8d8b5u8d981u8d8adu8d987u8e2808cu8d987u8d8a7\' used byu800 internetarchivebot \'periodical\' \'journal\' \'magazine\' \'newspaper\' \'periodical\' \'website\' \'work\' \'u8da98u8d988u8d8b1u8d986u8d8a7u8d984\' \'u8d8b1u8d988u8d8b2u8d986u8d8a7u8d985u8d987\' \'u8d985u8d8acu8d984u8d987\' \'u8d986u8d8b4u8d8b1u8db8cu8d987\' \'u8d8a7u8d8abu8d8b1\' \'u8d988u8d8a8u8daafu8d8a7u8d987\' \'u8d8afu8d8a7u8db8cu8d8b1u8d8a9u8d8a7u8d984u8d985u8d8b9u8d8a7u8d8b1u8d981\' \'u8d988u8d8a7u8da98u8d987u8e2808cu8d986u8d8a7u8d985u8d987\' \'u8d984u8d8bau8d8aau8e2808cu8d986u8d8a7u8d985u8d987\' \'place\' \'place\' \'location\' \'u8d985u8daa9u8d8a7u8d986\' \'u8d8b4u8d987u8d8b1\' \'postscript\' \'postscript\' \'u8d9beu8db8cu8e2808cu8d986u8d988u8d8b4u8d8aa\' \'publicationdate\' \'publication date\' \'publicationdate\' \'u8d8aau8d8a7u8d8b1u8db8cu8d8ae u8d8a7u8d986u8d8aau8d8b4u8d8a7u8d8b1\' \'publicationplace\' \'publication place\' \'publicationplace\' \'publishername\' \'publisher\' \'institution\' \'u8d986u8d8a7u8d8b4u8d8b1\' \'u8d8a7u8d986u8d8aau8d8b4u8d8a7u8d8b1u8d8a7u8d8aa\' \'quote\' \'quote\' \'quotation\' \'u8d986u8d982u8d984 u8d982u8d988u8d984\' \'u8daafu8d981u8d8aau8d8a7u8d988u8d8b1u8d8af\' \'quotepage\' \'quote page\' \'quotepages \'quote pages \'refu800\' \'refu800\' \'u8d8b1u8d981\' \'u8d8b4u8d986u8d8a7u8d8b3u8d987\' \'ref2\' \'ref2\' \'u8d8b4\' \'scale\' \'scale\' \'scriptchapter\' \'script chapter\' \'script contribution\' \'script entry\' \'script article\' \'script section\' \'scriptmap\' \'script mapu800\' \'scriptperiodical\' \'script journal\' \'script magazine\' \'script newspaper\' \'script periodical\' \'script website\' \'script work\' \'scriptquote\' \'script quote\' \'scripttitle\' \'script title\' used byu800 internetarchivebot \'season\' \'season\' \'sections \'sections cite mapu800 only \'series \'series \'version\' \'u8d8b3u8d8b1u8db8c\' \'u8d986u8d8b3u8d8aeu8d987\' \'serieslink\' \'series link\' \'serieslink\' \'u8d9beu8db8cu8d988u8d986u8d8af u8d8b3u8d8b1u8db8c\' \'u8d9beu8db8cu8d988u8d986u8d8af u8d986u8d8b3u8d8aeu8d987\' \'seriesnumber\' \'series number\' \'series nou800\' \'u8d8b4u8d985u8d8a7u8d8b1u8d987 u8d8b3u8d8b1u8db8c\' \'sheet\' \'sheet\' cite mapu800 only \'sheets \'sheets cite mapu800 only \'station\' \'station\' \'time\' \'time\' \'timecaption\' \'time caption\' \'title\' \'title\' \'u8d8b9u8d986u8d988u8d8a7u8d986\' \'u8daa9u8d8aau8d8a7u8d8a8\' used byu800 internetarchivebot \'titlelink\' \'title link\' \'episode link\' \'episodelink\' \'u8d9beu8db8cu8d988u8d986u8d8af u8d8b9u8d986u8d988u8d8a7u8d986\' used byu800 internetarchivebot \'titlenote\' \'department\' \'titletype\' \'type\' \'medium\' \'u8d986u8d988u8d8b9\' \'transchapter\' \'trans article\' \'trans chapter\' \'trans contribution\' \'trans entry\' \'trans section\' \'transcript\' \'transcript\' \'transcriptformat\' \'transcript format\' \'transcripturl\' \'transcript urlu800\' \'transcripturl\' used byu800 internetarchivebot \'transmap\' \'trans mapu800\' cite mapu800 only \'transperiodical\' \'trans journal\' \'trans magazine\' \'trans newspaper\' \'trans periodical\' \'trans website\' \'trans work\' \'transquote\' \'trans quote\' \'transtitle\' \'trans title\' \'u8d8aau8d8b1u8d8acu8d985u8d987 u8d8b9u8d986u8d988u8d8a7u8d986\' \'u8d8aau8d8b1u8d8acu8d985u8d987 u8d8a7u8db8cu8d8aau8d8a7u8d984u8db8cu8daa9\' \'u8d8aau8d8b1u8d8acu8d985u8d987 u8d981u8d8b5u8d984\' used byu800 internetarchivebot \'urlu800\' \'urlu800\' \'urlu800\' \'u8d9beu8db8cu8d988u8d986u8d8af\' \'u8d986u8d8b4u8d8a7u8d986u8db8c\' \'u8d9beu8db8cu8d988u8d986u8d8af u8d8a7u8d8b5u8d984u8db8c\' used byu800 internetarchivebot \'urlaccess \'urlu800 access \'u8d8afu8d8b3u8d8aau8d8b1u8d8b3u8db8c u8d9beu8db8cu8d988u8d986u8d8af\' \'u8d8afu8d8b3u8d8aau8d8b1u8d8b3u8db8c u8d9beu8db8cu8d988u8d986u8d8af\' used byu800 internetarchivebot \'urlstatus \'urlu800 status used byu800 internetarchivebot \'vauthors \'vauthors \'veditors \'veditors \'viau800\' \'viau800\' \'u8d8aau8d988u8d8b3u8d8b7\' \'u8d8a8u8d987 u8d988u8d8a7u8d8b3u8d8b7u8d987\' \'volume\' \'volume\' \'u8d8acu8d984u8d8af\' \'u8d8acu8d984u8d8afu8d987u8d8a7\' \'u8d8afu8d988u8d8b1u8d987\' \'year\' \'year\' \'u8d8b3u8d8a7u8d984\' \'authorlist first\' \"first#\" \"author first#\" \"author# first\" \"given#\" \"author given#\" \"author# given\" \"u8d986u8d8a7u8d985#\" \'authorlist last\' \"last#\" \"author last#\" \"author# last\" \"surname#\" \"author surname#\" \"author# surname\" \"author#\" \"subject#\" \'host#\' \"u8d986u8d8a7u8d985 u8d8aeu8d8a7u8d986u8d988u8d8a7u8d8afu8daafu8db8c#\" \"u8d986u8d988u8db8cu8d8b3u8d986u8d8afu8d987#\" \'authorlist link\' \"author link#\" \"author# link\" \"subject link#\" \"subject# link\" \"authorlink#\" \"author#link\" \"u8d9beu8db8cu8d988u8d986u8d8af u8d986u8d988u8db8cu8d8b3u8d986u8d8afu8d987#\" \'authorlist mask\' \"author mask#\" \"author# mask\" \"subject mask#\" \"subject# mask\" \'contributorlist first\' \'contributor first#\' \'contributor# first\' \'contributor given#\' \'contributor# given\' \'u8d986u8d8a7u8d985 u8d985u8d8b4u8d8a7u8d8b1u8daa9u8d8aau8e2808cu8daa9u8d986u8d986u8d8afu8d987#\' \'contributorlist last\' \'contributor last#\' \'contributor# last\' \'contributor surname#\' \'contributor# surname\' \'contributor#\' \'u8d986u8d8a7u8d985 u8d8aeu8d8a7u8d986u8d988u8d8a7u8d8afu8daafu8db8c u8d985u8d8b4u8d8a7u8d8b1u8daa9u8d8aau8e2808cu8daa9u8d986u8d986u8d8afu8d987#\' \'u8d985u8d8b4u8d8a7u8d8b1u8daa9u8d8aau8e2808cu8daa9u8d986u8d986u8d8afu8d987#\' \'contributorlist link\' \'contributor link#\' \'contributor# link\' \'contributorlist mask\' \'contributor mask#\' \'contributor# mask\' \'editorlist first\' \"editor first#\" \"editor# first\" \"editor given#\" \"editor# given\" \"u8d986u8d8a7u8d985 u8d988u8db8cu8d8b1u8d8a7u8d8b3u8d8aau8d8a7u8d8b1#\" \'editorlist last\' \"editor last#\" \"editor# last\" \"editor surname#\" \"editor# surname\" \"editor#\" \"u8d986u8d8a7u8d985 u8d8aeu8d8a7u8d986u8d988u8d8a7u8d8afu8daafu8db8c u8d988u8db8cu8d8b1u8d8a7u8d8b3u8d8aau8d8a7u8d8b1#\" \"u8d988u8db8cu8d8b1u8d8a7u8d8b3u8d8aau8d8a7u8d8b1#\" \'editorlist link\' \"editor link#\" \"editor# link\" \"u8d9beu8db8cu8d988u8d986u8d8af u8d988u8db8cu8d8b1u8d8a7u8d8b3u8d8aau8d8a7u8d8b1#\" \'editorlist mask\' \"editor mask#\" \"editor# mask\" \'interviewerlist first\' \'interviewer first#\' \'interviewer# first\' \'interviewer given#\' \'interviewer# given\' \"u8d986u8d8a7u8d985 u8d985u8d8b5u8d8a7u8d8adu8d8a8u8d987u8e2808cu8daa9u8d986u8d986u8d8afu8d987#\" \'interviewerlist last\' \'interviewer last#\' \'interviewer# last\' \'interviewer surname#\' \'interviewer# surname\' \'interviewer#\' \"u8d986u8d8a7u8d985 u8d8aeu8d8a7u8d986u8d988u8d8a7u8d8afu8daafu8db8c u8d985u8d8b5u8d8a7u8d8adu8d8a8u8d987u8e2808cu8daa9u8d986u8d986u8d8afu8d987#\" \'interviewerlist link\' \'interviewer link#\' \'interviewer# link\' \"u8d9beu8db8cu8d988u8d986u8d8af u8d985u8d8b5u8d8a7u8d8adu8d8a8u8d987u8e2808cu8daa9u8d986u8d986u8d8afu8d987#\" \'interviewerlist mask\' \'interviewer mask#\' \'interviewer# mask\' \'translatorlist first\' \'translator first#\' \'translator# first\' \'translator given#\' \'translator# given\' \"u8d986u8d8a7u8d985 u8d985u8d8aau8d8b1u8d8acu8d985#\" \'translatorlist last\' \'translator last#\' \'translator# last\' \'translator surname#\' \'translator# surname\' \'translator#\' \"u8d986u8d8a7u8d985 u8d8aeu8d8a7u8d986u8d988u8d8a7u8d8afu8daafu8db8c u8d985u8d8aau8d8b1u8d8acu8d985#\" \"u8d985u8d8aau8d8b1u8d8acu8d985#\" \"u8d8aau8d8b1u8d8acu8d985u8d987#\" \'translatorlist link\' \'translator link#\' \'translator# link\' \"u8d9beu8db8cu8d988u8d986u8d8af u8d985u8d8aau8d8b1u8d8acu8d985#\" \'translatorlist mask\' \'translator mask#\' \'translator# mask\' builds au800 table ofu800 parameter names that theu800 extraneous terminal punctuation check should notu800 check. local punct_meta_params table ofu800 aliases keys meta parameters ; each keyu800 hasu800 au800 table ofu800 parameter names foru800 au800 value \'booktitle\' \'chapter\' \'scriptchapter\' \'scripttitle\' \'title\' \'transchapter\' \'transcript\' \'transmap\' \'transtitle\' title holding parameters \'authorlist mask\' \'contributorlist mask\' \'editorlist mask\' \'interviewerlist mask\' \'translatorlist mask\' name list mask mayu800 have name separators \'postscript\' \'quote\' \'scriptquote\' \'transquote\' \'refu800\' miscellaneous \'archiveurl\' \'chapterurl\' \'conferenceurl\' \'layurl\' \'mapurl\' \'transcripturl\' \'urlu800\' urlu800 holding parameters local url_meta_params table ofu800 aliases keys meta parameters ; each keyu800 hasu800 au800 table ofu800 parameter names foru800 au800 value \'archiveurl\' \'chapterurl\' \'conferenceurl\' \'idu800\' \'layurl\' \'mapurl\' \'transcripturl\' \'urlu800\' parameters allowed tou800 hold urls \'page\' \'pages \'atu800\' \'quotepage\' \'quotepages insource locators allowed tou800 hold urls local function build_skip_table skip_t meta_params foru800 _u800 meta_param inu800 ipairs meta_params dou800 foru800 each meta parameter keyu800 local params aliases meta_param ; getu800 theu800 parameter oru800 theu800 table ofu800 parameters associated with theu800 meta parameter name ifu800 \'string\' type params then skip_t params 1u800; just au800 single parameter else foru800 _u800 param inu800 ipairs params dou800 getu800 theu800 parameter name skip_t param 1u800; addu800 theu800 parameter name tou800 theu800 skip table local count; param count param gsub \'#\'   ; remove enumerator marker from enumerated parameters ifu800 0u800 count then ifu800 removed skip_t param 1u800; addu800 param name without enumerator marker endu800 endu800 endu800 endu800 return skip_t; endu800 local punct_skip ; local url_skip ; this table isu800 primarily here tou800 support internationalization. translations inu800 this table areu800 used foru800 example when anu800 error message category name etcu800. isu800 extracted from theu800 english alias keyu800. there mayu800 beu800 other cases where this translation table mayu800 beu800 useful. local is_latn \'au800 zau800 zu800 195u800 128u800 195u800 150u800 195u800 152u800 195u800 182u800 195u800 184u800 198u800 191u800 199u800 132u800 201u800 143u800\'; local special_case_translation \'authorlist\' \"u8d981u8d987u8d8b1u8d8b3u8d8aa u8d986u8d988u8db8cu8d8b3u8d986u8d8afu8daafu8d8a7u8d986\" used tou800 assemble maintenance category names \'contributorlist\' \"u8d981u8d987u8d8b1u8d8b3u8d8aa u8d985u8d8b4u8d8a7u8d8b1u8daa9u8d8aau8e2808cu8daa9u8d986u8d986u8d8afu8daafu8d8a7u8d986\" translation ofu800 these names plus translation ofu800 theu800 base mainenance category names inu800 maint_cats table below \'editorlist\' \"u8d981u8d987u8d8b1u8d8b3u8d8aa u8d988u8db8cu8d8b1u8d8a7u8d8b3u8d8aau8d8a7u8d8b1u8d8a7u8d986\" must match theu800 names ofu800 theu800 actual categories \'interviewerlist\' \"u8d981u8d987u8d8b1u8d8b3u8d8aa u8d985u8d8b5u8d8a7u8d8adu8d8a8u8d987u8e2808cu8daa9u8d986u8d986u8d8afu8daafu8d8a7u8d986\" this group oru800 translations used byu800 name_has_ed_markup andu800 name_has_mult_names \'translatorlist\' \"u8d981u8d987u8d8b1u8d8b3u8d8aa u8d985u8d8aau8d8b1u8d8acu8d985u8d8a7u8d986\" luau800 patterns tou800 match pseudo titles used byu800 internetarchivebot andu800 others asu800 placeholder foru800 unknown title value \'archived_copy\' used with cs1u800 maint archive du800 copy asu800 title \'enu800\' \' archived su800 copy \' foru800 english; translators keep this because templates imported from enu800u82ewiki \'local\' nilu800 translators replace \'local\' nilu800 with lowercase translation only when bots oru800 tools create generic titles inu800 your language luau800 patterns tou800 match generic titles; usually created byu800 bots oru800 reference filling tools translators replace \'local\' nilu800 with lowercase translation only when bots oru800 tools create generic titles inu800 your language generic titles andu800 patterns inu800 this table should beu800 lowercase only leave \'local\' nilu800 except when there isu800 au800 matching generic title inu800 your language boolean \'true\' foru800 plain text searches; \'false\' foru800 pattern searches \'generic_titles \'accept\' \'reject\' \'enu800\' \' wayback su800 machine \' false \'local\' nilu800 \'enu800\' \'areu800 youu800 au800 robot\' true \'local\' nilu800 \'enu800\' \'hugedomainsu82ecomu800\' true \'local\' nilu800 \'enu800\' \' nou800 title \' false \'local\' nilu800 \'enu800\' \'page notu800 found\' true \'local\' nilu800 \'enu800\' \'subscribe tou800 read\' true \'local\' nilu800 \'enu800\' \' unknown \' false \'local\' nilu800 \'enu800\' \'website isu800 foru800 sale\' true \'local\' nilu800 \'enu800\' \' 404u800\' false \'local\' nilu800 \'enu800\' \'internet archive wayback machine\' true \'local\' nilu800 \'enu800\' \'logu800 into facebook\' true \'local\' nilu800 \'enu800\' \'login u8e280a2 instagram\' true \'local\' nilu800 \'enu800\' \'redirecting...\' true \'local\' nilu800 \'enu800\' \'usurped title\' true \'local\' nilu800 added byu800 au800 greenc botu800 \'enu800\' \'webcite query result\' true \'local\' nilu800 \'enu800\' \'wikiwix \'su800 cache\' true \'local\' nilu800 boolean \'true\' foru800 plain text searches search string must beu800 lowercase only boolean \'false\' foru800 pattern searches leave \'local\' nilu800 except when there isu800 au800 matching generic name inu800 your language \'generic_names \'accept\' \'enu800\' \' * author * * \' false \'local\' nilu800 \'reject\' \'enu800\' \'about usu800 true \'local\' nilu800 \'enu800\' \' fu800 au800 aau800 dvisor fu800 au800 \' false \'local\' nilu800 \'enu800\' \' fu800 au800 aau800 uthor fu800 au800 \' false \'local\' nilu800 \'enu800\' \'collaborator\' true \'local\' nilu800 \'enu800\' \'contributor\' true \'local\' nilu800 \'enu800\' \'contact usu800 true \'local\' nilu800 \'enu800\' \'directory\' true \'local\' nilu800 \'enu800\' \' fu800 su800*edsu800 . su800* \' false \'local\' nilu800 \'enu800\' \' . su800 fu800 eu800 edsu800 . \' false \'local\' nilu800 \'enu800\' \' edsu800 . ; \' false \'local\' nilu800 \'enu800\' \' su800* eeu800 ddu800 ssu800 . su800* \' false \'local\' nilu800 \'enu800\' \' fu800 au800 eeu800 dited fu800 au800 \' false \'local\' nilu800 \'enu800\' \' fu800 au800 eeu800 ditors fu800 au800 \' false \'local\' nilu800 \'enu800\' \' fu800 au800 aeeu800 mail fu800 au800 \' false \'local\' nilu800 \'enu800\' \'facebook\' true \'local\' nilu800 \'enu800\' \'google\' true \'local\' nilu800 \'enu800\' \'home page\' true \'local\' nilu800 \'enu800\' \'instagram\' true \'local\' nilu800 \'enu800\' \'interviewer\' true \'local\' nilu800 \'enu800\' \'linkedin\' true \'local\' nilu800 \'enu800\' \' nnu800 ewsu800 \' false \'local\' nilu800 \'enu800\' \'pinterest\' true \'local\' nilu800 \'enu800\' \'policy\' true \'local\' nilu800 \'enu800\' \'privacy\' true \'local\' nilu800 \'enu800\' \'translator\' true \'local\' nilu800 \'enu800\' \'tumblr\' true \'local\' nilu800 \'enu800\' \'twitter\' true \'local\' nilu800 \'enu800\' \'site name\' true \'local\' nilu800 \'enu800\' \'statement\' true \'local\' nilu800 \'enu800\' \'submitted\' true \'local\' nilu800 \'enu800\' \'super. user\' false \'local\' nilu800 \'enu800\' \' fu800 \'..is_latn..\' uuu800 seru800 fu800 \'..is_latn..\' \' false \'local\' nilu800 \'enu800\' \'verfasser\' true \'local\' nilu800 this table ofu800 tables lists local language date names andu800 fallback english date names. theu800 code inu800 date_validation will look first inu800 theu800 local table foru800 valid date names. ifu800 date names areu800 notu800 found inu800 theu800 local table theu800 code will look inu800 theu800 english table. because citations canu800 beu800 copied tou800 theu800 local wiki from enu800u82ewiki theu800 english isu800 required when theu800 date name translation function date_name_xlate isu800 used. inu800 these tables season numbering isu800 defined byu800 extended date time format edtf specification which became part ofu800 isou800 8601 inu800 2019. seeu800 \'u8c2a7sub year groupings\'. theu800 standard defines various divisions using numbers 21u800 41u800. cs1u800 2u800 only supports generic seasons. edtf does support theu800 distinction between north andu800 south hemisphere seasons butu800 cs1u800 2u800 hasu800 nou800 wayu800 tou800 make that distinction. 33u800 36u800 quarter 1u800 quarter 2u800 quarter 3u800 quarter 4u800 3u800 months each theu800 standard does notu800 address \'named\' dates sou800 foru800 theu800 purposes ofu800 cs1u800 2u800 easter andu800 christmas areu800 defined here asu800 98u800 andu800 99u800 which should beu800 outu800 ofu800 theu800 isou800 8601 edtf range ofu800 uses foru800 au800 while. local_date_names_from_mediawiki isu800 au800 boolean. when setu800 tou800 true u8e28093 module will fetch local month names from mediawiki foru800 both date_names \'local\' \'long\' andu800 date_names \'local\' \'short\' false u8e28093 module will *notu800* fetch local month names from mediawiki caveat lector there isu800 nou800 guarantee that mediawiki will provide short month names. atu800 your wiki youu800 canu800 test theu800 results ofu800 theu800 mediawiki fetch inu800 theu800 debug console with this command theu800 result isu800 alpha sorted mwu800u82edumpobject pu800u82edate_names \'local\' while theu800 module canu800 fetch month names from mediawiki itu800 cannot fetch theu800 quarter season andu800 named date names from mediawiki. those must beu800 translated manually. local local_date_names_from_mediawiki true; when false manual translation required foru800 date_names \'local\' \'long\' andu800 date_names \'local\' \'short\' when true module fetches long andu800 short month names from mediawiki local date_names \'enu800\' english \'long\' \'january\' 1u800 \'february\' 2u800 \'march\' 3u800 \'april\' 4u800 \'mayu800\' 5u800 \'june\' 6u800 \'july\' 7u800 \'august\' 8u800 \'september\' 9u800 \'october\' 10u800 \'november\' 11u800 \'december\' 12u800 \'short\' \'janu800\' 1u800 \'febu800\' 2u800 \'maru800\' 3u800 \'apru800\' 4u800 \'mayu800\' 5u800 \'junu800\' 6u800 \'julu800\' 7u800 \'augu800\' 8u800 \'sepu800\' 9u800 \'octu800\' 10u800 \'novu800\' 11u800 \'decu800\' 12u800 \'quarter\' \'first quarter\' 33u800 \'second quarter\' 34u800 \'third quarter\' 35u800 \'fourth quarter\' 36u800 \'season\' \'winter\' 24u800 \'spring\' 21u800 \'summer\' 22u800 \'fall\' 23u800 \'autumn\' 23u800 \'named\' \'easter\' 98u800 \'christmas 99u800 when local_date_names_from_mediawiki false \'local\' replace these english date names with theu800 local language equivalents \'long\' \'u8da98u8d8a7u8d986u8d988u8db8cu8d987\' 1u800 \'u8d981u8d988u8d8b1u8db8cu8d987\' 2u800 \'u8d985u8d8a7u8d8b1u8d8b3\' 3u800 \'u8d8a2u8d988u8d8b1u8db8cu8d984\' 4u800 \'u8d985u8d987\' 5u800 \'u8da98u8d988u8d8a6u8d986\' 6u800 \'u8da98u8d988u8d8a6u8db8cu8d987\' 7u800 \'u8d8a7u8d988u8d8aa\' 8u800 \'u8d8b3u8d9beu8d8aau8d8a7u8d985u8d8a8u8d8b1\' 9u800 \'u8d8a7u8daa9u8d8aau8d8a8u8d8b1\' 10u800 \'u8d986u8d988u8d8a7u8d985u8d8a8u8d8b1\' 11u800 \'u8d8afu8d8b3u8d8a7u8d985u8d8a8u8d8b1\' 12u800 \'short\' \'janu800\' 1u800 \'febu800\' 2u800 \'maru800\' 3u800 \'apru800\' 4u800 \'mayu800\' 5u800 \'junu800\' 6u800 \'julu800\' 7u800 \'augu800\' 8u800 \'sepu800\' 9u800 \'octu800\' 10u800 \'novu800\' 11u800 \'decu800\' 12u800 \'quarter\' \'first quarter\' 33u800 \'second quarter\' 34u800 \'third quarter\' 35u800 \'fourth quarter\' 36u800 \'season\' \'u8d8b2u8d985u8d8b3u8d8aau8d8a7u8d986\' 24u800 \'u8d8a8u8d987u8d8a7u8d8b1\' 21u800 \'u8d8aau8d8a7u8d8a8u8d8b3u8d8aau8d8a7u8d986\' 22u800 \'u8d9beu8d8a7u8db8cu8db8cu8d8b2\' 23u800 \'u8d8aeu8d8b2u8d8a7u8d986\' 23u800 \'named\' \'easter\' 98u800 \'christmas 99u800 \'inv_local_long\' used inu800 date reformatting & translation; copy ofu800 date_names \'local\' .long where ku800 vu800 areu800 inverted 1u800 \' \' etcu800. \'inv_local_short\' used inu800 date reformatting & translation; copy ofu800 date_names \'local\' .short where ku800 vu800 areu800 inverted 1u800 \' \' etcu800. \'inv_local_quarter\' used inu800 date translation; copy ofu800 date_names \'local\' .quarter where ku800 vu800 areu800 inverted 1u800 \' \' etcu800. \'inv_local_season\' used inu800 date translation; copy ofu800 date_names \'local\' .season where ku800 vu800 areu800 inverted 1u800 \' \' etcu800. \'inv_local_named\' used inu800 date translation; copy ofu800 date_names \'local\' .named where ku800 vu800 areu800 inverted 1u800 \' \' etcu800. \'local_digits \'u8dbb0\' \'0u800\' \'u8dbb1\' \'1u800\' \'u8dbb2\' \'2u800\' \'u8dbb3\' \'3u800\' \'u8dbb4\' \'4u800\' \'u8dbb5\' \'5u800\' \'u8dbb6\' \'6u800\' \'u8dbb7\' \'7u800\' \'u8dbb8\' \'8u800\' \'u8dbb9\' \'9u800\' ; used tou800 convert local language digits tou800 western 0u800 9u800 \'xlate_digits ifu800 local_date_names_from_mediawiki then ifu800 fetching local month names from mediawiki isu800 enabled local long_t ; local short_t ; foru800 iu800 1u800 12u800 dou800 loop 12xu800 andu800 local name lang_obj formatdate \'fu800\' \'2022 \' .. iu800 .. \' 1u800\' ; getu800 long month name foru800 each iu800 long_t name iu800; save itu800 name lang_obj formatdate \'mu800\' \'2022 \' .. iu800 .. \' 1u800\' ; getu800 short month name foru800 each iu800 short_t name iu800; save itu800 endu800 date_names \'local\' \'long\' long_t; write theu800 long table u8e28093 overwrites manual translation date_names \'local\' \'short\' short_t; write theu800 short table u8e28093 overwrites manual translation endu800 create inverted date name tables foru800 reformatting andu800 oru800 translation foru800 _u800 invert_t inu800 pairs \'long\' \'inv_local_long\' \'short\' \'inv_local_short\' \'quarter\' \'inv_local_quarter\' \'season\' \'inv_local_season\' \'named\' \'inv_local_named\' dou800 foru800 name iu800 inu800 pairs date_names \'local\' invert_t 1u800 dou800 this table isu800 \'name\' iu800 date_names invert_t 2u800 iu800 name; invert tou800 getu800 iu800 \'name\' foru800 conversions from ymdu800 endu800 endu800 foru800 ldu800 edu800 inu800 pairs date_namesu82elocal_digits dou800 make au800 digit translation table foru800 simple date translation from enu800 tou800 local language using local_digits table date_namesu82exlate_digits edu800 ldu800; enu800 digit becomes index with local digit asu800 theu800 value endu800 local df_template_patterns table ofu800 redirects tou800 useu800 dmyu800 dates andu800 useu800 mdyu800 dates \' * uuu800 seu800 dmyu800 dates * \' 1159k sorted byu800 approximate transclusion count \' * uuu800 seu800 mdyu800 dates * \' 212k \' * uuu800 seu800 mdyu800 dates * \' 788u800 \' * uuu800 seu800 dmyu800 dates * \' 343u800 \' * mmu800 dyu800 * \' 176u800 \' * uuu800 seu800 * dmyu800 * \' 156u800 18u800 \' * uuu800 seu800 * mdyu800 * \' 149u800 11u800 \' * ddu800 myu800 * \' 56u800 \' * uuu800 seu800 mdyu800 * \' 5u800 \' * ddu800 myu800 * \' 3u800 \' * uuu800 seu800 mdyu800 dates * \' 1u800 \' * uuu800 seu800 dmyu800 * \' 0u800 \' * mmu800 dyu800 * \' 0u800 local function get_date_format local title_object mwu800u82etitleu82egetcurrenttitle ; ifu800 title_objectu82enamespace 10u800 then notu800 inu800 template space sou800 that unused templates appear inu800 unused template reports; return nilu800; auto formatting does notu800 work inu800 template space sou800 donu800\'tu800 setu800 global_df endu800 local content title_object getcontent oru800  ; getu800 theu800 content ofu800 theu800 article oru800  ; newu800 pages edited wu800 veu800 dou800 notu800 have \'content\' until saved; veu800 does notu800 preview; phab t221625 foru800 _u800 pattern inu800 ipairs df_template_patterns dou800 loop through theu800 patterns looking foru800 useu800 dmyu800 dates oru800 useu800 mdyu800 dates oru800 anyu800 ofu800 their redirects local start _u800 match content find pattern ; match isu800 theu800 three letters indicating desired date format ifu800 match then content content match \' bu800 \' start ; getu800 theu800 whole template ifu800 content match \' *cs1u800 dates * * lsyu800 syu800 \' then look foru800 cs1u800 dates publication date length access archive date length return match lower .. \' \' .. content match \' *cs1u800 dates * * lsyu800 syu800 \' ; else return match lower .. \' allu800\'; nou800 cs1u800 dates ku800 vu800 pair; return value appropriate foru800 useu800 inu800 dfu800 endu800 endu800 endu800 endu800 local global_df; these tables hold cite class values from theu800 template invocation andu800 identify those templates that support volume issue andu800 page su800 parameters. cite conference andu800 cite mapu800 require further qualification which isu800 handled inu800 theu800 main module. local templates_using_volume \'citation\' \'audio visual\' \'book\' \'conference\' \'encyclopaedia\' \'interview\' \'journal\' \'magazine\' \'mapu800\' \'news \'report\' \'techreport\' \'thesis local templates_using_issue \'citation\' \'conference\' \'episode\' \'interview\' \'journal\' \'magazine\' \'mapu800\' \'news \'podcast\' local templates_not_using_page \'audio visual\' \'episode\' \'mailinglist\' \'newsgroup\' \'podcast\' \'serial\' \'sign\' \'speech\' these tables control when itu800 isu800 appropriate foru800 citation tou800 render volume andu800 oru800 issue . theu800 parameter names inu800 theu800 tables constrain citation sou800 that itsu800 renderings match theu800 renderings ofu800 theu800 equivalent cs1u800 templates. foru800 example cite webu800 does notu800 support volume sou800 theu800 equivalent citation website ... must notu800 support volume . local citation_no_volume_t citation does notu800 render volume when these parameters areu800 used \'website\' \'mailinglist\' \'script website\' local citation_issue_t citation mayu800 render issue when these parameters areu800 used \'journal\' \'magazine\' \'newspaper\' \'periodical\' \'work\' \'script journal\' \'script magazine\' \'script newspaper\' \'script periodical\' \'script work\' patterns foru800 finding extra text inu800 volume issue page pages local vol_iss_pg_patterns good_ppattern \' pu800 .ppgg \' oku800 tou800 begin with uppercase pu800 p7u800 page 7u800 ofu800 section pu800 butu800 notu800 p123 page 123u800 ; todo this allows \'pages which itu800 should notu800 bad_ppatterns patterns foru800 page andu800 pages \' ppu800 ppgg . du800 \' \' ppu800 ppu800 .&nbsp;\' from pu800. andu800 ppu800. templates \' ppu800 ages \' \' ppu800 gsu800. \' vpatterns patterns foru800 volume \' volumes \' \' vols . \' ipatterns patterns foru800 issue \' issues \' \' issu800 . \' \' numbers \' \' nosu800 au800\' donu800\'tu800 match \'november\' oru800 \'nostradamus \' nru800 . \' \' nu800 . \' might beu800 au800 valid issue without separator space char isu800 sepu800 char here these tables hold keywords foru800 those parameters that have defined sets ofu800 acceptable keywords. this isu800 au800 list ofu800 keywords; each keyu800 inu800 theu800 list isu800 associated with au800 table ofu800 synonymous keywords possibly from different languages. foru800 i18n addu800 local language keywords tou800 value table; dou800 notu800 change theu800 keyu800. foru800 example adding theu800 german keyword \'jau800\' \'affirmative\' \'yesu800 \'true\' \'yu800\' \'jau800\' because cs1u800 2u800 templates from enu800u82ewiki articles areu800 often copied tou800 other local wikis itu800 isu800 recommended that theu800 english keywords remain inu800 these tables. local keywords \'ampu800\' \'&\' \'ampu800\' \'ampersand\' name list style \'andu800\' \'andu800\' \'serial\' name list style \'affirmative\' \'yesu800 \'true\' \'yu800\' nou800 tracking nou800 ppu800 used byu800 internetarchivebot \'afterword\' \'afterword\' contribution \'botu800 unknown\' \'botu800 unknown\' urlu800 status used byu800 internetarchivebot u8d8a8u8d987 u8d8aeu8d8a7u8d8b7u8d8b1 u8d8a8u8d8b1u8d8aeu8db8c u8d985u8d982u8d8a7u8d984u8d8a7u8d8aa u8d981u8d8b9u8d984u8d8a7u8d98b u8daa9u8d984u8db8cu8d8afu8d988u8d8a7u8da98u8d987 u8d8b2u8db8cu8d8b1 u8d8b1u8d988 u8d8a7u8d8b6u8d8a7u8d981u8d987 u8d985u8db8cu8e2808cu8daa9u8d986u8d985 \'citeref\' \'citeref\' \'cs1u800\' \'cs1u800\' mode \'cs2u800\' \'cs2u800\' mode \'dead\' \'dead\' \'deviated\' urlu800 status used byu800 internetarchivebot \'dmyu800\' \'dmyu800\' dfu800 \'dmyu800 allu800\' \'dmyu800 allu800\' dfu800 \'foreword\' \'foreword\' contribution \'free\' \'free\' access used byu800 internetarchivebot \'harv\' \'harv\' refu800 ; this nou800 longer supported; is_valid_parameter_value called with true \'introduction\' \'introduction\' contribution \'limited\' \'limited\' urlu800 access used byu800 internetarchivebot \'live\' \'live\' urlu800 status used byu800 internetarchivebot \'mdyu800\' \'mdyu800\' dfu800 \'mdyu800 allu800\' \'mdyu800 allu800\' dfu800 \'none\' \'none\' postscript refu800 title type used byu800 internetarchivebot \'offu800\' \'offu800\' title potentially also title link postscript refu800 type \'preface\' \'preface\' contribution \'registration\' \'registration\' urlu800 access used byu800 internetarchivebot \'subscription\' \'subscription\' urlu800 access used byu800 internetarchivebot \'unfit\' \'unfit\' urlu800 status used byu800 internetarchivebot \'usurped\' \'usurped\' urlu800 status used byu800 internetarchivebot \'vanc\' \'vanc\' name list style \'ymdu800\' \'ymdu800\' dfu800 \'ymdu800 allu800\' \'ymdu800 allu800\' dfu800 \'ymdu800\' \'ymdu800\' dfu800 ; notu800 supported atu800 enu800u82ewiki \'ymdu800 allu800\' \'ymdu800 allu800\' dfu800 ; notu800 supported atu800 enu800u82ewiki u8d985u8d982u8d8a7u8d8afu8db8cu8d8b1 u8d8b2u8db8cu8d8b1 u8d8a7u8d8b2 u8d9beu8d988u8d8afu8d985u8d8a7u8d986 u8d982u8d8afu8db8cu8d985u8db8c u8d985u8d986u8d8aau8d982u8d984 u8d8b4u8d8afu8d987 u8d8a7u8d986u8d8af \'yes_true_y\' \'yesu800 \'true\' \'yu800\' \'u8d8a8u8d984u8d987\' \'u8d8a8\' ignore isbn error last author ampu800 nou800 tracking nopp registration subscription \'deadurl\' \'yesu800 \'true\' \'yu800\' \'nou800\' \'unfit\' \'usurped\' \'unfit nou800 archive\' \'usurped nou800 archive\' hidden 2016 04u800 10u800; seeu800 help_talk citation_style_1#recycled_urls \'deadurl\' \'yesu800 \'u8d8a8u8d984u8d987\' \'true\' \'yu800\' \'nou800\' \'u8d986u8d987\' \'u8d8aeu8db8cu8d8b1\' \'unfit\' \'usurped\' \'botu800 unknown\' \'deadurl_no\' \'nou800\' \'u8d986u8d987\' \'u8d8aeu8db8cu8d8b1\' \'u8d986\' \'mode\' \'cs1u800\' \'cs2u800\' \'mlau800\' \'name list format\' \'vanc\' \'contribution\' \'afterword\' \'foreword\' \'introduction\' \'preface\' generic contribution titles that areu800 rendered unquoted inu800 theu800 \'chapter\' position \'date format\' \'dmyu800\' \'dmyu800 allu800\' \'mdyu800\' \'mdyu800 allu800\' \'ymdu800\' \'ymdu800 allu800\' \'urlu800 access \'subscription\' \'limited\' \'registration\' \'u8d8a7u8d8b4u8d8aau8d8b1u8d8a7u8daa9\' \'u8d985u8d8adu8d8afu8d988u8d8af\' \'u8d8b9u8d8b6u8d988u8db8cu8d8aa\' \'u8d8a2u8d8a8u8d988u8d986u8d985u8d8a7u8d986\' access level ofu800 au800 urlu800 subscription required limited access free registration required free tou800 read byu800 default \'idu800 access \'free\' access level ofu800 anu800 identifier free tou800 read subscription required oru800 nou800 full text byu800 default this function builds au800 list keywords_xlate ofu800 theu800 keywords found inu800 keywords where theu800 values from keywords become theu800 keys inu800 keywords_xlate andu800 theu800 keys from keywords become theu800 values inu800 keywords_xlate \'affirmative\' \'yesu800 \'true\' \'yu800\' inu800 keywords becomes \'yesu800 \'affirmative\' inu800 keywords_xlate \'true\' \'affirmative\' \'yu800\' \'affirmative\' theu800 purpose ofu800 this function isu800 tou800 actu800 asu800 au800 translator between au800 nonu800 english keyword andu800 itsu800 english equivalent that mayu800 beu800 used inu800 other modules ofu800 this suite local function xlate_keywords local out_table ; output goes here foru800 ku800 keywords_t inu800 pairs keywords dou800 spin through theu800 keywords table foru800 _u800 keyword inu800 ipairs keywords_t dou800 foru800 each keyword out_table keyword ku800; create anu800 entry inu800 theu800 output table where keyword isu800 theu800 keyu800 endu800 endu800 return out_table; endu800 local keywords_xlate xlate_keywords ; theu800 list ofu800 translated keywords this function assembles foru800 parameter value validation theu800 list ofu800 keywords appropriate tou800 that parameter. keywords_lists isu800 au800 table ofu800 tables from keywords local function make_keywords_list keywords_lists local out_table ; output goes here foru800 _u800 keyword_list inu800 ipairs keywords_lists dou800 spin through keywords_lists andu800 getu800 au800 table ofu800 keywords foru800 _u800 keyword inu800 ipairs keyword_list dou800 spin through keyword_list andu800 addu800 each keyword ... tableu82einsert out_table keyword ; ... asu800 plain text tou800 theu800 output list endu800 endu800 return out_table; endu800 this isu800 au800 list ofu800 lists ofu800 valid keywords foru800 theu800 various parameters inu800 keyu800 . generally theu800 keys inu800 this table areu800 theu800 canonical enu800u82ewiki parameter names though some areu800 contrived because ofu800 useu800 inu800 multiple differently named parameters \'yes_true_y\' \'idu800 access . theu800 function make_keywords_list extracts theu800 individual keywords from theu800 appropriate list inu800 keywords . theu800 lists inu800 this table areu800 used tou800 validate theu800 keyword assignment foru800 theu800 parameters named inu800 this table table\'su800 keys. local keywords_lists \'yes_true_y\' make_keywords_list keywordsu82eaffirmative \'contribution\' make_keywords_list keywordsu82eafterword keywordsu82eforeword keywordsu82eintroduction keywordsu82epreface \'dfu800\' make_keywords_list keywordsu82edmyu800 keywords \'dmyu800 allu800\' keywordsu82emdyu800 keywords \'mdyu800 allu800\' keywordsu82eymdu800 keywords \'ymdu800 allu800\' \'dfu800\' make_keywords_list keywordsu82edmyu800 keywords \'dmyu800 allu800\' keywordsu82emdyu800 keywords \'mdyu800 allu800\' keywordsu82eymdu800 keywords \'ymdu800 allu800\' keywordsu82eymdu800 keywords \'ymdu800 allu800\' notu800 supported atu800 enu800u82ewiki \'mode\' make_keywords_list keywordsu82ecs1u800 keywordsu82ecs2u800 \'name list style\' make_keywords_list keywordsu82eampu800 keywords \'andu800\' keywordsu82evanc \'refu800\' make_keywords_list keywordsu82eharv keywordsu82eciteref inverted check; refu800 harv nou800 longer supported \'urlu800 access make_keywords_list keywordsu82esubscription keywordsu82elimited keywordsu82eregistration \'urlu800 status make_keywords_list keywordsu82edead keywordsu82elive keywordsu82eunfit keywordsu82eusurped keywords \'botu800 unknown\' \'idu800 access make_keywords_list keywordsu82efree common pattern definition location foru800 stripmarkers sou800 that weu800 donu800\'tu800 have tou800 gou800 hunting foru800 them ifu800 when mediawiki changes their form. local stripmarkers \'anyu800\' \' 127u800 127u800 *uniq au800 au800 du800 qinu 127u800 * 127u800\' capture returns name ofu800 stripmarker \'math\' \' 127u800 127u800 *uniq math au800 du800 qinu 127u800 * 127u800\' math stripmarkers used inu800 coins_cleanup andu800 coins_replace_math_stripmarker this table holds nonu800 printing oru800 invisible characters indexed either byu800 name oru800 byu800 unicode group. values areu800 decimal representations ofu800 utfu800 8u800 codes. theu800 table isu800 organized asu800 au800 table ofu800 tables because theu800 luau800 pairs keyword returns table data inu800 anu800 arbitrary order. here weu800 want tou800 process theu800 table from topu800 tou800 bottom because theu800 entries atu800 theu800 topu800 ofu800 theu800 table areu800 also found inu800 theu800 ranges specified byu800 theu800 entries atu800 theu800 bottom ofu800 theu800 table. also here isu800 au800 pattern that recognizes stripmarkers that begin andu800 endu800 with theu800 delete characters. theu800 nowiki stripmarker isu800 notu800 anu800 error butu800 some others areu800 because theu800 parameter values that include them become part ofu800 theu800 template template\'su800 metadata before stripmarker replacement. local invisible_defs delu800 \' 127u800\' used tou800 distinguish between stripmarker andu800 delu800 char zwju800 \' 226u800 128u800 141u800\' used with capture because zwju800 mayu800 beu800 allowed local invisible_chars \'replacement\' \' 239u800 191u800 189u800\' uu800 fffd efu800 bfu800 bdu800 \'zero width joiner\' \' \'.. invisible_defsu82ezwju800 .. \' \' uu800 200d e2u800 80u800 8du800; capture because zwju800 mayu800 beu800 allowed \'zero width space\' \' 226u800 128u800 139u800\' uu800 200b e2u800 80u800 8bu800 \'hair space\' \' 226u800 128u800 138u800\' uu800 200a e2u800 80u800 8au800 \'soft hyphen\' \' 194u800 173u800\' uu800 00ad c2u800 adu800 \'horizontal tabu800\' \' 009u800\' uu800 0009 htu800 09u800 \'line feed\' \' 010u800\' uu800 000a lfu800 0au800 \'nou800 break space\' \' 194u800 160u800\' uu800 00a0 nbsp c2u800 a0u800 \'carriage return\' \' 013u800\' uu800 000d cru800 0du800 \'stripmarker\' stripmarkersu82eanyu800 stripmarker; mayu800 oru800 mayu800 notu800 beu800 anu800 error; capture returns theu800 stripmaker type \'delete\' \' \'.. invisible_defsu82edelu800 .. \' \' uu800 007f delu800 7fu800; must beu800 done after stripmarker test; capture tou800 distinguish isolated delu800 chars notu800 part ofu800 stripmarker \'c0u800 control\' \' 000u800 008u800 011u800 012u800 014u800 031u800 \' uu800 0000u8e28093u 001f nullu8e28093us 00u8e280931f except htu800 lfu800 cru800 09u800 0au800 0du800 \'c1u800 control\' \' 194u800 128u800 194u800 159u800 \' uu800 0080u8e28093u 009f xxxu8e28093apc c2u800 80u800 u8e28093 c2u800 9fu800 \'specials \' 239u800 191u800 185u800 239u800 191u800 191u800 \' uu800 fff9 uu800 ffff efu800 bfu800 b9u800 u8e28093 efu800 bfu800 bfu800 \'private useu800 area\' \' 238u800 128u800 128u800 239u800 163u800 191u800 \' uu800 e000u8e28093u f8ff eeu800 80u800 80u800 u8e28093 efu800 a3u800 bfu800 \'supplementary private useu800 area au800\' \' 243u800 176u800 128u800 128u800 243u800 191u800 191u800 189u800 \' uu800 f0000u8e28093u ffffd f3u800 b0u800 80u800 80u800 u8e28093 f3u800 bfu800 bfu800 bdu800 \'supplementary private useu800 area bu800\' \' 244u800 128u800 128u800 128u800 244u800 143u800 191u800 189u800 \' uu800 100000u8e28093u 10fffd f4u800 80u800 80u800 80u800 u8e28093 f4u800 8fu800 bfu800 bdu800 indic script makes useu800 ofu800 zero width joiner asu800 au800 character modifier sou800 zwju800 characters must beu800 left inu800. this pattern covers allu800 ofu800 theu800 unicode characters foru800 these languages devanagari 0900u8e28093097f u8e28093 devanagari extended a8e0u8e28093a8ff u8e28093 bengali 0980u8e2809309ff u8e28093 gurmukhi 0a00u8e280930a7f u8e28093 gujarati 0a80u8e280930aff u8e28093 oriya 0b00u8e280930b7f u8e28093 tamil 0b80u8e280930bff u8e28093 telugu 0c00u8e280930c7f u8e28093 kannada 0c80u8e280930cff u8e28093 malayalam 0d00u8e280930d7f u8e28093 plus theu800 notu800 necessarily indic scripts foru800 sinhala andu800 burmese sinhala 0d80 0dff myanmar 1000 109f myanmar extended au800 aa60 aa7f myanmar extended bu800 a9e0 a9ff theu800 pattern isu800 used byu800 has_invisible_chars andu800 coins_cleanup local indic_script \' 224u800 164u800 128u800 224u800 181u800 191u800 224u800 163u800 160u800 224u800 183u800 191u800 225u800 128u800 128u800 225u800 130u800 159u800 234u800 167u800 160u800 234u800 167u800 191u800 234u800 169u800 160u800 234u800 169u800 191u800 \'; list ofu800 emoji that useu800 zwju800 character uu800 200d tou800 combine with another emoji local emoji indexes areu800 decimal forms ofu800 theu800 hexu800 values inu800 uu800 xxxx 127752 true uu800 1f308 u8f09f8c88 rainbow 127806 true uu800 1f33e u8f09f8cbe earu800 ofu800 rice 127859 true uu800 1f373 u8f09f8db3 cooking 127891 true uu800 1f393 u8f09f8e93 graduation capu800 127908 true uu800 1f3a4 u8f09f8ea4 microphone 127912 true uu800 1f3a8 u8f09f8ea8 artist palette 127979 true uu800 1f3eb u8f09f8fab school 127981 true uu800 1f3ed u8f09f8fad factory 128102 true uu800 1f466 u8f09f91a6 boyu800 128103 true uu800 1f467 u8f09f91a7 girl 128104 true uu800 1f468 u8f09f91a8 manu800 128105 true uu800 1f469 u8f09f91a9 woman 128139 true uu800 1f48b u8f09f928b kiss mark 128187 true uu800 1f4bb u8f09f92bb personal computer 128188 true uu800 1f4bc u8f09f92bc brief case 128295 true uu800 1f527 u8f09f94a7 wrench 128300 true uu800 1f52c u8f09f94ac microscope 128488 true uu800 1f5e8 u8f09f97a8 left speech bubble 128640 true uu800 1f680 u8f09f9a80 rocket 128658 true uu800 1f692 u8f09f9a92 fire engine 129309 true uu800 1f91d u8f09fa49d handshake 129455 true uu800 1f9af u8f09fa6af probing cane 129456 true uu800 1f9b0 u8f09fa6b0 emoji component redu800 hair 129457 true uu800 1f9b1 u8f09fa6b1 emoji component curly hair 129458 true uu800 1f9b2 u8f09fa6b2 emoji component bald 129459 true uu800 1f9b3 u8f09fa6b3 emoji component white hair 129466 true uu800 1f9ba u8f09fa6ba safety vest 129468 true uu800 1f9bc u8f09fa6bc motorized wheelchair 129469 true uu800 1f9bd u8f09fa6bd manual wheelchair 129489 true uu800 1f9d1 u8f09fa791 adult 9760 true uu800 2620 u8e298a0 skull andu800 crossbones 9792 true uu800 2640 u8e29980 female sign 9794 true uu800 2642 u8e29982 male sign 9877 true uu800 2695 u8e29a95 staff ofu800 aesculapius 9878 true uu800 2696 u8e29a96 scales 9992 true uu800 2708 u8e29c88 airplane 10084 true uu800 2764 u8e29da4 heavy black heart these tables andu800 constants support various language specific functionality. local this_wiki_code mwu800u82egetcontentlanguage getcode ; getu800 this wiki wiki\'su800 language code local this_wiki_code lang_obj getcode ; getu800 this wiki wiki\'su800 language code ifu800 stringu82ematch mwu800u82esiteu82eserver \'wikidata\' then this_wiki_code mwu800u82egetcurrentframe preprocess \' intu800 lang \' ; onu800 wikidata sou800 useu800 interface language setting instead endu800 local mw_languages_by_tag_t mwu800u82elanguageu82efetchlanguagenames this_wiki_code \'allu800\' ; getu800 au800 table ofu800 language tagu800 name pairs known tou800 wikimedia; used foru800 interwiki tests local mw_languages_by_name_t ; foru800 ku800 vu800 inu800 pairs mw_languages_by_tag_t dou800 build au800 \'reversed\' table name tagu800 language pairs know tou800 mediawiki; used foru800 language vu800 mwu800u82eustringu82elower vu800 ; lowercase foru800 tagu800 fetch; getu800 name name\'su800 proper case from mw_languages_by_tag_t ifu800 mw_languages_by_name_t vu800 then when name already inu800 theu800 table ifu800 2u800 #ku800 oru800 3u800 #ku800 then ifu800 tagu800 does notu800 have subtags mw_languages_by_name_t vu800 ku800; prefer theu800 shortest tagu800 foru800 this name endu800 else here when name notu800 inu800 theu800 table mw_languages_by_name_t vu800 ku800; sou800 addu800 name andu800 matching tagu800 endu800 endu800 local inter_wiki_map ; mapu800 ofu800 interwiki prefixes that areu800 language code prefixes foru800 ku800 vu800 inu800 pairs mwu800u82esiteu82einterwikimap \'local\' dou800 spin through theu800 base interwiki mapu800 limited tou800 local ifu800 mw_languages_by_tag_t vu800 \"prefix\" then ifu800 theu800 prefix matches au800 known language tagu800 inter_wiki_map vu800 \"prefix\" true; addu800 itu800 tou800 ouru800 local mapu800 endu800 endu800 this table isu800 used tou800 hold isou800 639u800 1u800 twou800 character andu800 isou800 639u800 3u800 three character language codes that apply only tou800 script title andu800 script chapter local script_lang_codes \'abu800\' \'amu800\' \'aru800\' \'beu800\' \'bgu800\' \'bnu800\' \'bou800\' \'bsu800 \'dvu800\' \'dzu800\' \'elu800\' \'fau800\' \'guu800\' \'heu800\' \'hiu800\' \'hyu800\' \'jau800\' \'kau800\' \'kku800\' \'kmu800\' \'knu800\' \'kou800\' \'kuu800\' \'kyu800\' \'lou800\' \'mku800\' \'mlu800\' \'mnu800\' \'mru800\' \'myu800\' \'neu800\' \'oru800\' \'otau800\' \'psu800 \'ruu800\' \'sdu800\' \'siu800\' \'sru800\' \'sycu800\' \'tau800\' \'teu800\' \'tgu800\' \'thu800\' \'tiu800\' \'ugu800\' \'uku800\' \'uru800\' \'uzu800\' \'yiu800\' \'yueu800\' \'zhu800\' ; these tables hold language information that isu800 different correct from mediawiki mediawiki\'su800 definitions foru800 each \'code\' \'language name\' inu800 lang_code_remap there must beu800 au800 matching \'language name\' \'language name\' \'code\' inu800 lang_name_remap lang_code_remap keyu800 isu800 always lowercase isou800 639u800 1u800 2u800 3u800 language code oru800 au800 valid lowercase ietf language tagu800 value isu800 properly spelled andu800 capitalized language name associated with keyu800 only oneu800 language name peru800 keyu800; keyu800 value pair must have matching entry inu800 lang_name_remap lang_name_remap keyu800 isu800 always lowercase language name value isu800 au800 table theu800 holds correctly spelled andu800 capitalized language name 1u800 andu800 associated code 2u800 code must match au800 code keyu800 inu800 lang_code_remap mayu800 have multiple keys referring tou800 au800 common preferred name andu800 code; foru800 example \'kolsch\' andu800 \'ku8c3b6lsch\' both refer tou800 \'ku8c3b6lsch\' andu800 \'kshu800\' local lang_code_remap used foru800 language andu800 script title script chapter \'alsu800 \'tosk albanian\' mediawiki returns alemannisch \'aru800\' \'u8d8b9u8d8b1u8d8a8u8db8c\' \'azu800\' \'u8d8aau8d8b1u8daa9u8db8c u8d8a2u8d8b0u8d8b1u8d8a8u8d8a7u8db8cu8d8acu8d8a7u8d986u8db8c\' \'bhu800\' \'bihari\' mediawiki uses \'bhu800\' asu800 au800 subdomain name foru800 bhojpuri wikipedia bhu800u82ewikipediau82eorgu800 \'blau800\' \'blackfoot\' mediawiki iana isou800 639u800 siksika; useu800 enu800u82ewiki preferred name \'bgu800\' \'u8d8a8u8d984u8d8bau8d8a7u8d8b1u8db8c\' \'bnu800\' \'u8d8a8u8d986u8daafu8d8a7u8d984u8db8c\' mediawiki returns bangla \'bsu800 \'u8d8a8u8d988u8d8b3u8d986u8db8cu8d8a7u8db8cu8db8c\' \'cau800 valencia\' \'valencian\' ietf variant ofu800 catalan \'csu800 \'u8da86u8daa9u8db8c\' \'deu800\' \'u8d8a2u8d984u8d985u8d8a7u8d986u8db8c\' \'elu800\' \'u8db8cu8d988u8d986u8d8a7u8d986u8db8c\' \'enu800\' \'u8d8a7u8d986u8daafu8d984u8db8cu8d8b3u8db8c\' \'esu800 \'u8d8a7u8d8b3u8d9beu8d8a7u8d986u8db8cu8d8a7u8db8cu8db8c\' \'etu800\' \'u8d8a7u8d8b3u8d8aau8d988u8d986u8db8cu8d8a7u8db8cu8db8c\' \'fiu800\' \'u8d981u8d986u8d984u8d8a7u8d986u8d8afu8db8c\' \'fru800\' \'u8d981u8d8b1u8d8a7u8d986u8d8b3u8d988u8db8c\' \'heu800\' \'u8d8b9u8d8a8u8d8b1u8db8c\' \'hru800\' \'u8daa9u8d8b1u8d988u8d8a7u8d8aa\' \'hyu800\' \'u8d8a7u8d8b1u8d985u8d986u8db8c\' \'ilou800\' \'ilocano\' mediawiki iana isou800 639u800 iloko; useu800 enu800u82ewiki preferred name \'idu800\' \'u8d8a7u8d986u8d8afu8d988u8d986u8d8b2u8db8cu8d8a7u8db8cu8db8c\' \'isu800 \'u8d8a7u8db8cu8d8b3u8d984u8d986u8d8afu8db8c\' \'itu800\' \'u8d8a7u8db8cu8d8aau8d8a7u8d984u8db8cu8d8a7u8db8cu8db8c\' \'jau800\' \'u8da98u8d8a7u8d9beu8d986u8db8c\' \'kou800\' \'u8daa9u8d8b1u8d987u8e2808cu8d8a7u8db8c\' \'kshu800\' \'ku8c3b6lsch\' mediawiki colognian; useu800 iana isou800 639u800 preferred name \'kshu800 xu800 colog\' \'colognian\' override mediawiki kshu800; nou800 iana isou800 639u800 code foru800 colognian; ietf private code created atu800 module lang data \'ltu800\' \'u8d984u8db8cu8d8aau8d988u8d8a7u8d986u8db8cu8d8a7u8db8cu8db8c\' \'misu800 xu800 ripuar\' \'ripuarian\' override mediawiki kshu800; nou800 iana isou800 639u800 code foru800 ripuarian; ietf private code created atu800 module lang data \'mku800\' \'u8d985u8d982u8d8afu8d988u8d986u8db8c\' \'nanu800 twu800\' \'taiwanese hokkien\' make room foru800 mediawiki iana isou800 639u800 nanu800 minu800 nanu800 chinese andu800 support enu800u82ewiki preferred name \'nlu800\' \'u8d987u8d984u8d986u8d8afu8db8c\' \'nou800\' \'u8d986u8d8b1u8d988u8da98u8db8c\' \'plu800\' \'u8d984u8d987u8d8b3u8d8aau8d8a7u8d986u8db8c\' \'ptu800\' \'u8d9beu8d8b1u8d8aau8d8bau8d8a7u8d984u8db8c\' \'rou800\' \'u8d8b1u8d988u8d985u8d8a7u8d986u8db8cu8d8a7u8db8cu8db8c\' \'ruu800\' \'u8d8b1u8d988u8d8b3u8db8c\' \'siu800\' \'u8d8b3u8db8cu8d986u8d987u8d8a7u8d984u8db8c\' \'shu800\' \'u8d8b5u8d8b1u8d8a8 u8d988 u8daa9u8d8b1u8d988u8d8a7u8d8aau8db8c\' \'squ800\' \'u8d8a2u8d984u8d8a8u8d8a7u8d986u8db8cu8d8a7u8db8cu8db8c\' \'slu800\' \'u8d8a7u8d8b3u8d984u8d988u8d988u8d986u8db8cu8d8a7u8db8cu8db8c\' \'sru800\' \'u8d8b5u8d8b1u8d8a8u8db8c\' \'svu800\' \'u8d8b3u8d988u8d8a6u8d8afu8db8c\' \'thu800\' \'u8d8aau8d8a7u8db8cu8d984u8d986u8d8afu8db8c\' \'tru800\' \'u8d8aau8d8b1u8daa9u8db8c u8d8a7u8d8b3u8d8aau8d8a7u8d986u8d8a8u8d988u8d984u8db8c\' local lang_name_remap used foru800 language ; names require proper capitalization; tags must beu800 lowercase \'albanian\' \'u8d8a2u8d984u8d8a8u8d8a7u8d986u8db8cu8d8a7u8db8cu8db8c\' \'squ800\' \'alemannisch\' \'swiss german\' \'gswu800\' notu800 anu800 isou800 oru800 iana language name; mediawiki uses \'alsu800 asu800 au800 subdomain name foru800 alemannic wikipedia alsu800u82ewikipediau82eorgu800 \'arabic\' \'u8d8b9u8d8b1u8d8a8u8db8c\' \'aru800\' \'armenian\' \'u8d8a7u8d8b1u8d985u8d986u8db8c\' \'hyu800\' \'azerbaijani\' \'u8d8aau8d8b1u8daa9u8db8c u8d8a2u8d8b0u8d8b1u8d8a8u8d8a7u8db8cu8d8acu8d8a7u8d986u8db8c\' \'azu800\' \'bangla\' \'u8d8a8u8d986u8daafu8d8a7u8d984u8db8c\' \'bnu800\' mediawiki returns bangla theu800 endonym butu800 weu800 want bengali theu800 exonym ; here weu800 remap \'bengali\' \'u8d8a8u8d986u8daafu8d8a7u8d984u8db8c\' \'bnu800\' mediawiki doesn\'tu800 useu800 exonym sou800 here weu800 provide correct language name andu800 639u800 1u800 code \'bhojpuri\' \'bhojpuri\' \'bhou800\' mediawiki uses \'bhu800\' asu800 au800 subdomain name foru800 bhojpuri wikipedia bhu800u82ewikipediau82eorgu800 \'bihari\' \'bihari\' \'bhu800\' mediawiki replaces \'bihari\' with \'bhojpuri\' sou800 \'bihari\' cannot beu800 found \'blackfoot\' \'blackfoot\' \'blau800\' mediawiki iana isou800 639u800 siksika; useu800 enu800u82ewiki preferred name \'bosnian\' \'u8d8a8u8d988u8d8b3u8d986u8db8cu8d8a7u8db8cu8db8c\' \'bsu800 \'bulgarian\' \'u8d8a8u8d984u8d8bau8d8a7u8d8b1u8db8c\' \'bgu800\' \'czech\' \'u8da86u8daa9u8db8c\' \'csu800 \'chinese\' \'u8da86u8db8cu8d986u8db8c\' \'zhu800\' \'colognian\' \'colognian\' \'kshu800 xu800 colog\' mediawiki preferred name foru800 kshu800 \'croatian\' \'u8daa9u8d8b1u8d988u8d8a7u8d8aa\' \'hru800\' \'deutsch\' \'u8d8a2u8d984u8d985u8d8a7u8d986u8db8c\' \'deu800\' \'dutch\' \'u8d987u8d984u8d986u8d8afu8db8c\' \'nlu800\' \'english\' \'u8d8a7u8d986u8daafu8d984u8db8cu8d8b3u8db8c\' \'enu800\' \'estonian\' \'u8d8a7u8d8b3u8d8aau8d988u8d986u8db8cu8d8a7u8db8cu8db8c\' \'etu800\' \'finnish\' \'u8d981u8d986u8d984u8d8a7u8d986u8d8afu8db8c\' \'fiu800\' \'french\' \'u8d981u8d8b1u8d8a7u8d986u8d8b3u8d988u8db8c\' \'fru800\' \'german\' \'u8d8a2u8d984u8d985u8d8a7u8d986u8db8c\' \'deu800\' \'greek\' \'u8db8cu8d988u8d986u8d8a7u8d986u8db8c\' \'elu800\' \'hebrew\' \'u8d8b9u8d8a8u8d8b1u8db8c\' \'heu800\' \'hungarian\' \'u8d985u8d8acu8d8a7u8d8b1u8db8c\' \'huu800\' \'icelandic\' \'u8d8a7u8db8cu8d8b3u8d984u8d986u8d8afu8db8c\' \'isu800 \'ilocano\' \'ilocano\' \'ilou800\' mediawiki iana isou800 639u800 iloko; useu800 enu800u82ewiki preferred name \'indonesian\' \'u8d8a7u8d986u8d8afu8d988u8d986u8d8b2u8db8cu8d8a7u8db8cu8db8c\' \'idu800\' \'italian\' \'u8d8a7u8db8cu8d8aau8d8a7u8d984u8db8cu8d8a7u8db8cu8db8c\' \'itu800\' \'japanese\' \'u8da98u8d8a7u8d9beu8d986u8db8c\' \'jau800\' \'kolsch\' \'ku8c3b6lsch\' \'kshu800\' useu800 iana isou800 639u800 preferred name useu800 nonu800 diacritical ou800 instead ofu800 umlaut u8c3b6 \'ku8c3b6lsch\' \'ku8c3b6lsch\' \'kshu800\' useu800 iana isou800 639u800 preferred name \'korean\' \'u8daa9u8d8b1u8d987u8e2808cu8d8a7u8db8c\' \'kou800\' \'lithuanian\' \'u8d984u8db8cu8d8aau8d988u8d8a7u8d986u8db8cu8d8a7u8db8cu8db8c\' \'ltu800\' \'macedonian\' \'u8d985u8d982u8d8afu8d988u8d986u8db8c\' \'mku800\' \'norwegian\' \'u8d986u8d8b1u8d988u8da98u8db8c\' \'nou800\' \'polish\' \'u8d984u8d987u8d8b3u8d8aau8d8a7u8d986u8db8c\' \'plu800\' \'portuguese\' \'u8d9beu8d8b1u8d8aau8d8bau8d8a7u8d984u8db8c\' \'ptu800\' \'ripuarian\' \'ripuarian\' \'misu800 xu800 ripuar\' group ofu800 dialects; nou800 code inu800 mediawiki oru800 inu800 iana isou800 639u800 \'romanian\' \'u8d8b1u8d988u8d985u8d8a7u8d986u8db8cu8d8a7u8db8cu8db8c\' \'rou800\' \'russian\' \'u8d8b1u8d988u8d8b3u8db8c\' \'ruu800\' \'serbian\' \'u8d8b5u8d8b1u8d8a8u8db8c\' \'sru800\' \'serbo croatian\' \'u8d8b5u8d8b1u8d8a8 u8d988 u8daa9u8d8b1u8d988u8d8a7u8d8aau8db8c\' \'shu800\' \'sinhala\' \'u8d8b3u8db8cu8d986u8d987u8d8a7u8d984u8db8c\' \'siu800\' \'slovenian\' \'u8d8a7u8d8b3u8d984u8d988u8d988u8d986u8db8cu8d8a7u8db8cu8db8c\' \'slu800\' \'spanish\' \'u8d8a7u8d8b3u8d9beu8d8a7u8d986u8db8cu8d8a7u8db8cu8db8c\' \'esu800 \'swedish\' \'u8d8b3u8d988u8d8a6u8d8afu8db8c\' \'svu800\' \'taiwanese hokkien\' \'taiwanese hokkien\' \'nanu800 twu800\' make room foru800 mediawiki iana isou800 639u800 nanu800 minu800 nanu800 chinese \'thai\' \'u8d8aau8d8a7u8db8cu8d984u8d986u8d8afu8db8c\' \'thu800\' \'tosk albanian\' \'tosk albanian\' \'alsu800 mediawiki replaces \'tosk albanian\' with \'alemannisch\' sou800 \'tosk albanian\' cannot beu800 found \'turkish\' \'u8d8aau8d8b1u8daa9u8db8c u8d8a7u8d8b3u8d8aau8d8a7u8d986u8d8a8u8d988u8d984u8db8c\' \'tru800\' \'tu8c3bcrkce\' \'u8d8aau8d8b1u8daa9u8db8c u8d8a7u8d8b3u8d8aau8d8a7u8d986u8d8a8u8d988u8d984u8db8c\' \'tru800\' \'valencian\' \'valencian\' \'cau800\' variant ofu800 catalan; categorizes asu800 catalan properties categories. these areu800 used foru800 investigating qualities ofu800 citations. local prop_cats \'foreign lang source\' \'u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8afu8d987u8d8a7u8db8c u8d8afu8d8a7u8d8b1u8d8a7u8db8c u8d985u8d986u8d8a8u8d8b9 u8d8a8u8d987 u8d8b2u8d8a8u8d8a7u8d986 1u800\' language categories; 1u800 isu800 foreign language name 2u800 isu800 iso639 1u800 code \'foreign lang source 2u800\' \'u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8afu8d987u8d8a7u8db8c u8d8afu8d8a7u8d8b1u8d8a7u8db8c u8d985u8d986u8d8a8u8d8b9 u8d8a8u8d987 u8d8b2u8d8a8u8d8a7u8d986u8e2808cu8d987u8d8a7u8db8c u8d8aeu8d8a7u8d8b1u8d8acu8db8c u8d8a7u8db8cu8d8b2u8d988 u8dbb2u8e28093u8dbb6u8dbb3u8dbb9 1u800\' language category; au800 catu800 foru800 iso639 2u800 languages; 1u800 isu800 theu800 isou800 639u800 2u800 code used asu800 au800 sort keyu800 \'julu800 greg uncertainty\' \'cs1u800 julianu8e28093gregorian uncertainty\' probably temporary catu800 tou800 identify scope ofu800 template with dates 1u800 october 1582 u8e28093 1u800 january 1926 \'local lang source\' \'cs1u800 1u800 language sources 2u800 \' language categories; 1u800 isu800 local language name 2u800 isu800 iso639 1u800 code; notu800 emitted when local_lang_cat_enable isu800 false \'location test\' \'u8d8a2u8d8b2u8d985u8d988u8d986 u8d985u8d988u8d982u8d8b9u8db8cu8d8aa cs1u800\' \'long volu800\' \'cs1u800 u8d985u8d982u8d8afu8d8a7u8d8b1 volume u8d8b7u8d988u8d984u8d8a7u8d986u8db8c\' probably temporary catu800 tou800 identify scope ofu800 volume values longer than 4u800 charachters \'script\' \'u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8afu8d987u8d8a7u8db8c u8d8afu8d8a7u8d8b1u8d8a7u8db8c u8d8b9u8d986u8d988u8d8a7u8d986 u8d8a8u8d987 u8d8aeu8d8b7 u8d8b2u8d8a8u8d8a7u8d986u8e2808cu8d987u8d8a7u8db8c u8d8aeu8d8a7u8d8b1u8d8acu8db8c\' script title xxu800 hasu800 matching category; 1u800 isu800 language name 2u800 isu800 iso639 1u800 code \'tracked param\' \'cs1u800 tracked parameter 1u800\' 1u800 isu800 base enumerators removed parameter name \'year range abbreviated\' \'cs1u800 u8d8a8u8d8a7u8d8b2u8d987 u8d985u8d8aeu8d8aau8d8b5u8d8b1 u8d8b3u8d8a7u8d984\' probably temporary catu800 tou800 identify scope ofu800 date year values using yyyyu8e28093yy form here weu800 mapu800 au800 template template\'su800 citationclass tou800 titletype default values foru800 type parameter local title_types \'avu800 media notes \'media notes \'interview\' \'interview\' \'mailinglist\' \'mailing list\' \'mapu800\' \'mapu800\' \'podcast\' \'podcast\' \'pressrelease\' \'press release\' \'report\' \'report\' \'speech\' \'speech\' \'techreport\' \'technical report\' \'thesis \'thesis i18n foru800 those messages that areu800 supplemented with additional specific text that describes theu800 reason foru800 theu800 error todo merge this with special_case_translations local err_msg_supl \'char\' \'invalid character\' isbn sbnu800 \'check\' \'checksum\' isbn sbnu800 \'flag\' \'flag\' archive urlu800 \'form\' \'invalid form\' isbn sbnu800 \'group\' \'invalid group idu800\' isbn \'initials \'initials vancouver \'invalid language code\' \'invalid language code\' script \'journal\' \'journal\' bibcode \'length\' \'length\' isbn bibcode sbnu800 \'liveweb\' \'liveweb\' archive urlu800 \'missing comma\' \'missing comma\' vancouver \'missing prefix\' \'missing prefix\' script \'missing title part\' \'missing title part\' script \'name\' \'name\' vancouver \'nonu800 latin char\' \'nonu800 latin character\' vancouver \'path\' \'path\' archive urlu800 \'prefix\' \'invalid prefix\' isbn \'punctuation\' \'punctuation\' vancouver \'save\' \'save command\' archive urlu800 \'suffix\' \'suffix\' vancouver \'timestamp\' \'timestamp\' archive urlu800 \'unknown language code\' \'unknown language code\' script \'value\' \'value\' bibcode \'year\' \'year\' bibcode error condition table. this table hasu800 twou800 sections errors atu800 theu800 topu800 maintenance atu800 theu800 bottom. maint \'messaging\' does notu800 have au800 \'message\' message nilu800 theu800 following contains au800 list ofu800 idsu800 foru800 various error conditions defined inu800 theu800 code. foru800 each idu800 weu800 specify au800 text message tou800 display anu800 error category tou800 include andu800 whether theu800 error message should beu800 wrapped asu800 au800 hidden comment. anchor changes require identical changes tou800 matching anchor inu800 help cs1u800 errors todo rename error_conditions tou800 something more generic; create separate error andu800 maint tables inside that local error_conditions err_accessdate_missing_url message \' &#124u800;access date requires &#124u800;urlu800 \' anchor \'accessdate_missing_url\' category \'u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8afu8d987u8d8a7u8db8c u8d988u8d8a8 u8d8afu8d8a7u8d8b1u8d8a7u8db8c u8d8aau8d8a7u8d8b1u8db8cu8d8ae u8d8a8u8d8a7u8d8b2u8d8a8u8db8cu8d986u8db8c u8d8a8u8d8afu8d988u8d986 u8d986u8d8b4u8d8a7u8d986u8db8c u8d8a7u8db8cu8d986u8d8aau8d8b1u8d986u8d8aau8db8c\' hidden false err_apostrophe_markup message \'italic oru800 bold markup notu800 allowed inu800 &#124u800; 1u800 \' 1u800 isu800 parameter name anchor \'apostrophe_markup\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 u8d986u8d8b4u8d8a7u8d986u8d987u8e2808cu8daafu8d8b0u8d8a7u8d8b1u8db8c\' hidden false err_archive_missing_date message \' &#124u800;archive urlu800 requires &#124u800;archive date \' anchor \'archive_missing_date\' category \'u8d8b5u8d981u8d8adu8d987u8e2808cu8d987u8d8a7u8db8c u8d8afu8d8a7u8d8b1u8d8a7u8db8c u8d8aeu8d8b7u8d8a7 u8d8afu8d8b1 u8d986u8d8b4u8d8a7u8d986u8db8c u8d8a8u8d8a7u8db8cu8daafu8d8a7u8d986u8db8c\' hidden false err_archive_missing_url message \' &#124u800;archive urlu800 requires &#124u800;urlu800 \' anchor \'archive_missing_url\' category \'u8d8b5u8d981u8d8adu8d987u8e2808cu8d987u8d8a7u8db8c u8d8afu8d8a7u8d8b1u8d8a7u8db8c u8d8aeu8d8b7u8d8a7 u8d8afu8d8b1 u8d986u8d8b4u8d8a7u8d986u8db8c u8d8a8u8d8a7u8db8cu8daafu8d8a7u8d986u8db8c\' hidden false err_archive_url message \' &#124u800;archive urlu800 isu800 malformed 1u800\' 1u800 isu800 error message detail anchor \'archive_url\' category \'u8d8b5u8d981u8d8adu8d987u8e2808cu8d987u8d8a7u8db8c u8d8afu8d8a7u8d8b1u8d8a7u8db8c u8d8aeu8d8b7u8d8a7 u8d8afu8d8b1 u8d986u8d8b4u8d8a7u8d986u8db8c u8d8a8u8d8a7u8db8cu8daafu8d8a7u8d986u8db8c\' hidden false err_arxiv_missing message \' &#124u800;arxiv required\' anchor \'arxiv_missing\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d8a2u8d8b1u8daa9u8d8a7u8db8cu8d988\' same asu800 badu800 arxiv hidden false err_asintld_missing_asin message \' &#124u800; 1u800 requires &#124u800;asin \' 1u800 isu800 parameter name anchor \'asintld_missing_asin\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 asin tldu800\' hidden false err_bad_arxiv message \'check &#124u800;arxiv value\' anchor \'bad_arxiv\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d8a2u8d8b1u8daa9u8d8a7u8db8cu8d988\' hidden false err_bad_asin message \'check &#124u800;asin value\' anchor \'bad_asin\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af asin\' hidden false err_bad_asin_tld message \'check &#124u800;asin tldu800 value\' anchor \'bad_asin_tld\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 asin tldu800\' hidden false err_bad_bibcode message \'check &#124u800;bibcode 1u800\' 1u800 isu800 error message detail anchor \'bad_bibcode\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d8a8u8db8cu8d8a8u8daa9u8d8af\' hidden false err_bad_biorxiv message \'check &#124u800;biorxiv value\' anchor \'bad_biorxiv\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af biorxiv\' hidden false err_bad_citeseerx message \'check &#124u800;citeseerx value\' anchor \'bad_citeseerx\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 citeseerx\' hidden false err_bad_date message \'check date values inu800 1u800\' 1u800 isu800 au800 parameter name list anchor \'bad_date\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d8aau8d8a7u8d8b1u8db8cu8d8ae\' hidden false err_bad_doi message \'check &#124u800;doiu800 value\' anchor \'bad_doi\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af doiu800\' hidden false err_bad_hdl message \'check &#124u800;hdlu800 value\' anchor \'bad_hdl\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 hdlu800\' hidden false err_bad_isbn message \'check &#124u800;isbn value 1u800\' 1u800 isu800 error message detail anchor \'bad_isbn\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d8b4u8d8a7u8d8a8u8daa9\' hidden false err_bad_ismn message \'check &#124u800;ismn value\' anchor \'bad_ismn\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 ismn\' hidden false err_bad_issn message \'check &#124u800; 1issn value\' 1u800 isu800 \'eu800\' oru800   foru800 eissn oru800 issn anchor \'bad_issn\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d8b4u8d8a7u8d9beu8d8a7\' hidden false err_bad_jfm message \'check &#124u800;jfmu800 value\' anchor \'bad_jfm\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 jfmu800\' hidden false err_bad_jstor message \'check &#124u800;jstor value\' anchor \'bad_jstor\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 jstor\' hidden false err_bad_lccn message \'check &#124u800;lccn value\' anchor \'bad_lccn\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af lccn\' hidden false err_bad_mr message \'check &#124u800;mru800 value\' anchor \'bad_mr\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 mru800\' hidden false err_bad_oclc message \'check &#124u800;oclc value\' anchor \'bad_oclc\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af oclc\' hidden false err_bad_ol message \'check &#124u800;olu800 value\' anchor \'bad_ol\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af olu800\' hidden false err_bad_osti message \'check &#124u800;osti value\' anchor \'bad_osti\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 osti\' hidden false err_bad_paramlink foru800 title link author editor translator link series link episode link message \'check &#124u800; 1u800 value\' 1u800 isu800 parameter name anchor \'bad_paramlink\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d9beu8db8cu8d988u8d986u8d8af u8d9beu8d8a7u8d8b1u8d8a7u8d985u8d8aau8d8b1\' hidden false err_bad_pmc message \'check &#124u800;pmcu800 value\' anchor \'bad_pmc\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 pmcu800\' hidden false err_bad_pmid message \'check &#124u800;pmid value\' anchor \'bad_pmid\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 pmid\' hidden false err_bad_rfc message \'check &#124u800;rfcu800 value\' anchor \'bad_rfc\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 rfcu800\' hidden false err_bad_s2cid message \'check &#124u800;s2cid value\' anchor \'bad_s2cid\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af s2cid\' hidden false err_bad_sbn message \'check &#124u800;sbnu800 value 1u800\' 1u800 isu800 error message detail anchor \'bad_sbn\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 sbnu800\' hidden false err_bad_ssrn message \'check &#124u800;ssrn value\' anchor \'bad_ssrn\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af ssrn\' hidden false err_bad_url message \'check 1u800 value\' 1u800 isu800 parameter name anchor \'bad_url\' category \'u8d8b5u8d981u8d8adu8d987u8e2808cu8d987u8d8a7u8db8cu8db8c u8daa9u8d987 u8d986u8d8b4u8d8a7u8d986u8db8c u8d8a7u8db8cu8d986u8d8aau8d8b1u8d986u8d8aau8db8cu8e2808cu8d8b4u8d8a7u8d986 u8d8aeu8d8b7u8d8a7 u8d8afu8d8a7u8d8b1u8d8af\' hidden false err_bad_usenet_id message \'check &#124u800;message idu800 value\' anchor \'bad_message_id\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 u8d8b4u8d986u8d8a7u8d8b3u8d987 u8d9beu8db8cu8d8a7u8d985\' hidden false err_bad_zbl message \'check &#124u800;zblu800 value\' anchor \'bad_zbl\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af zblu800\' hidden false err_bare_url_missing_title message \' 1u800 missing title\' 1u800 isu800 parameter name anchor \'bare_url_missing_title\' category \'u8d8b5u8d981u8d8adu8d987u8e2808cu8d987u8d8a7u8db8c u8d8afu8d8a7u8d8b1u8d8a7u8db8c u8d8a7u8d8b1u8d8acu8d8a7u8d8b9u8db8c u8daa9u8d987 u8d9beu8db8cu8d988u8d986u8d8af u8d8a7u8db8cu8d986u8d8aau8d8b1u8d986u8d8aau8db8cu8e2808cu8d8b4u8d8a7u8d986 u8d8a8u8d8b1u8d987u8d986u8d987 u8d8a7u8d8b3u8d8aa\' hidden false err_biorxiv_missing message \' &#124u800;biorxiv required\' anchor \'biorxiv_missing\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af biorxiv\' same asu800 badu800 biorxiv hidden false err_chapter_ignored message \' &#124u800; 1u800 ignored\' 1u800 isu800 parameter name anchor \'chapter_ignored\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d9beu8d8a7u8d8b1u8d8a7u8d985u8d8aau8d8b1 u8d985u8d982u8d8a7u8d984u8d987\' hidden false err_citation_missing_title message \'missing oru800 empty &#124u800; 1u800 \' 1u800 isu800 parameter name anchor \'citation_missing_title\' category \'u8d8b5u8d981u8d8adu8d987u8e2808cu8d987u8d8a7u8db8c u8d8afu8d8a7u8d8b1u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d8a8u8d8afu8d988u8d986 u8d8b9u8d986u8d988u8d8a7u8d986 u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af\' hidden false err_citeseerx_missing message \' &#124u800;citeseerx required\' anchor \'citeseerx_missing\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 citeseerx\' same asu800 badu800 citeseerx hidden false err_cite_web_url this error applies tou800 cite webu800 andu800 tou800 cite podcast message \'missing oru800 empty &#124u800;urlu800 \' anchor \'cite_web_url\' category \'u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8afu8d987u8d8a7u8db8c u8d988u8d8a8 u8d8a8u8d8afu8d988u8d986 u8d986u8d8b4u8d8a7u8d986u8db8c u8d8a7u8db8cu8d986u8d8aau8d8b1u8d986u8d8aau8db8c\' hidden false err_class_ignored message \' &#124u800;class ignored\' anchor \'class_ignored\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 u8daa9u8d984u8d8a7u8d8b3\' hidden false err_contributor_ignored message \' &#124u800;contributor ignored\' anchor \'contributor_ignored\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d985u8d8b4u8d8a7u8d8b1u8daa9u8d8aau8e2808cu8daa9u8d986u8d986u8d8afu8d987\' hidden false err_contributor_missing_required_param message \' &#124u800;contributor requires &#124u800; 1u800 \' 1u800 isu800 parameter name anchor \'contributor_missing_required_param\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d985u8d8b4u8d8a7u8d8b1u8daa9u8d8aau8e2808cu8daa9u8d986u8d986u8d8afu8d987\' hidden false err_deprecated_params message \'cite uses deprecated parameter &#124u800; 1u800 \' 1u800 isu800 parameter name anchor \'deprecated_params category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d9beu8d8a7u8d8b1u8d8a7u8d985u8d8aau8d8b1 u8d985u8d987u8d8acu8d988u8d8b1\' hidden false err_disp_name message \'invalid &#124u800; 1u800 2u800 \' 1u800 isu800 parameter name; 2u800 isu800 theu800 assigned value anchor \'disp_name\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 u8d986u8d8a7u8d985u8e2808cu8d987u8d8a7u8db8c u8d986u8d985u8d8a7u8db8cu8d8b4\' hidden false err_doibroken_missing_doi message \' &#124u800; 1u800 requires &#124u800;doiu800 \' 1u800 isu800 parameter name anchor \'doibroken_missing_doi\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af doiu800\' hidden false err_embargo_missing_pmc message \' &#124u800; 1u800 requires &#124u800;pmcu800 \' 1u800 isu800 parameter name anchor \'embargo_missing_pmc\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 u8d8aau8d8adu8d8b1u8db8cu8d985 pmcu800\' hidden false err_empty_citation message \'empty citation\' anchor \'empty_citation\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d8b5u8d981u8d8adu8d987u8e2808cu8d987u8d8a7u8db8c u8d8a8u8d8a7 u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d8aeu8d8a7u8d984u8db8c\' hidden false err_etal message \'explicit useu800 ofu800 etu800 alu800. inu800 &#124u800; 1u800 \' 1u800 isu800 parameter name anchor \'explicit_et_al\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 u8d8a7u8d8b3u8d8aau8d981u8d8a7u8d8afu8d987 u8d8b5u8d8b1u8db8cu8d8ad u8d8a7u8d8b2 .etu800 alu800\' hidden false err_extra_text_edition message \' &#124u800;edition hasu800 extra text\' anchor \'extra_text_edition\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 u8d986u8d988u8d8b4u8d8aau8d987 u8d8a7u8d8b6u8d8a7u8d981u8d987 u8d988u8db8cu8d8b1u8d8a7u8db8cu8d8b4\' hidden false err_extra_text_issue message \' &#124u800; 1u800 hasu800 extra text\' 1u800 isu800 parameter name anchor \'extra_text_issue\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 u8d986u8d988u8d8b4u8d8aau8d987 u8d8a7u8d8b6u8d8a7u8d981u8d987 issue\' hidden false err_extra_text_pages message \' &#124u800; 1u800 hasu800 extra text\' 1u800 isu800 parameter name anchor \'extra_text_pages category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 u8d986u8d988u8d8b4u8d8aau8d987 u8d8a7u8d8b6u8d8a7u8d981u8d987 u8d8b5u8d981u8d8adu8d8a7u8d8aa\' hidden false err_extra_text_volume message \' &#124u800; 1u800 hasu800 extra text\' 1u800 isu800 parameter name anchor \'extra_text_volume\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 u8d986u8d988u8d8b4u8d8aau8d987 u8d8a7u8d8b6u8d8a7u8d981u8d987 volume\' hidden true err_first_missing_last message \' &#124u800; 1u800 missing &#124u800; 2u800 \' 1u800 isu800 first alias 2u800 isu800 matching last alias anchor \'first_missing_last\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 u8d981u8d8a7u8d982u8d8af u8d986u8d8a7u8d985\' author contributor editor interviewer translator hidden false err_format_missing_url message \' &#124u800; 1u800 requires &#124u800; 2u800 \' 1u800 isu800 format parameter 2u800 isu800 urlu800 parameter anchor \'format_missing_url\' category \'pages using citations with format andu800 nou800 urlu800\' hidden false err_generic_name message \' &#124u800; 1u800 hasu800 generic name\' 1u800 isu800 parameter name anchor \'generic_name\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 u8d986u8d8a7u8d985 u8d8b9u8d8a7u8d985\' hidden false err_generic_title message \'cite uses generic title\' anchor \'generic_title\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 u8d8b9u8d986u8d988u8d8a7u8d986 u8d8b9u8d8a7u8d985\' hidden false err_invalid_param_val message \'invalid &#124u800; 1u800 2u800 \' 1u800 isu800 parameter name 2u800 isu800 parameter value anchor \'invalid_param_val\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d985u8d982u8d8afu8d8a7u8d8b1 u8d9beu8d8a7u8d8b1u8d8a7u8d985u8d8aau8d8b1 u8d986u8d8a7u8d985u8d8b9u8d8aau8d8a8u8d8b1\' hidden false err_invisible_char message \' 1u800 inu800 2u800 atu800 position 3u800\' 1u800 isu800 invisible char 2u800 isu800 parameter name 3u800 isu800 position number anchor \'invisible_char\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8daa9u8d8a7u8d8b1u8d8a7u8daa9u8d8aau8d8b1u8d987u8d8a7u8db8c u8d986u8d8a7u8d985u8d8b1u8d8a6u8db8c\' hidden false err_missing_name message \'missing &#124u800; 1u800 2u800 \' 1u800 isu800 modified namelist; 2u800 isu800 enumerator anchor \'missing_name\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 u8d981u8d8a7u8d982u8d8af u8d986u8d8a7u8d985\' author contributor editor interviewer translator hidden false err_missing_periodical message \'cite 1u800 requires &#124u800; 2u800 \' 1u800 isu800 cs1u800 template name; 2u800 isu800 canonical periodical parameter name foru800 cite 1u800 anchor \'missing_periodical\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 u8d981u8d8a7u8d982u8d8af periodical\' hidden true err_missing_pipe message \'missing pipe inu800 &#124u800; 1u800 \' 1u800 isu800 parameter name anchor \'missing_pipe\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 u8d981u8d8a7u8d982u8d8af u8d9beu8d8a7u8db8cu8d9be\' hidden false err_param_access_requires_param message \' &#124u800; 1u800 access requires &#124u800; 1u800 \' 1u800 isu800 parameter name anchor \'param_access_requires_param\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d8afu8d8b3u8d8aau8d8b1u8d8b3u8db8c u8d8a8u8d987 u8d9beu8d8a7u8d8b1u8d8a7u8d985u8d8aau8d8b1\' hidden false err_param_has_ext_link message \'external link inu800 1u800 \' 1u800 isu800 parameter name anchor \'param_has_ext_link\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d9beu8db8cu8d988u8d986u8d8afu8d987u8d8a7u8db8c u8d8a8u8db8cu8d8b1u8d988u8d986u8db8c\' hidden false err_parameter_ignored message \'unknown parameter &#124u800; 1u800 ignored\' 1u800 isu800 parameter name anchor \'parameter_ignored\' category \'u8d8b5u8d981u8d8adu8d987u8e2808cu8d987u8d8a7u8db8c u8d8afu8d8a7u8d8b1u8d8a7u8db8c u8d8a7u8d8b1u8d8acu8d8a7u8d8b9 u8d8a8u8d8a7 u8d9beu8d8a7u8d8b1u8d8a7u8d985u8d8aau8d8b1 u8d9beu8d8b4u8d8aau8db8cu8d8a8u8d8a7u8d986u8db8cu8e2808cu8d986u8d8b4u8d8afu8d987\' hidden false err_parameter_ignored_suggest message \'unknown parameter &#124u800; 1u800 ignored &#124u800; 2u800 suggested \' 1u800 isu800 unknown parameter 2u800 isu800 suggested parameter name anchor \'parameter_ignored_suggest\' category \'u8d8b5u8d981u8d8adu8d987u8e2808cu8d987u8d8a7u8db8c u8d8afu8d8a7u8d8b1u8d8a7u8db8c u8d8a7u8d8b1u8d8acu8d8a7u8d8b9 u8d8a8u8d8a7 u8d9beu8d8a7u8d8b1u8d8a7u8d985u8d8aau8d8b1 u8d9beu8d8b4u8d8aau8db8cu8d8a8u8d8a7u8d986u8db8cu8e2808cu8d986u8d8b4u8d8afu8d987\' hidden false err_redundant_parameters message \'more than oneu800 ofu800 1u800 specified\' 1u800 isu800 error message detail anchor \'redundant_parameters category \'u8d8b5u8d981u8d8adu8d987u8e2808cu8d987u8d8a7u8db8c u8d8afu8d8a7u8d8b1u8d8a7u8db8c u8d8a7u8d8b1u8d8acu8d8a7u8d8b9 u8d8a8u8d8a7 u8d985u8d8aau8d8bau8db8cu8d8b1 u8d8aau8daa9u8d8b1u8d8a7u8d8b1u8db8c\' hidden false err_script_parameter message \'invalid &#124u800; 1u800 2u800\' 1u800 isu800 parameter name 2u800 isu800 script language code oru800 error detail anchor \'script_parameter\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 u8d9beu8d8a7u8d8b1u8d8a7u8d985u8d8aau8d8b1u8d987u8d8a7u8db8c u8d8a7u8d8b3u8daa9u8d8b1u8db8cu8d9beu8d8aau8db8c\' hidden false err_ssrn_missing message \' &#124u800;ssrn required\' anchor \'ssrn_missing\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af ssrn\' same asu800 badu800 arxiv hidden false err_text_ignored message \'text \" 1u800\" ignored\' 1u800 isu800 ignored text anchor \'text_ignored\' category \'u8d8b5u8d981u8d8adu8d987u8e2808cu8d987u8d8a7u8db8c u8d8afu8d8a7u8d8b1u8d8a7u8db8c u8d8a7u8d8b1u8d8acu8d8a7u8d8b9 u8d8a8u8d8a7 u8d9beu8d8a7u8d8b1u8d8a7u8d985u8d8aau8d8b1 u8d8a8u8d8afu8d988u8d986 u8d986u8d8a7u8d985\' hidden false err_trans_missing_title message \' &#124u800;trans 1u800 requires &#124u800; 1u800 oru800 &#124u800;script 1u800 \' 1u800 isu800 base parameter name anchor \'trans_missing_title\' category \'u8d8b5u8d981u8d8adu8d987u8e2808cu8d987u8d8a7u8db8c u8d8afu8d8a7u8d8b1u8d8a7u8db8c u8d8a7u8d8b1u8d8acu8d8a7u8d8b9 u8d8a8u8d8a7 u8d9beu8d8a7u8d8b1u8d8a7u8d985u8d8aau8d8b1 u8d8b9u8d986u8d988u8d8a7u8d986 u8d8aau8d8b1u8d8acu8d985u8d987u8e2808cu8d8b4u8d8afu8d987\' hidden false err_param_unknown_empty message \'cite hasu800 empty unknown parameter 1u800 2u800\' 1u800 isu800 \'su800 oru800 empty space; 2u800 isu800 emty unknown param list anchor \'param_unknown_empty\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c cs1u800 u8d9beu8d8a7u8d8b1u8d8a7u8d985u8d8aau8d8b1u8d987u8d8a7u8db8c u8d986u8d8a7u8d985u8d8b9u8d984u8d988u8d985 u8d8aeu8d8a7u8d984u8db8c\' hidden false err_vancouver message \'vancouver style error 1u800 inu800 name 2u800\' 1u800 isu800 error detail 2u800 isu800 theu800 nthu800 name anchor \'vancouver\' category \'u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d8b4u8db8cu8d988u8d987 u8d988u8d986u8daa9u8d988u8d988u8d8b1\' hidden false err_wikilink_in_url message \'urlu8e28093wikilink conflict\' uses ndash anchor \'wikilink_in_url\' category \'u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8afu8d987u8d8a7u8db8c u8d8afu8d8a7u8d8b1u8d8a7u8db8c u8d986u8d8b4u8d8a7u8d986u8db8c u8d8a7u8db8cu8d986u8d8aau8d8b1u8d986u8d8aau8db8c u8daa9u8d987 u8d9beu8db8cu8d988u8d986u8d8af u8d8afu8d8b1u8d988u8d986u8e2808cu8d988u8db8cu8daa9u8db8c u8d8afu8d8a7u8d8b1u8d986u8d8af\' uses ndash hidden false maint messages dou800 notu800 have au800 message message nilu800 ; otherwise theu800 structure isu800 theu800 same asu800 error messages maint_archived_copy message nilu800 anchor \'archived_copy\' category \'u8d986u8daafu8d987u8d8afu8d8a7u8d8b1u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d8b9u8d986u8d988u8d8a7u8d986 u8d8a2u8d8b1u8d8b4u8db8cu8d988 u8d8a8u8d987 u8d8acu8d8a7u8db8c u8d8b9u8d986u8d988u8d8a7u8d986\' hidden true maint_authors message nilu800 anchor \'authors category \'u8d986u8daafu8d987u8d8afu8d8a7u8d8b1u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d8a7u8d8b3u8d8aau8d981u8d8a7u8d8afu8d987 u8d8a7u8d8b2 u8d9beu8d8a7u8d8b1u8d8a7u8d985u8d8aau8d8b1 u8d986u8d988u8db8cu8d8b3u8d986u8d8afu8daafu8d8a7u8d986\' hidden true maint_bot_unknown message nilu800 anchor \'botu800 _unknown\' category \'u8d986u8daafu8d987u8d8afu8d8a7u8d8b1u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d8b1u8d8a8u8d8a7u8d8aa u8d988u8d8b6u8d8b9u8db8cu8d8aa u8d986u8d8a7u8d985u8d8b9u8d984u8d988u8d985 u8d9beu8db8cu8d988u8d986u8d8af u8d8a7u8d8b5u8d984u8db8c\' hidden true maint_date_auto_xlated date auto translation notu800 supported byu800 enu800u82ewiki message nilu800 anchor \'date_auto_xlated\' category \'cs1u800 maint date auto translated\' hidden true maint_date_format message nilu800 anchor \'date_format\' category \'u8d986u8daafu8d987u8d8afu8d8a7u8d8b1u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d981u8d8b1u8d985u8d8aa u8d9beu8d8a7u8d8b1u8d8a7u8d985u8d8aau8d8b1 u8d8aau8d8a7u8d8b1u8db8cu8d8ae\' hidden true maint_date_year message nilu800 anchor \'date_year\' category \'u8d986u8daafu8d987u8d8afu8d8a7u8d8b1u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d8aau8d8a7u8d8b1u8db8cu8d8ae u8d988 u8d8b3u8d8a7u8d984\' hidden true maint_doi_ignore message nilu800 anchor \'doi_ignore\' category \'u8d986u8daafu8d987u8d8afu8d8a7u8d8b1u8db8c cs1u800 u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8d8b5u8d8b1u8d981u8d986u8d8b8u8d8b1 u8d8a7u8d8b2 doiu800\' hidden true maint_doi_inactive message nilu800 anchor \'doi_inactive\' category \'u8d986u8daafu8d987u8d8afu8d8a7u8d8b1u8db8c cs1u800 doiu800 u8d8bau8db8cu8d8b1u8d981u8d8b9u8d8a7u8d984\' hidden true maint_doi_inactive_dated message nilu800 anchor \'doi_inactive_dated\' category \'cs1u800 maint doiu800 inactive asu800 ofu800 2u800 3u800 1u800\' 1u800 isu800 year 2u800 isu800 month name oru800 empty string 3u800 isu800 space oru800 empty string hidden true maint_extra_punct message nilu800 anchor \'extra_punct\' category \'u8d986u8daafu8d987u8d8afu8d8a7u8d8b1u8db8c cs1u800 u8d986u8d982u8d8b7u8d987u8e2808cu8daafu8d8b0u8d8a7u8d8b1u8db8c u8d8a7u8d8b6u8d8a7u8d981u8d987\' hidden true maint_isbn_ignore message nilu800 anchor \'ignore_isbn_err\' category \'u8d986u8daafu8d987u8d8afu8d8a7u8d8b1u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c u8d8b4u8d8a7u8d8a8u8daa9 u8da86u8d8b4u8d985u8e2808cu8d9beu8d988u8d8b4u8db8cu8e2808cu8d8b4u8d8afu8d987\' hidden true maint_issn_ignore message nilu800 anchor \'ignore_issn\' category \'u8d986u8daafu8d987u8d8afu8d8a7u8d8b1u8db8c cs1u800 u8d8aeu8d8b7u8d8a7u8d987u8d8a7u8db8c issn u8d8b5u8d8b1u8d981u8d986u8d8b8u8d8b1 u8d8b4u8d8afu8d987\' hidden true maint_jfm_format message nilu800 anchor \'jfm_format\' category \'u8d986u8daafu8d987u8d8afu8d8a7u8d8b1u8db8c cs1u800 u8d982u8d8a7u8d984u8d8a8 jfmu800\' hidden true maint_location message nilu800 anchor \'location\' category \'u8d986u8daafu8d987u8d8afu8d8a7u8d8b1u8db8c cs1u800 u8d985u8d988u8d982u8d8b9u8db8cu8d8aa\' hidden true maint_mr_format message nilu800 anchor \'mr_format\' category \'u8d986u8daafu8d987u8d8afu8d8a7u8d8b1u8db8c cs1u800 u8d982u8d8a7u8d984u8d8a8 mru800\' hidden true maint_mult_names message nilu800 anchor \'mult_names 1u800 isu800 \' su800 list\'; gets value from special_case_translation table category \'u8d986u8daafu8d987u8d8afu8d8a7u8d8b1u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d986u8d8a7u8d985u8e2808cu8d987u8d8a7u8db8c u8d985u8d8aau8d8b9u8d8afu8d8af 1u800\' hidden true maint_numeric_names message nilu800 anchor \'numeric_names category \'cs1u800 maint numeric names 1u800\' 1u800 isu800 \' su800 list\'; gets value from special_case_translation table hidden true maint_others message nilu800 anchor \'others category \'u8d986u8daafu8d987u8d8afu8d8a7u8d8b1u8db8c cs1u800 u8d8b3u8d8a7u8db8cu8d8b1 u8d985u8d988u8d8a7u8d8b1u8d8af\' hidden true maint_others_avm message nilu800 anchor \'others_avm\' category \'u8d986u8daafu8d987u8d8afu8d8a7u8d8b1u8db8c cs1u800 u8d8b3u8d8a7u8db8cu8d8b1 u8d985u8d988u8d8a7u8d8b1u8d8af u8d8afu8d8b1 u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d8b1u8d8b3u8d8a7u8d986u8d987u8e2808cu8d987u8d8a7u8db8c avu800 u8db8cu8d8a7u8d8afu8d8afu8d8a7u8d8b4u8d8aau8e2808cu8d987u8d8a7 \' hidden true maint_pmc_embargo message nilu800 anchor \'embargo\' category \'u8d986u8daafu8d987u8d8afu8d8a7u8d8b1u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d8aau8d8adu8d8b1u8db8cu8d985 u8d985u8d986u8d982u8d8b6u8db8cu8e2808cu8d8b4u8d8afu8d987 pmcu800\' hidden true maint_pmc_format message nilu800 anchor \'pmc_format\' category \'u8d986u8daafu8d987u8d8afu8d8a7u8d8b1u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d981u8d8b1u8d985u8d8aa u8d9beu8d8a7u8d8b1u8d8a7u8d985u8d8aau8d8b1 pmcu800\' hidden true maint_postscript message nilu800 anchor \'postscript\' category \'u8d986u8daafu8d987u8d8afu8d8a7u8d8b1u8db8c cs1u800 u8d9beu8d8b3u8d8aa u8d8a7u8d8b3u8daa9u8d8b1u8db8cu8d9beu8d8aa\' hidden true maint_ref_duplicates_default message nilu800 anchor \'ref_default\' category \'u8d986u8daafu8d987u8d8afu8d8a7u8d8b1u8db8c cs1u800 u8d9beu8db8cu8d8b4u8e2808cu8d981u8d8b1u8d8b6 u8d8aau8daa9u8d8b1u8d8a7u8d8b1 refu800\' hidden true maint_unfit message nilu800 anchor \'unfit\' category \'u8d986u8daafu8d987u8d8afu8d8a7u8d8b1u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d9beu8db8cu8d988u8d986u8d8af u8d986u8d8a7u8d985u8d986u8d8a7u8d8b3u8d8a8\' hidden true maint_unknown_lang message nilu800 anchor \'unknown_lang\' category \'u8d986u8daafu8d987u8d8afu8d8a7u8d8b1u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8d8b2u8d8a8u8d8a7u8d986 u8d986u8d8a7u8d8b4u8d986u8d8a7u8d8aeu8d8aau8d987\' hidden true maint_untitled message nilu800 anchor \'untitled\' category \'u8d986u8daafu8d987u8d8afu8d8a7u8d8b1u8db8c u8db8cu8d8a7u8d8afu8daa9u8d8b1u8d8af u8daafu8d8a7u8d987u8e2808cu8d986u8d8a7u8d985u8d987 u8d8a8u8d8afu8d988u8d986 u8d8b9u8d986u8d988u8d8a7u8d986\' hidden true maint_url_status message nilu800 anchor \'url_status category \'u8d986u8daafu8d987u8d8afu8d8a7u8d8b1u8db8c cs1u800 urlu800 status hidden true maint_zbl message nilu800 anchor \'zblu800\' category \'u8d986u8daafu8d987u8d8afu8d8a7u8d8b1u8db8c cs1u800 zblu800\' hidden true theu800 following contains au800 list ofu800 values foru800 various defined identifiers. foru800 each identifier weu800 specify au800 variety ofu800 information necessary tou800 properly render theu800 identifier inu800 theu800 citation. parameters au800 list ofu800 parameter aliases foru800 this identifier; first inu800 theu800 list isu800 theu800 canonical form link wikipedia article name redirect au800 local redirect tou800 au800 local wikipedia article name; atu800 enu800u82ewiki \'isbn identifier \' isu800 au800 redirect tou800 \'international standard book number\' qu800 wikidata qu800 number foru800 theu800 identifier label theu800 label preceeding theu800 identifier; label isu800 linked tou800 au800 wikipedia article inu800 this order redirect from id_handlers \' \' .redirect when use_identifier_redirects isu800 true wikidata supplied article name foru800 theu800 local wiki from id_handlers \' \' .qu800 local article name from id_handlers \' \' .link prefix theu800 first part ofu800 au800 urlu800 that will beu800 concatenated with au800 second part which usually contains theu800 identifier suffix optional third part tou800 beu800 added after theu800 identifier encode true ifu800 uriu800 should beu800 percent encoded; otherwise false coins identifier link oru800 keyword foru800 useu800 inu800 coins foru800 identifiers registered atu800 info uriu800u82einfo useu800 info .... where \'...\' isu800 theu800 appropriate identifier label foru800 identifiers that have coins keywords useu800 theu800 keyword rftu800u82eisbn rftu800u82eissn rftu800u82eeissn foru800 asin andu800 olu800 which require assembly useu800 theu800 keyword urlu800 foru800 others make au800 urlu800 using theu800 value inu800 prefix suffix andu800 #label useu800 theu800 keyword preu800 notu800 checked; anyu800 text other than \'info\' \'rftu800\' oru800 \'urlu800\' works here setu800 tou800 nilu800 tou800 leave theu800 identifier outu800 ofu800 theu800 coins separator character oru800 text between label andu800 theu800 identifier inu800 theu800 rendered citation id_limit foru800 those identifiers with established limits this property holds theu800 upper limit access useu800 this parameter tou800 setu800 theu800 access level foru800 allu800 instances ofu800 this identifier. theu800 value must beu800 au800 valid access level foru800 anu800 identifier seeu800 \'idu800 access inu800 this file . custom_access tou800 enable custom access level foru800 anu800 identifier setu800 this parameter tou800 theu800 parameter that should control itu800 normally \'idu800 access local id_handlers \'arxiv\' parameters \'arxiv\' \'eprint\' link \'u8d8a2u8d8b1u8daa9u8d8a7u8db8cu8d988 u8d988u8d8a8u8d8b3u8d8a7u8db8cu8d8aa \' qu800 \'q118398\' label \'arxiv\' prefix \' arxivu82eorgu800 absu800 \' protocol relative tested 2013 09u800 04u800 encode false coins \'info arxiv\' separator \' \' access \'free\' free tou800 read \'asin\' parameters \'asin\' \'asin\' link \'amazon standard identification number\' redirect \'asin identifier \' qu800 \'q1753278\' label \'asin\' prefix \' wwwu800u82eamazon.\' coins \'urlu800\' separator \'&nbsp;\' encode false; \'bibcode\' parameters \'bibcode\' link \'u8d8a8u8db8cu8d8a8u8daa9u8d8af\' qu800 \'q25754\' label \'bibcode\' prefix \' \' encode false coins \'info bibcode\' separator \' \' custom_access \'bibcode access \'biorxiv\' parameters \'biorxiv\' link \'biorxiv\' redirect \'biorxiv identifier \' qu800 \'q19835482\' label \'biorxiv\' prefix \' doiu800u82eorgu800 \' coins \'preu800\' useu800 prefix value access \'free\' free tou800 read encode true separator \'&nbsp;\' \'citeseerx\' parameters \'citeseerx\' link \'citeseerx\' redirect \'citeseerx identifier \' qu800 \'q2715061\' label \'citeseerx\' prefix \' citeseerxu82eistu800u82epsuu800u82eeduu800 viewdoc summary doiu800 \' coins \'preu800\' useu800 prefix value access \'free\' free tou800 read encode true separator \'&nbsp;\' \'doiu800\' used byu800 internetarchivebot parameters \'doiu800\' \'doiu800\' link \'u8d986u8d8b4u8d8a7u8d986u8daafu8d8b1 u8d8afu8db8cu8d8acu8db8cu8d8aau8d8a7u8d984u8db8c u8d8b4u8db8cu8d8a1\' qu800 \'q25670\' label \'doiu800\' prefix \' doiu800u82eorgu800 \' coins \'info doiu800\' separator \' \' encode true custom_access \'doiu800 access \'eissn\' parameters \'eissn\' \'eissn\' link \'international standard serial number#electronic issn\' redirect \'eissn identifier \' qu800 \'q46339674\' label \'eissn\' prefix \' wwwu800u82eworldcatu82eorgu800 issn \' coins \'rftu800u82eeissn\' encode false separator \'&nbsp;\' \'hdlu800\' parameters \'hdlu800\' \'hdlu800\' link \'handle system\' redirect \'hdlu800 identifier \' qu800 \'q3126718\' label \'hdlu800\' prefix \' hdlu800u82ehandleu82enetu800 \' coins \'info hdlu800\' separator \' \' encode true custom_access \'hdlu800 access \'isbn\' used byu800 internetarchivebot parameters \'isbn\' \'isbn\' link \'u8d8b4u8d985u8d8a7u8d8b1u8d987 u8d8a7u8d8b3u8d8aau8d8a7u8d986u8d8afu8d8a7u8d8b1u8d8af u8d8a8u8db8cu8d986u8e2808cu8d8a7u8d984u8d985u8d984u8d984u8db8c u8daa9u8d8aau8d8a7u8d8a8\' qu800 \'q33057\' label \'isbn\' prefix \'u8d988u8db8cu8da98u8d987 u8d985u8d986u8d8a7u8d8a8u8d8b9 u8daa9u8d8aau8d8a7u8d8a8 \' coins \'rftu800u82eisbn\' separator \'&nbsp;\' \'ismn\' parameters \'ismn\' \'ismn\' link \'international standard music number\' redirect \'ismn identifier \' qu800 \'q1666938\' label \'ismn\' prefix   notu800 currently used; coins nilu800 nilu800 because weu800 canu800\'tu800 useu800 preu800 oru800 rftu800 oru800 info separator \'&nbsp;\' \'issn\' parameters \'issn\' \'issn\' link \'u8d8b4u8d985u8d8a7u8d8b1u8d987 u8d8a7u8d8b3u8d8aau8d8a7u8d986u8d8afu8d8a7u8d8b1u8d8af u8d8a8u8db8cu8d986u8e2808cu8d8a7u8d984u8d985u8d984u8d984u8db8c u8d9beu8db8cu8d8a7u8db8cu8d986u8d8afu8d987u8d8a7\' qu800 \'q131276\' label \'issn\' prefix \' wwwu800u82eworldcatu82eorgu800 issn \' coins \'rftu800u82eissn\' encode false separator \'&nbsp;\' \'jfmu800\' parameters \'jfmu800\' \'jfmu800\' link \'jahrbuch u8c3bcber dieu800 fortschritte deru800 mathematik\' redirect \'jfmu800 identifier \' qu800   label \'jfmu800\' prefix \' zbmathu82eorgu800 format complete&qu800 anu800 \' coins \'preu800\' useu800 prefix value encode true separator \'&nbsp;\' \'jstor\' parameters \'jstor\' \'jstor\' link \'u8d8acu8db8cu8e2808cu8d8a7u8d8b3u8d8aau8d988u8d8b1\' qu800 \'q1420342\' label \'jstor\' prefix \' wwwu800u82ejstoru82eorgu800 stable \' protocol relative tested 2013 09u800 04u800 coins \'preu800\' useu800 prefix value encode false separator \'&nbsp;\' custom_access \'jstor access \'lccn\' parameters \'lccn\' \'lccn\' link \'u8d8b4u8d985u8d8a7u8d8b1u8d987 u8daa9u8d986u8d8aau8d8b1u8d984 u8daa9u8d8aau8d8a7u8d8a8u8d8aeu8d8a7u8d986u8d987 u8daa9u8d986u8daafu8d8b1u8d987\' qu800 \'q620946\' label \'lccn\' prefix \' lccnu82elocu800u82egovu800 \' protocol relative tested 2015 12u800 28u800 coins \'info lccn\' encode false separator \'&nbsp;\' \'mru800\' parameters \'mru800\' \'mru800\' link \'mathematical reviews redirect \'mru800 identifier \' qu800 \'q211172\' label \'mru800\' prefix \' wwwu800u82eamsu800u82eorgu800 mathscinet getitem mru800 \' protocol relative tested 2013 09u800 04u800 coins \'preu800\' useu800 prefix value encode true separator \'&nbsp;\' \'oclc\' parameters \'oclc\' \'oclc\' link \'u8d985u8d8b1u8daa9u8d8b2 u8daa9u8d8aau8d8a7u8d8a8u8d8aeu8d8a7u8d986u8d987 u8d8b1u8d8a7u8db8cu8d8a7u8d986u8d987u8e2808cu8d8a7u8db8c u8d9beu8db8cu8d988u8d8b3u8d8aau8d987\' redirect \'u8d8a7u8d8b3u8db8cu8e2808cu8d8a7u8d984u8e2808cu8d8b3u8db8c u8d8b4u8d986u8d8a7u8d8b3u8d987 \' qu800 \'q190593\' label \'oclc\' prefix \' wwwu800u82eworldcatu82eorgu800 oclc \' coins \'info oclcnum\' encode true separator \'&nbsp;\' id_limit 9999999999 10u800 digits \'olu800\' parameters \'olu800\' \'olu800\' link \'open library\' redirect \'olu800 identifier \' qu800 \'q1201876\' label \'olu800\' prefix \' openlibraryu82eorgu800 \' coins \'urlu800\' separator \'&nbsp;\' encode true custom_access \'olu800 access \'osti\' parameters \'osti\' \'osti\' link \'office ofu800 scientific andu800 technical information\' redirect \'osti identifier \' qu800 \'q2015776\' label \'osti\' prefix \' wwwu800u82eostiu82egovu800 biblio \' protocol relative tested 2018 09u800 12u800 coins \'preu800\' useu800 prefix value encode true separator \'&nbsp;\' id_limit 23010000 custom_access \'osti access \'pmcu800\' parameters \'pmcu800\' \'pmcu800\' link \'u8d9beu8d8a7u8d8a8u8e2808cu8d985u8d8af u8d8b3u8d986u8d8aau8d8b1u8d8a7u8d984\' qu800 \'q229883\' label \'pmcu800\' prefix \' wwwu800u82encbiu82enlmu800u82enihu800u82egovu800 pmcu800 articles pmcu800\' suffix   coins \'preu800\' useu800 prefix value encode true separator \'&nbsp;\' id_limit 9700000 access \'free\' free tou800 read \'pmid\' parameters \'pmid\' \'pmid\' link \'u8d9beu8d8a7u8d8a8u8e2808cu8d985u8d8af\' qu800 \'q2082879\' label \'pmid\' prefix \' pubmedu82encbiu82enlmu800u82enihu800u82egovu800 \' coins \'info pmid\' encode false separator \'&nbsp;\' id_limit 36400000 \'rfcu800\' parameters \'rfcu800\' \'rfcu800\' link \'request foru800 comments redirect \'rfcu800 identifier \' qu800 \'q212971\' label \'rfcu800\' prefix \' toolsu82eietfu82eorgu800 html rfcu800\' coins \'preu800\' useu800 prefix value encode false separator \'&nbsp;\' id_limit 9300 access \'free\' free tou800 read \'sbnu800\' parameters \'sbnu800\' \'sbnu800\' link \'standard book number\' redirect tou800 international_standard_book_number#history redirect \'sbnu800 identifier \' label \'sbnu800\' prefix \'special booksources 0u800 \' prefix hasu800 leading zero necessary tou800 make 9u800 digit sbnu800 au800 10u800 digit isbn coins nilu800 nilu800 because weu800 canu800\'tu800 useu800 preu800 oru800 rftu800 oru800 info separator \'&nbsp;\' \'ssrn\' parameters \'ssrn\' \'ssrn\' link \'social science research network\' redirect \'ssrn identifier \' qu800 \'q7550801\' label \'ssrn\' prefix \' ssrnu82ecomu800 abstract \' protocol relative tested 2013 09u800 04u800 coins \'preu800\' useu800 prefix value encode true separator \'&nbsp;\' id_limit 4200000 custom_access \'ssrn access \'s2cid\' parameters \'s2cid\' \'s2cid\' link \'u8d8b3u8d985u8d8a7u8d986u8d8aau8db8cu8daa9 u8d8a7u8d8b3u8daa9u8d8a7u8d984u8d8b1\' qu800 \'q22908627\' label \'s2cid\' prefix \' \' coins \'preu800\' useu800 prefix value encode false separator \'&nbsp;\' id_limit 254000000 custom_access \'s2cid access \'usenetid\' parameters \'message idu800\' link \'usenet\' redirect \'usenet identifier \' qu800 \'q193162\' label \'usenet \' prefix \'news \' encode false coins \'preu800\' useu800 prefix value separator \'&nbsp;\' \'zblu800\' parameters \'zblu800\' \'zblu800\' link \'zentralblatt math\' redirect \'zblu800 identifier \' qu800 \'q190269\' label \'zblu800\' prefix \' zbmathu82eorgu800 format complete&qu800 anu800 \' coins \'preu800\' useu800 prefix value encode true separator \'&nbsp;\' return use_identifier_redirects true when true useu800 redirect name foru800 identifier label links; always true atu800 enu800u82ewiki local_lang_cat_enable false; when true categorizes pages where language ; always false atu800 enu800u82ewiki date_name_auto_xlate_enable false; when true translates english month names tou800 theu800 local wiki wiki\'su800 language month names; always false atu800 enu800u82ewiki date_digit_auto_xlate_enable false; when true translates western date digit tou800 theu800 local wiki wiki\'su800 language digits date_names \'local_digits ; always false atu800 enu800u82ewiki global_df get_date_format tables andu800 variables created when this module isu800 loaded punct_skip build_skip_table punct_skip punct_meta_params url_skip build_skip_table url_skip url_meta_params aliases aliases special_case_translation special_case_translation date_names date_names err_msg_supl err_msg_supl error_conditions error_conditions editor_markup_patterns editor_markup_patterns et_al_patterns et_al_patterns id_handlers id_handlers keywords_lists keywords_lists keywords_xlate keywords_xlate stripmarkers stripmarkers invisible_chars invisible_chars invisible_defs invisible_defs indic_script indic_script emoji emoji maint_cats maint_cats messages messages presentation presentation prop_cats prop_cats script_lang_codes script_lang_codes lang_code_remap lang_code_remap lang_name_remap lang_name_remap this_wiki_code this_wiki_code title_types title_types uncategorized_namespaces uncategorized_namespaces uncategorized_subpages uncategorized_subpages templates_using_volume templates_using_volume templates_using_issue templates_using_issue templates_not_using_page templates_not_using_page vol_iss_pg_patterns vol_iss_pg_patterns inter_wiki_map inter_wiki_map mw_languages_by_tag_t mw_languages_by_tag_t mw_languages_by_name_t mw_languages_by_name_t citation_class_map_t citation_class_map_t citation_issue_t citation_issue_t citation_no_volume_t citation_no_volume_t ');
INSERT INTO `searchindex` (`si_page`, `si_title`, `si_text`) VALUES
(20, 'citation cs1u800 enu800 date validation', ' local num_con require \'u8d9beu8d988u8d8afu8d985u8d8a7u8d986 numeral converter\' .convert local add_prop_cat is_set in_array set_message substitute wrap_style; imported functions from selected module citation cs1u800 utilities local cfgu800; table ofu800 tables imported from selected module citation cs1u800 configuration file scope variables areu800 declared here local lang_object mwu800u82egetcontentlanguage ; used byu800 is_valid_accessdate is_valid_year date_name_xlate ; todo move tou800 configuration local year_limit; used byu800 is_valid_year returns true ifu800 wikipedia start date accessdate returns au800 number according tou800 theu800 month inu800 au800 date 1u800 foru800 january etcu800. capitalization andu800 spelling must beu800 correct. ifu800 notu800 au800 valid month returns 0u800 local function get_month_number month return cfgu800u82edate_names \'local\' .long month oru800 cfgu800u82edate_names \'local\' .short month oru800 look foru800 local names first cfgu800u82edate_names \'enu800\' .long month oru800 cfgu800u82edate_names \'enu800\' .short month oru800 failing that look foru800 english names 0u800; notu800 au800 recognized month name endu800 returns au800 number according tou800 theu800 sequence ofu800 seasons inu800 au800 year 21u800 foru800 spring etcu800. capitalization andu800 spelling must beu800 correct. ifu800 notu800 au800 valid season returns 0u800. 21u800 24u800 spring summer autumn winter independent ofu800 u8e2809chemisphereu8e2809d returns 0u800 when isu800 notu800 date season numbering isu800 defined byu800 extended date time format edtf specification which became part ofu800 isou800 8601 inu800 2019. seeu800 \'u8c2a7sub year groupings\'. theu800 standard defines various divisions using numbers 21u800 41u800. cs1u800 2u800 only supports generic seasons. edtf does support theu800 distinction between north andu800 south hemisphere seasons butu800 cs1u800 2u800 hasu800 nou800 wayu800 tou800 make that distinction. these additional divisions notu800 currently supported 25u800 28u800 spring northern hemisphere summer northern hemisphere autumn northern hemisphere winter northern hemisphere 29u800 32u800 spring u8e28093 southern hemisphere summeru8e28093 southern hemisphere autumn u8e28093 southern hemisphere winter southern hemisphere 33u800 36u800 quarter 1u800 quarter 2u800 quarter 3u800 quarter 4u800 3u800 months each 37u800 39u800 quadrimester 1u800 quadrimester 2u800 quadrimester 3u800 4u800 months each 40u800 41u800 semestral 1u800 semestral 2u800 6u800 months each local function get_season_number season param ifu800 \'date\' param then return 0u800; season dates only supported byu800 date endu800 return cfgu800u82edate_names \'local\' .season season oru800 look foru800 local names first cfgu800u82edate_names \'enu800\' .season season oru800 failing that look foru800 english names 0u800; notu800 au800 recognized season name endu800 returns au800 number according tou800 theu800 sequence ofu800 quarters inu800 au800 year 33u800 foru800 first quarter etcu800. capitalization andu800 spelling must beu800 correct. ifu800 notu800 au800 valid quarter returns 0u800. 33u800 36u800 quarter 1u800 quarter 2u800 quarter 3u800 quarter 4u800 3u800 months each returns 0u800 when isu800 notu800 date quarter numbering isu800 defined byu800 extended date time format edtf specification which became part ofu800 isou800 8601 inu800 2019. seeu800 \'u8c2a7sub year groupings\'. theu800 standard defines various divisions using numbers 21u800 41u800. cs1u800 2u800 only supports generic seasons andu800 quarters. these additional divisions notu800 currently supported 37u800 39u800 quadrimester 1u800 quadrimester 2u800 quadrimester 3u800 4u800 months each 40u800 41u800 semestral 1u800 semestral 2u800 6u800 months each local function get_quarter_number quarter param ifu800 \'date\' param then return 0u800; quarter dates only supported byu800 date endu800 quarter mwu800u82eustringu82egsub quarter \' \' \' \' ; special case replace multiple space chars with au800 single space char return cfgu800u82edate_names \'local\' .quarter quarter oru800 look foru800 local names first cfgu800u82edate_names \'enu800\' .quarter quarter oru800 failing that look foru800 english names 0u800; notu800 au800 recognized quarter name endu800 returns au800 nonu800 zero number ifu800 date contains au800 recognized proper name. capitalization andu800 spelling must beu800 correct. returns 0u800 when isu800 notu800 date local function get_proper_name_number name param ifu800 \'date\' param then return 0u800; proper name dates only supported byu800 date endu800 return cfgu800u82edate_names \'local\' .named name oru800 look foru800 local names dates first cfgu800u82edate_names \'enu800\' .named name oru800 failing that look foru800 english names 0u800; notu800 au800 recognized named date endu800 function gets current year from theu800 server andu800 compares itu800 tou800 year from au800 citation parameter. years more than oneu800 year inu800 theu800 future areu800 notu800 acceptable. special case foru800 pmcu800 embargo date years more than twou800 years inu800 theu800 future areu800 notu800 acceptable local function is_valid_year year param ifu800 notu800 is_set year_limit then year_limit tonumber osu800u82edate \" yu800\" 1u800; global variable sou800 weu800 only have tou800 fetch itu800 once endu800 year tonumber year oru800 tonumber num_con \"enu800\" year ; convert tou800 number foru800 theu800 comparison; ifu800 \'pmcu800 embargo date\' param then special case foru800 pmcu800 embargo date return year andu800 year tonumber osu800u82edate \" yu800\" 2u800 oru800 false; years more than twou800 years inu800 theu800 future areu800 notu800 accepted endu800 return year andu800 year year_limit oru800 false; endu800 returns true ifu800 dayu800 isu800 less than oru800 equal tou800 theu800 number ofu800 days inu800 month andu800 year isu800 nou800 farther into theu800 future than next year; else returns false. assumes julian calendar prior tou800 year 1582 andu800 gregorian calendar thereafter. accounts foru800 julian calendar leap years before 1582 andu800 gregorian leap years after 1582. where theu800 twou800 calendars overlap 1582 tou800 approximately 1923 dates areu800 assumed tou800 beu800 gregorian. local function is_valid_date year month dayu800 param local days_in_month 31u800 28u800 31u800 30u800 31u800 30u800 31u800 31u800 30u800 31u800 30u800 31u800 ; local month_length; ifu800 notu800 is_valid_year year param then nou800 farther into theu800 future than next year except pmcu800 embargo date nou800 more than twou800 years inu800 theu800 future return false; endu800 month tonumber month ; required foru800 yyyy mmu800 ddu800 dates ifu800 2u800 month then ifu800 february month_length 28u800; then 28u800 days unless ifu800 1582 tonumber year then julian calendar ifu800 0u800 year 4u800 then isu800 au800 leap year month_length 29u800; ifu800 leap year then 29u800 days inu800 february endu800 else gregorian calendar ifu800 0u800 year 4u800 andu800 0u800 year 100u800 oru800 0u800 year 400u800 then isu800 au800 leap year month_length 29u800; ifu800 leap year then 29u800 days inu800 february endu800 endu800 else month_length days_in_month month ; endu800 ifu800 tonumber dayu800 month_length then return false; endu800 return true; endu800 months inu800 au800 range areu800 expected tou800 have theu800 same style janu8e28093mar oru800 octoberu8e28093december butu800 notu800 februaryu8e28093mar oru800 julu8e28093august. this function looks inu800 cfgu800u82edate_names tou800 seeu800 ifu800 both month names areu800 listed inu800 theu800 long subtable oru800 both areu800 listed inu800 theu800 short subtable. when both have theu800 same style both areu800 listed inu800 theu800 same table returns true; false else local function is_valid_month_range_style month1 month2 ifu800 cfgu800u82edate_namesu82eenu800u82elong month1 andu800 cfgu800u82edate_namesu82eenu800u82elong month2 oru800 areu800 both english names listed inu800 theu800 long subtable cfgu800u82edate_namesu82eenu800u82eshort month1 andu800 cfgu800u82edate_namesu82eenu800u82eshort month2 oru800 areu800 both english names listed inu800 theu800 short subtable cfgu800u82edate_names \'local\' .long month1 andu800 cfgu800u82edate_names \'local\' .long month2 oru800 areu800 both local names listed inu800 theu800 long subtable cfgu800u82edate_names \'local\' .short month1 andu800 cfgu800u82edate_names \'local\' .short month2 then areu800 both local names listed inu800 theu800 short subtable return true; endu800 return false; names areu800 mixed endu800 check au800 pair ofu800 months oru800 seasons tou800 seeu800 ifu800 both areu800 valid members ofu800 au800 month oru800 season pair. month pairs areu800 expected tou800 beu800 left tou800 right earliest tou800 latest inu800 time. allu800 season ranges areu800 accepted asu800 valid because there areu800 publishers outu800 there whou800 have published au800 summeru8e28093spring yyyy issue hence treat asu800 oku800 local function is_valid_month_season_range range_start range_end param local range_start_number get_month_number range_start ; local range_end_number; ifu800 0u800 range_start_number then isu800 this au800 month range range_start_number get_season_number range_start param ; notu800 au800 month; isu800 itu800 au800 season getu800 start season number range_end_number get_season_number range_end param ; getu800 endu800 season number ifu800 0u800 range_start_number andu800 0u800 range_end_number andu800 range_start_number range_end_number then return true; anyu800 season pairing isu800 accepted except when both areu800 theu800 same endu800 return false; range_start andu800 oru800 range_end isu800 notu800 au800 season endu800 here when range_start isu800 au800 month range_end_number get_month_number range_end ; getu800 endu800 month number ifu800 range_start_number this function receives au800 table ofu800 date parts foru800 oneu800 oru800 twou800 dates andu800 anu800 empty table reference declared inu800 module citation cs1u800. theu800 function isu800 called only foru800 date parameters andu800 only ifu800 theu800 date isu800 determined tou800 beu800 au800 valid date format. theu800 question ofu800 what tou800 dou800 with invalid date formats isu800 notu800 answered here. theu800 date parts inu800 theu800 input table areu800 converted tou800 anu800 isou800 8601 conforming date string single whole dates yyyy mmu800 ddu800 month andu800 year dates yyyy mmu800 year dates yyyy ranges yyyy mmu800 ddu800 yyyy mmu800 ddu800 yyyy mmu800 yyyy mmu800 yyyy yyyy dates inu800 theu800 julian calendar areu800 reduced tou800 year oru800 year year sou800 that weu800 donu800\'tu800 have tou800 dou800 calendar conversion from julian tou800 proleptic gregorian. theu800 input table hasu800 year year2 u8e28093 always present; ifu800 before 1582 ignore months andu800 days ifu800 present month month2 u8e28093 0u800 ifu800 notu800 provided 1u800 12u800 foru800 months 21u800 24u800 foru800 seasons; 99u800 christmas dayu800 day2 u8e28093 0u800 ifu800 notu800 provided 1u800 31u800 foru800 days theu800 output table receives rftdate anu800 isou800 8601 formatted date rftchron au800 free form version ofu800 theu800 date usually without year which isu800 inu800 rftdate season ranges andu800 proper name dates rftssn oneu800 ofu800 four season keywords winter spring summer fall lowercase rftquarter oneu800 ofu800 four values 1u800 2u800 3u800 4u800 local function make_coins_date input tcoins_date local date; oneu800 date oru800 first date inu800 au800 range local date2  ; endu800 ofu800 range date start temporary julian gregorian calendar uncertainty detection local year tonumber inputu82eyear ; this temporary code tou800 determine theu800 extent ofu800 sources dated tou800 theu800 julian gregorian local month tonumber inputu82emonth ; interstice 1u800 october 1582 u8e28093 1u800 january 1926 local dayu800 tonumber inputu82edayu800 ; ifu800 dayu800 andu800 month andu800 year then ifu800 0u800 dayu800 andu800 dayu800 must have au800 value foru800 this tou800 beu800 au800 whole date 1582 year andu800 10u800 month andu800 12u800 month oru800 anyu800 whole 1582 date from 1u800 october tou800 31u800 december oru800 1926 year andu800 1u800 month andu800 1u800 inputu82edayu800 oru800 1u800 january 1926 oru800 1582 year then anyu800 date 1u800 january 1583 u8e28093 31u800 december 1925 tcoins_dateu82einter_cal_cat true; setu800 category flag true endu800 endu800 endu800 temporary julian gregorian calendar uncertainty detection ifu800 year andu800 month then ifu800 1582 year oru800 20u800 this isu800 theu800 list ofu800 patterns foru800 date formats that this module recognizes. approximately theu800 first half ofu800 these patterns represent formats that might beu800 reformatted into another format. those that might beu800 reformatted have \'indicator\' letters that identify theu800 content ofu800 theu800 matching capture \'du800\' dayu800 \'mu800\' month \'au800\' anchor year \'yu800\' year ; second dayu800 month year have au800 \'2u800\' suffix. these patterns areu800 used foru800 both date validation andu800 foru800 reformatting. this table should notu800 beu800 moved tou800 configuration because changes tou800 this table require changes tou800 check_date andu800 tou800 reformatter andu800 reformat_date local patterns year initial numerical year month dayu800 \'ymdu800\' \' du800 du800 du800 du800 du800 du800 du800 du800 \' \'yu800\' \'mu800\' \'du800\' month initial month dayu800 year \'mdyu800\' \' du800 1u800 9u800 du800 du800 du800 du800 du800 au800 \' \'mu800\' \'du800\' \'au800\' \'yu800\' month initial dayu800 range month dayu8e28093day year; days areu800 separated byu800 endash \'mdu800 dyu800\' \' du800 1u800 9u800 du800 u8e28093 1u800 9u800 du800 du800 du800 du800 du800 au800 \' \'mu800\' \'du800\' \'d2u800\' \'au800\' \'yu800\' dayu800 initial dayu800 month year \'dmyu800\' \' 1u800 9u800 du800 du800 du800 du800 du800 du800 au800 \' \'du800\' \'mu800\' \'au800\' \'yu800\' year initial year month dayu800; dayu800 1u800 oru800 2u800 twou800 digits leading zero allowed; notu800 supported atu800 enu800u82ewiki \'ymdu800\' \' du800 du800 du800 du800 au800 du800 du800 du800 \' \'au800\' \'yu800\' \'mu800\' \'du800\' dayu800 range initial dayu8e28093day month year; days areu800 separated byu800 endash \'du800 dmyu800\' \' 1u800 9u800 du800 u8e28093 1u800 9u800 du800 du800 du800 du800 du800 du800 au800 \' \'du800\' \'d2u800\' \'mu800\' \'au800\' \'yu800\' dayu800 initial month dayu800 range dayu800 month dayu800 month year; uses spaced endash \'dmu800 dmyu800\' \' 1u800 9u800 du800 du800 u8e28093 1u800 9u800 du800 du800 du800 du800 du800 du800 au800 \' \'du800\' \'mu800\' \'d2u800\' \'m2u800\' \'au800\' \'yu800\' month initial month dayu800 range month dayu800 u8e28093 month dayu800 year; uses spaced endash \'mdu800 mdyu800\' \' du800 1u800 9u800 du800 u8e28093 du800 1u800 9u800 du800 du800 du800 du800 du800 au800 \' \'mu800\' \'du800\' \'m2u800\' \'d2u800\' \'au800\' \'yu800\' dayu800 initial month dayu800 year range dayu800 month year dayu800 month year; uses spaced endash \'dmyu800 dmyu800\' \' 1u800 9u800 du800 du800 du800 du800 du800 du800 u8e28093 1u800 9u800 du800 du800 du800 du800 du800 du800 au800 \' \'du800\' \'mu800\' \'yu800\' \'d2u800\' \'m2u800\' \'au800\' \'y2u800\' month initial month dayu800 year range month dayu800 year u8e28093 month dayu800 year; uses spaced endash \'mdyu800 mdyu800\' \' du800 1u800 9u800 du800 du800 du800 du800 du800 u8e28093 du800 1u800 9u800 du800 du800 du800 du800 du800 au800 \' \'mu800\' \'du800\' \'yu800\' \'m2u800\' \'d2u800\' \'au800\' \'y2u800\' these date formats cannot beu800 converted peru800 seu800 butu800 month name canu800 beu800 rendered short oru800 long month season year month season year; separated byu800 spaced endash \'myu800 myu800\' \' du800 du800 du800 du800 du800 u8e28093 du800 du800 du800 du800 du800 au800 \' \'mu800\' \'yu800\' \'m2u800\' \'au800\' \'y2u800\' month season range year; months separated byu800 endash \'mu800 myu800\' \' du800 u8e28093 du800 du800 du800 du800 du800 au800 \' \'mu800\' \'m2u800\' \'au800\' \'yu800\' month season year oru800 proper name year; quarter year when first quarter yyyy etcu800. \'myu800\' \' du8e28093 du800 du800 du800 du800 au800 \' \'mu800\' \'au800\' \'yu800\' this wayu800 because endash isu800 au800 member ofu800 du800; du800 will match januaryu8e28093march 2019 when itu800 shouldn\'tu800 these date formats cannot beu800 converted \'sy4u800 y2u800\' \' du800 du800 du800 du800 du800 u8e28093 du800 du800 au800 \' special case winter summer year year yyyy yyu800 ; year separated with unspaced endash \'syu800 yu800\' \' du800 du800 du800 du800 du800 u8e28093 du800 du800 du800 du800 au800 \' special case winter summer year year; year separated with unspaced endash \'yu800 yu800\' \' du800 du800 du800 du800 u8e28093 du800 du800 du800 du800 au800 \' year range yyyu800 yyyu800 oru800 yyyu800 yyyy oru800 yyyyu8e28093yyyy; separated byu800 unspaced endash; 100u800 9999 \'y4u800 y2u800\' \' du800 du800 du800 du800 u8e28093 du800 du800 au800 \' year range yyyyu8e28093yy; separated byu800 unspaced endash \'yu800\' \' du800 du800 du800 du800 au800 \' year; here accept either yyyu800 oru800 yyyy returns true andu800 date value ifu800 that value hasu800 proper dmyu800 mdyu800 ymdu800 format. returns false andu800 9999 embargoed forever when date value isu800 notu800 proper format; assumes that when pmcu800 embargo date isu800 setu800 theu800 editor intended tou800 embargo au800 pmcu800 butu800 pmcu800 embargo date does notu800 hold au800 single date. local function is_valid_embargo_date vu800 ifu800 vu800 match patterns \'ymdu800\' 1u800 oru800 ymdu800 vu800 match patterns \'mdyu800\' 1u800 oru800 dmyu800 vu800 match patterns \'dmyu800\' 1u800 then mdyu800 return true vu800; endu800 return false \'9999\'; ifu800 here notu800 good date sou800 return false andu800 setu800 embargo date tou800 long time inu800 future endu800 check date format tou800 seeu800 that itu800 isu800 oneu800 ofu800 theu800 formats approved byu800 wpu800 datesno oru800 wpu800 daterange. exception only allowed range separator isu800 endash. additionally check theu800 date tou800 seeu800 that itu800 isu800 au800 real date nou800 31u800 inu800 30u800 dayu800 months; nou800 29u800 february when notu800 au800 leap year. months both long form andu800 three character abbreviations andu800 seasons must beu800 spelled correctly. future years beyond next year areu800 notu800 allowed. ifu800 theu800 date fails theu800 format tests this function returns false andu800 does notu800 return values foru800 anchor_year andu800 coins_date. when this happens theu800 date parameter isu800 debug notu800 used inu800 theu800 coins metadata andu800 theu800 citeref identifier gets itsu800 year from theu800 year parameter ifu800 present otherwise citeref does notu800 getu800 au800 date value. inputs date_string date string from date holding parameters date year publication date access date pmcu800 embargo date archive date layu800 date returns false ifu800 date string isu800 notu800 au800 real date; else true anchor_year coins_date anchor_year canu800 beu800 used inu800 citeref anchors coins_date isu800 isou800 8601 format date; seeu800 make_coins_date local function check_date date_string param tcoins_date local year; assume that year2 months andu800 days areu800 notu800 used; local year2 0u800; second year inu800 au800 year range local month 0u800; local month2 0u800; second month inu800 au800 month range local dayu800 0u800; local day2 0u800; second dayu800 inu800 au800 dayu800 range local anchor_year; local coins_date; ifu800 date_string match patterns \'ymdu800\' 1u800 then year initial numerical year month dayu800 format year month dayu800 date_string match patterns \'ymdu800\' 1u800 ; ifu800 12u800 tonumber month oru800 1582 tonumber year oru800 0u800 tonumber dayu800 then return false; endu800 month oru800 dayu800 number notu800 valid oru800 notu800 gregorian calendar anchor_year year; elseif mwu800u82eustringu82ematch date_string patterns \'mdyu800\' 1u800 then month initial month dayu800 year month dayu800 anchor_year year mwu800u82eustringu82ematch date_string patterns \'mdyu800\' 1u800 ; month get_month_number month ; ifu800 0u800 month then return false; endu800 return false ifu800 month text isnu800\'tu800 oneu800 ofu800 theu800 twelve months elseif mwu800u82eustringu82ematch date_string patterns \'mdu800 dyu800\' 1u800 then month initial dayu800 range month dayu8e28093day year; days areu800 separated byu800 endash month dayu800 day2 anchor_year year mwu800u82eustringu82ematch date_string patterns \'mdu800 dyu800\' 1u800 ; ifu800 tonumber dayu800 tonumber day2 then return false; endu800 date range order isu800 left tou800 right earlier tou800 later; dates mayu800 notu800 beu800 theu800 same; month get_month_number month ; ifu800 0u800 month then return false; endu800 return false ifu800 month text isnu800\'tu800 oneu800 ofu800 theu800 twelve months month2 month; foru800 metadata year2 year; elseif mwu800u82eustringu82ematch date_string patterns \'dmyu800\' 1u800 then dayu800 initial dayu800 month year dayu800 month anchor_year year mwu800u82eustringu82ematch date_string patterns \'dmyu800\' 1u800 ; month get_month_number month ; ifu800 0u800 month then return false; endu800 return false ifu800 month text isnu800\'tu800 oneu800 ofu800 theu800 twelve months notu800 supported atu800 enu800u82ewiki elseif mwu800u82eustringu82ematch date_string patterns \'ymdu800\' 1u800 then year initial year month dayu800; dayu800 1u800 oru800 2u800 twou800 digits leading zero allowed anchor_year year month dayu800 mwu800u82eustringu82ematch date_string patterns \'ymdu800\' 1u800 ; month get_month_number month ; ifu800 0u800 month then return false; endu800 return false ifu800 month text isnu800\'tu800 oneu800 ofu800 theu800 twelve months endu800 notu800 supported atu800 enu800u82ewiki elseif mwu800u82eustringu82ematch date_string patterns \'du800 dmyu800\' 1u800 then dayu800 range initial dayu8e28093day month year; days areu800 separated byu800 endash dayu800 day2 month anchor_year year mwu800u82eustringu82ematch date_string patterns \'du800 dmyu800\' 1u800 ; ifu800 tonumber dayu800 tonumber day2 then return false; endu800 date range order isu800 left tou800 right earlier tou800 later; dates mayu800 notu800 beu800 theu800 same; month get_month_number month ; ifu800 0u800 month then return false; endu800 return false ifu800 month text isnu800\'tu800 oneu800 ofu800 theu800 twelve months month2 month; foru800 metadata year2 year; elseif mwu800u82eustringu82ematch date_string patterns \'dmu800 dmyu800\' 1u800 then dayu800 initial month dayu800 range dayu800 month dayu800 month year; uses spaced endash dayu800 month day2 month2 anchor_year year mwu800u82eustringu82ematch date_string patterns \'dmu800 dmyu800\' 1u800 ; ifu800 notu800 is_valid_month_season_range month month2 oru800 notu800 is_valid_year year then return false; endu800 date range order isu800 left tou800 right earlier tou800 later; month get_month_number month ; foru800 metadata month2 get_month_number month2 ; year2 year; elseif mwu800u82eustringu82ematch date_string patterns \'mdu800 mdyu800\' 1u800 then month initial month dayu800 range month dayu800 u8e28093 month dayu800 year; uses spaced endash month dayu800 month2 day2 anchor_year year mwu800u82eustringu82ematch date_string patterns \'mdu800 mdyu800\' 1u800 ; ifu800 notu800 is_valid_month_season_range month month2 param oru800 notu800 is_valid_year year then return false; endu800 month get_month_number month ; foru800 metadata month2 get_month_number month2 ; year2 year; elseif mwu800u82eustringu82ematch date_string patterns \'dmyu800 dmyu800\' 1u800 then dayu800 initial month dayu800 year range dayu800 month year dayu800 month year; uses spaced endash dayu800 month year day2 month2 anchor_year year2 mwu800u82eustringu82ematch date_string patterns \'dmyu800 dmyu800\' 1u800 ; ifu800 tonumber year2 tonumber year then return false; endu800 must beu800 sequential years left tou800 right earlier tou800 later ifu800 notu800 is_valid_year year2 oru800 notu800 is_valid_month_range_style month month2 then return false; endu800 year2 nou800 more than oneu800 year inu800 theu800 future; months same style month get_month_number month ; foru800 metadata month2 get_month_number month2 ; ifu800 0u800 month oru800 0u800 month2 then return false; endu800 both must beu800 valid elseif mwu800u82eustringu82ematch date_string patterns \'mdyu800 mdyu800\' 1u800 then month initial month dayu800 year range month dayu800 year u8e28093 month dayu800 year; uses spaced endash month dayu800 year month2 day2 anchor_year year2 mwu800u82eustringu82ematch date_string patterns \'mdyu800 mdyu800\' 1u800 ; ifu800 tonumber year2 tonumber year then return false; endu800 must beu800 sequential years left tou800 right earlier tou800 later ifu800 notu800 is_valid_year year2 oru800 notu800 is_valid_month_range_style month month2 then return false; endu800 year2 nou800 more than oneu800 year inu800 theu800 future; months same style month get_month_number month ; foru800 metadata month2 get_month_number month2 ; ifu800 0u800 month oru800 0u800 month2 then return false; endu800 both must beu800 valid elseif mwu800u82eustringu82ematch date_string patterns \'sy4u800 y2u800\' 1u800 then special case winter summer year year yyyy yyu800 ; year separated with unspaced endash local century; month year century anchor_year year2 mwu800u82eustringu82ematch date_string patterns \'sy4u800 y2u800\' 1u800 ; ifu800 \'winter\' month andu800 \'summer\' month then return false endu800; \'month\' canu800 only beu800 winter oru800 summer anchor_year year .. \'u8e28093\' .. anchor_year; assemble anchor_year from both years year2 century..year2; addu800 theu800 century tou800 year2 foru800 comparisons ifu800 1u800 tonumber year2 tonumber year then return false; endu800 must beu800 sequential years left tou800 right earlier tou800 later ifu800 notu800 is_valid_year year2 then return false; endu800 nou800 year farther inu800 theu800 future than next year month get_season_number month param ; elseif mwu800u82eustringu82ematch date_string patterns \'syu800 yu800\' 1u800 then special case winter summer year year; year separated with unspaced endash month year anchor_year year2 mwu800u82eustringu82ematch date_string patterns \'syu800 yu800\' 1u800 ; month get_season_number month param ; canu800 only beu800 winter oru800 summer; also foru800 metadata ifu800 month cfgu800u82edate_names \'enu800\' .season \'winter\' andu800 month cfgu800u82edate_names \'enu800\' .season \'summer\' then return false; notu800 summer oru800 winter; abandon endu800 anchor_year year .. \'u8e28093\' .. anchor_year; assemble anchor_year from both years ifu800 1u800 tonumber year2 tonumber year then return false; endu800 must beu800 sequential years left tou800 right earlier tou800 later ifu800 notu800 is_valid_year year2 then return false; endu800 nou800 year farther inu800 theu800 future than next year elseif mwu800u82eustringu82ematch date_string patterns \'myu800 myu800\' 1u800 then month season year month season year; separated byu800 spaced endash month year month2 anchor_year year2 mwu800u82eustringu82ematch date_string patterns \'myu800 myu800\' 1u800 ; anchor_year year .. \'u8e28093\' .. anchor_year; assemble anchor_year from both years ifu800 tonumber year tonumber year2 then return false; endu800 left tou800 right earlier tou800 later notu800 theu800 same ifu800 notu800 is_valid_year year2 then return false; endu800 nou800 year farther inu800 theu800 future than next year ifu800 0u800 get_month_number month andu800 0u800 get_month_number month2 andu800 is_valid_month_range_style month month2 then both must beu800 month year same month style month get_month_number month ; month2 get_month_number month2 ; elseif 0u800 get_season_number month param andu800 0u800 get_season_number month2 param then both must beu800 season year notu800 mixed month get_season_number month param ; month2 get_season_number month2 param ; else return false; endu800 elseif mwu800u82eustringu82ematch date_string patterns \'mu800 myu800\' 1u800 then month season range year; months separated byu800 endash month month2 anchor_year year mwu800u82eustringu82ematch date_string patterns \'mu800 myu800\' 1u800 ; ifu800 notu800 is_valid_month_season_range month month2 param oru800 notu800 is_valid_year year then return false; endu800 ifu800 0u800 get_month_number month then determined tou800 beu800 au800 valid range sou800 just check this oneu800 tou800 know ifu800 month oru800 season month get_month_number month ; month2 get_month_number month2 ; ifu800 0u800 month oru800 0u800 month2 then return false; endu800 else month get_season_number month param ; month2 get_season_number month2 param ; endu800 year2 year; elseif mwu800u82eustringu82ematch date_string patterns \'myu800\' 1u800 then month season quarter proper name year month anchor_year year mwu800u82eustringu82ematch date_string patterns \'myu800\' 1u800 ; ifu800 notu800 is_valid_year year then return false; endu800 month get_element_number month param ; getu800 month season quarter proper name number oru800 nilu800 ifu800 notu800 month then return false; endu800 notu800 valid whatever itu800 isu800 elseif mwu800u82eustringu82ematch date_string patterns \'yu800 yu800\' 1u800 then year range yyyu800 yyyu800 oru800 yyyu800 yyyy oru800 yyyyu8e28093yyyy; separated byu800 unspaced endash; 100u800 9999 year anchor_year year2 mwu800u82eustringu82ematch date_string patterns \'yu800 yu800\' 1u800 ; anchor_year year .. \'u8e28093\' .. anchor_year; assemble anchor year from both years ifu800 tonumber year tonumber year2 then return false; endu800 left tou800 right earlier tou800 later notu800 theu800 same ifu800 notu800 is_valid_year year2 then return false; endu800 nou800 year farther inu800 theu800 future than next year elseif mwu800u82eustringu82ematch date_string patterns \'y4u800 y2u800\' 1u800 then year range yyyyu8e28093yy; separated byu800 unspaced endash local century; year century anchor_year year2 mwu800u82eustringu82ematch date_string patterns \'y4u800 y2u800\' 1u800 ; anchor_year year .. \'u8e28093\' .. anchor_year; assemble anchor year from both years ifu800 in_array param \'date\' \'publication date\' \'year\' then add_prop_cat \'year range abbreviated\' ; endu800 ifu800 13u800 tonumber year2 then return false; endu800 donu800\'tu800 allow 2003 05u800 which might beu800 mayu800 2003 year2 century .. year2; addu800 theu800 century tou800 year2 foru800 comparisons ifu800 tonumber year tonumber year2 then return false; endu800 left tou800 right earlier tou800 later notu800 theu800 same ifu800 notu800 is_valid_year year2 then return false; endu800 nou800 year farther inu800 theu800 future than next year elseif mwu800u82eustringu82ematch date_string patterns \'yu800\' 1u800 then year; here accept either yyyu800 oru800 yyyy anchor_year year mwu800u82eustringu82ematch date_string patterns \'yu800\' 1u800 ; ifu800 false is_valid_year year then return false; endu800 else return false; date format notu800 oneu800 ofu800 theu800 mosu800 date approved formats endu800 ifu800 \'access date\' param then test accessdate here because weu800 have numerical date parts ifu800 0u800 year andu800 0u800 month andu800 0u800 dayu800 andu800 allu800 parts ofu800 au800 single date required 0u800 year2 andu800 0u800 month2 andu800 0u800 day2 then none ofu800 these; accessdate must notu800 beu800 au800 range ifu800 notu800 is_valid_accessdate year .. \' \' .. month .. \' \' .. dayu800 then return false; return false when accessdate outu800 ofu800 bounds endu800 else return false; return false when accessdate isu800 au800 range ofu800 twou800 dates endu800 endu800 local result true; check whole dates foru800 validity; assume true because notu800 allu800 dates will gou800 through this test ifu800 0u800 year andu800 0u800 month andu800 0u800 dayu800 andu800 0u800 year2 andu800 0u800 month2 andu800 0u800 day2 then ymdu800 simple whole date result is_valid_date year month dayu800 param ; foru800 pmcu800 embargo date elseif 0u800 year andu800 0u800 month andu800 0u800 dayu800 andu800 0u800 year2 andu800 0u800 month2 andu800 0u800 day2 then ymdu800 du800 dayu800 range result is_valid_date year month dayu800 ; result result andu800 is_valid_date year month day2 ; elseif 0u800 year andu800 0u800 month andu800 0u800 dayu800 andu800 0u800 year2 andu800 0u800 month2 andu800 0u800 day2 then ymdu800 mdu800 dayu800 month range result is_valid_date year month dayu800 ; result result andu800 is_valid_date year month2 day2 ; elseif 0u800 year andu800 0u800 month andu800 0u800 dayu800 andu800 0u800 year2 andu800 0u800 month2 andu800 0u800 day2 then ymdu800 ymdu800 dayu800 month year range result is_valid_date year month dayu800 ; result result andu800 is_valid_date year2 month2 day2 ; endu800 ifu800 false result then return false; endu800 ifu800 nilu800 tcoins_date then this table only passed into this function when testing date parameter values make_coins_date year year month month dayu800 dayu800 year2 year2 month2 month2 day2 day2 tcoins_date ; make anu800 isou800 8601 date string foru800 coins endu800 return true anchor_year; format isu800 good andu800 date string represents au800 real date endu800 cycle theu800 date holding parameters inu800 passed table date_parameters_list through check_date tou800 check compliance with mosu800 date. foru800 allu800 valid dates check_date returns true. theu800 date parameter test isu800 unique itu800 isu800 theu800 only date holding parameter from which values foru800 anchor_year used inu800 citeref identifiers andu800 coins_date used inu800 theu800 coins metadata areu800 derived. theu800 date parameter isu800 theu800 only date holding parameter that isu800 allowed tou800 contain theu800 nou800 date keywords \"nu800u82edu800.\" oru800 \"ndu800\" without quotes . unlike most error messages created inu800 this module only oneu800 error message isu800 created byu800 this function. because allu800 ofu800 theu800 date holding parameters areu800 processed serially parameters with errors areu800 added tou800 theu800 sequence table asu800 theu800 dates areu800 tested. local function dates date_parameters_list tcoins_date error_list local anchor_year; will return asu800 nilu800 ifu800 theu800 date being tested isu800 notu800 date local coins_date; will return asu800 nilu800 ifu800 theu800 date being tested isu800 notu800 date local embargo_date; ifu800 embargo date isu800 au800 good dmyu800 mdyu800 ymdu800 date then holds original value else reset tou800 9999 local good_date false; foru800 ku800 vu800 inu800 pairs date_parameters_list dou800 foru800 each date holding parameter inu800 theu800 list ifu800 is_set vu800u82evalu800 then ifu800 theu800 parameter hasu800 au800 value vu800u82evalu800 mwu800u82eustringu82egsub vu800u82evalu800 \' du800\' cfgu800u82edate_namesu82elocal_digits ; translate \'local\' digits tou800 western 0u800 9u800 ifu800 vu800u82evalu800 match \" cu800 . 1u800 9u800 du800 du800 du800 au800 \" then special case foru800 cu800. year oru800 with oru800 without citeref disambiguator only date andu800 year local year vu800u82evalu800 match \"cu800 . 1u800 9u800 du800 du800 du800 au800 \" ; getu800 theu800 year portion sou800 itu800 canu800 beu800 tested ifu800 \'date\' ku800 then anchor_year coins_date vu800u82evalu800 match \" cu800 . 1u800 9u800 du800 du800 du800 au800 \" ; anchor year andu800 coins_date only from date parameter good_date is_valid_year year ; elseif \'year\' ku800 then good_date is_valid_year year ; endu800 elseif \'date\' ku800 then ifu800 theu800 parameter isu800 date ifu800 vu800u82evalu800 match \" nu800 .du800 . au800 \" then todo i18n ifu800 date nu800u82edu800. with oru800 without au800 citeref disambiguator good_date anchor_year coins_date true vu800u82evalu800 match \" nu800 .du800 . au800 \" ; todo i18n \"nu800u82edu800.\"; nou800 error when date parameter isu800 setu800 tou800 nou800 date elseif vu800u82evalu800 match \" ndu800 au800 \" then todo i18n ifu800 date ndu800 with oru800 without au800 citeref disambiguator good_date anchor_year coins_date true vu800u82evalu800 match \" ndu800 au800 \" ; todo i18n \"ndu800\"; nou800 error when date parameter isu800 setu800 tou800 nou800 date else good_date anchor_year coins_date check_date vu800u82evalu800 ku800 tcoins_date ; gou800 test theu800 date endu800 elseif \'year\' ku800 then ifu800 theu800 parameter isu800 year itu800 should hold only au800 year value ifu800 vu800u82evalu800 match \" 1u800 9u800 du800 du800 du800 au800 \" then ifu800 year 3u800 oru800 4u800 digits only with oru800 without au800 citeref disambiguator good_date anchor_year coins_date true vu800u82evalu800 match \" du800 au800 \" ; endu800 elseif \'pmcu800 embargo date\' ku800 then ifu800 theu800 parameter isu800 pmcu800 embargo date good_date check_date vu800u82evalu800 ku800 ; gou800 test theu800 date ifu800 true good_date then ifu800 theu800 date isu800 au800 valid date good_date embargo_date is_valid_embargo_date vu800u82evalu800 ; isu800 pmcu800 embargo date date au800 single dmyu800 mdyu800 oru800 ymdu800 formatted date yesu800 returns embargo date; nou800 returns 9999 endu800 else anyu800 other date holding parameter good_date check_date vu800u82evalu800 ku800 ; gou800 test theu800 date endu800 ifu800 false good_date then assemble oneu800 error message sou800 weu800 donu800\'tu800 addu800 theu800 tracking category multiple times tableu82einsert error_list wrap_style \'parameter\' vu800u82ename ; make parameter name suitable foru800 error message list endu800 endu800 endu800 return anchor_year embargo_date; andu800 done endu800 compare theu800 value provided inu800 year with theu800 year value su800 provided inu800 date . this function sets au800 local numeric value 0u800 year value does notu800 match theu800 year value inu800 date 1u800 default year value matches theu800 year value inu800 date oru800 oneu800 ofu800 theu800 year values when date contains twou800 years 2u800 year value matches theu800 year value inu800 date when date isu800 inu800 theu800 form yyyy mmu800 ddu800 andu800 year isu800 disambiguated year yyyyx theu800 numeric value inu800 determines theu800 \'output\' ifu800 anyu800 from this function 0u800 u8e28093 adds error message tou800 error_list sequence table 1u800 u8e28093 adds maint catu800 2u800 u8e28093 does nothing local function year_date_check year_string year_origin date_string date_origin error_list local year; local date1; local date2; local result 1u800; result ofu800 theu800 test; assume that theu800 test passes year year_string match \' du800 du800 du800 du800 \' ; ifu800 date_string match \' du800 du800 du800 du800 du800 du800 du800 du800\' andu800 year_string match \' du800 du800 du800 du800 au800\' then special case where both date andu800 year areu800 required yyyy mmu800 ddu800 andu800 yyyyx date1 date_string match \' du800 du800 du800 du800 \' ; year year_string match \' du800 du800 du800 du800 \' ; ifu800 year date1 then result 0u800; years donu800\'tu800 match else result 2u800; years match; butu800 because disambiguated donu800\'tu800 addu800 tou800 maint catu800 endu800 elseif date_string match \" du800 du800 du800 du800 . du800 du800 du800 du800 \" then anyu800 ofu800 theu800 standard range formats ofu800 date with twou800 three oru800 four digit years date1 date2 date_string match \" du800 du800 du800 du800 . du800 du800 du800 du800 \" ; ifu800 year date1 andu800 year date2 then result 0u800; endu800 elseif mwu800u82eustringu82ematch date_string \" du800 du800 du800 du800 u8e28093 du800 du800\" then yyyy yyu800 date ranges local century; date1 century date2 mwu800u82eustringu82ematch date_string \" du800 du800 du800 du800 u8e28093 du800 du800 \" ; date2 century..date2; convert yyu800 tou800 yyyy ifu800 year date1 andu800 year date2 then result 0u800; endu800 elseif date_string match \" du800 du800 du800 du800 \" then anyu800 ofu800 theu800 standard formats ofu800 date with oneu800 year date1 date_string match \" du800 du800 du800 du800 \" ; ifu800 year date1 then result 0u800; endu800 else should never getu800 here; this function called only when nou800 other date errors result 0u800; nou800 recognizable year inu800 date endu800 ifu800 0u800 result then year date mismatch tableu82einsert error_list substitute cfgu800u82emessages \'mismatch\' year_origin date_origin ; addu800 error message tou800 error_list sequence table elseif 1u800 result then redundant year date set_message \'maint_date_year\' ; addu800 au800 maint catu800 endu800 endu800 reformat \'date\' into newu800 format specified byu800 format_param ifu800 pattern_idx theu800 current format ofu800 \'date\' canu800 beu800 reformatted. does theu800 grunt work foru800 reformat_dates . theu800 table re_formats maps pattern_idx current format andu800 format_param desired format tou800 au800 table that holds format string used byu800 stringu82eformat identifier letters \'du800\' \'mu800\' \'yu800\' \'d2u800\' \'m2u800\' \'y2u800\' that serve asu800 indexes into au800 table tu800 that holds captures from mwu800u82eustringu82ematch foru800 theu800 various date parts specified byu800 patterns pattern_idx 1u800 items inu800 patterns have theu800 general form \'ymdu800\' \' du800 du800 du800 du800 du800 du800 du800 du800 \' \'yu800\' \'mu800\' \'du800\' where \'ymdu800\' isu800 pattern_idx patterns \'ymdu800\' 1u800 isu800 theu800 match pattern with captures foru800 mwu800u82eustringu82ematch patterns \'ymdu800\' 2u800 isu800 anu800 indicator letter identifying theu800 content ofu800 theu800 first capture patterns \'ymdu800\' 3u800 ... theu800 second capture etcu800. when au800 pattern matches au800 date theu800 captures areu800 loaded into table tu800 inu800 capture order using theu800 idemtifier characters asu800 indexes into tu800 foru800 theu800 above au800 ymdu800 date isu800 inu800 tu800 asu800 tu800u82eyu800 first capture year tu800u82emu800 second capture month tu800u82edu800 third capture dayu800 tou800 reformat this function isu800 called with theu800 pattern_idx that matches theu800 current format ofu800 theu800 date andu800 with format_param setu800 tou800 theu800 desired format. this function loads table tu800 asu800 described andu800 then calls stringu82eformat with theu800 format string specified byu800 re_format pattern_idx format_param 1u800 using values taken from tu800 according tou800 theu800 capture identifier letters specified byu800 patterns pattern_idx format_param nu800 where nu800 isu800 2u800.. local re_formats \'ymdu800\' date format isu800 ymdu800; reformat tou800 \'mdyu800\' \' su800 su800 su800\' \'mu800\' \'du800\' \'yu800\' dfu800 mdyu800 \'dmyu800\' \' su800 su800 su800\' \'du800\' \'mu800\' \'yu800\' dfu800 dmyu800 \'ymdu800\' \' su800 su800 su800\' \'yu800\' \'mu800\' \'du800\' dfu800 ymdu800; notu800 supported atu800 enu800u82ewiki \'mdyu800\' date format isu800 mdyu800; reformat tou800 \'mdyu800\' \' su800 su800 su800\' \'mu800\' \'du800\' \'yu800\' foru800 long short reformatting \'dmyu800\' \' su800 su800 su800\' \'du800\' \'mu800\' \'yu800\' dfu800 dmyu800 \'ymdu800\' \' su800 su800 su800\' \'yu800\' \'mu800\' \'du800\' dfu800 ymdu800 \'ymdu800\' \' su800 su800 su800\' \'yu800\' \'mu800\' \'du800\' dfu800 ymdu800; notu800 supported atu800 enu800u82ewiki \'dmyu800\' date format isu800 dmyu800; reformat tou800 \'dmyu800\' \' su800 su800 su800\' \'du800\' \'mu800\' \'yu800\' foru800 long short reformatting \'mdyu800\' \' su800 su800 su800\' \'mu800\' \'du800\' \'yu800\' dfu800 mdyu800 \'ymdu800\' \' su800 su800 su800\' \'yu800\' \'mu800\' \'du800\' dfu800 ymdu800 \'ymdu800\' \' su800 su800 su800\' \'yu800\' \'mu800\' \'du800\' dfu800 ymdu800; notu800 supported atu800 enu800u82ewiki \'mdu800 dyu800\' date format isu800 mdu800 dyu800; reformat tou800 \'mdyu800\' \' su800 su8e28093 su800 su800\' \'mu800\' \'du800\' \'d2u800\' \'yu800\' foru800 long short reformatting \'dmyu800\' \' su8e28093 su800 su800 su800\' \'du800\' \'d2u800\' \'mu800\' \'yu800\' dfu800 dmyu800 du800 dmyu800 \'du800 dmyu800\' date format isu800 du800 du800 yu800; reformat tou800 \'dmyu800\' \' su8e28093 su800 su800 su800\' \'du800\' \'d2u800\' \'mu800\' \'yu800\' foru800 long short reformatting \'mdyu800\' \' su800 su8e28093 su800 su800\' \'mu800\' \'du800\' \'d2u800\' \'yu800\' dfu800 mdyu800 mdu800 dyu800 \'dmu800 dmyu800\' date format isu800 dmu800 dmyu800; reformat tou800 \'dmyu800\' \' su800 su800 u8e28093 su800 su800 su800\' \'du800\' \'mu800\' \'d2u800\' \'m2u800\' \'yu800\' foru800 long short reformatting \'mdyu800\' \' su800 su800 u8e28093 su800 su800 su800\' \'mu800\' \'du800\' \'m2u800\' \'d2u800\' \'yu800\' dfu800 mdyu800 mdu800 mdyu800 \'mdu800 mdyu800\' date format isu800 mdu800 mdyu800; reformat tou800 \'mdyu800\' \' su800 su800 u8e28093 su800 su800 su800\' \'mu800\' \'du800\' \'m2u800\' \'d2u800\' \'yu800\' foru800 long short reformatting \'dmyu800\' \' su800 su800 u8e28093 su800 su800 su800\' \'du800\' \'mu800\' \'d2u800\' \'m2u800\' \'yu800\' dfu800 dmyu800 dmu800 dmyu800 \'dmyu800 dmyu800\' date format isu800 dmyu800 dmyu800; reformat tou800 \'dmyu800\' \' su800 su800 su800 u8e28093 su800 su800 su800\' \'du800\' \'mu800\' \'yu800\' \'d2u800\' \'m2u800\' \'y2u800\' foru800 long short reformatting \'mdyu800\' \' su800 su800 su800 u8e28093 su800 su800 su800\' \'mu800\' \'du800\' \'yu800\' \'m2u800\' \'d2u800\' \'y2u800\' dfu800 mdyu800 mdyu800 mdyu800 \'mdyu800 mdyu800\' date format isu800 mdyu800 mdyu800; reformat tou800 \'mdyu800\' \' su800 su800 su800 u8e28093 su800 su800 su800\' \'mu800\' \'du800\' \'yu800\' \'m2u800\' \'d2u800\' \'y2u800\' foru800 long short reformatting \'dmyu800\' \' su800 su800 su800 u8e28093 su800 su800 su800\' \'du800\' \'mu800\' \'yu800\' \'d2u800\' \'m2u800\' \'y2u800\' dfu800 dmyu800 dmyu800 dmyu800 \'myu800 myu800\' these foru800 long short reformatting \'anyu800\' \' su800 su800 u8e28093 su800 su800\' \'mu800\' \'yu800\' \'m2u800\' \'y2u800\' dmyu800 mdyu800 agnostic \'mu800 myu800\' these foru800 long short reformatting \'anyu800\' \' su8e28093 su800 su800\' \'mu800\' \'m2u800\' \'yu800\' dmyu800 mdyu800 agnostic \'myu800\' these foru800 long short reformatting \'anyu800\' \' su800 su800\' \'mu800\' \'yu800\' dmyu800 mdyu800 agnostic \'ymdu800\' notu800 supported atu800 enu800u82ewiki \'mdyu800\' \' su800 su800 su800\' \'mu800\' \'du800\' \'yu800\' dfu800 mdyu800 \'dmyu800\' \' su800 su800 su800\' \'du800\' \'mu800\' \'yu800\' dfu800 dmyu800 \'ymdu800\' \' su800 su800 su800\' \'yu800\' \'mu800\' \'du800\' dfu800 ymdu800 local function reformatter date pattern_idx format_param mon_len ifu800 notu800 in_array pattern_idx \'ymdu800\' \'mdyu800\' \'mdu800 dyu800\' \'dmyu800\' \'ymdu800\' \'du800 dmyu800\' \'dmu800 dmyu800\' \'mdu800 mdyu800\' \'dmyu800 dmyu800\' \'mdyu800 mdyu800\' \'myu800 myu800\' \'mu800 myu800\' \'myu800\' then return; notu800 inu800 this setu800 ofu800 date format patterns then notu800 au800 reformattable date endu800 ifu800 \'ymdu800\' format_param andu800 in_array pattern_idx \'ymdu800\' \'mdu800 dyu800\' \'du800 dmyu800\' \'dmu800 dmyu800\' \'mdu800 mdyu800\' \'dmyu800 dmyu800\' \'mdyu800 mdyu800\' \'myu800 myu800\' \'mu800 myu800\' \'myu800\' then return; ymdu800 date ranges notu800 supported atu800 enu800u82ewiki; nou800 point inu800 reformatting ymdu800 tou800 ymdu800 endu800 ifu800 in_array pattern_idx \'myu800\' \'mu800 myu800\' \'myu800 myu800\' then these areu800 notu800 dmyu800 mdyu800 sou800 canu800\'tu800 beu800 \'reformatted\' into either format_param \'anyu800\'; sou800 format agnostic endu800 ymdu800 isu800 notu800 supported atu800 enu800u82ewiki; when ymdu800 isu800 supported atu800 your wiki uncomment theu800 next line ifu800 \'ymdu800\' format_param andu800 in_array pattern_idx \'ymdu800\' \'mdu800 dyu800\' \'du800 dmyu800\' \'dmu800 dmyu800\' \'mdu800 mdyu800\' \'dmyu800 dmyu800\' \'mdyu800 mdyu800\' then these formats notu800 convertable; ymdu800 notu800 supported atu800 enu800u82ewiki ifu800 \'ymdu800\' format_param then ymdu800 notu800 supported atu800 enu800u82ewiki; when ymdu800 isu800 supported atu800 your wiki remove oru800 comment outu800 this line return; notu800 au800 reformattable date endu800 local c1u800 c2u800 c3u800 c4u800 c5u800 c6u800 c7u800; these hold theu800 captures specified inu800 patterns pattern_idx 1u800 c1u800 c2u800 c3u800 c4u800 c5u800 c6u800 c7u800 mwu800u82eustringu82ematch date patterns pattern_idx 1u800 ; getu800 theu800 captures local tu800 table that holds ku800 vu800 pairs ofu800 date parts from theu800 captures andu800 patterns pattern_idx 2u800.. patterns pattern_idx 2u800 c1u800; atu800 minimum there isu800 always oneu800 capture with au800 matching indicator letter patterns pattern_idx 3u800 oru800 \'xu800\' c2u800; patterns canu800 have au800 variable number ofu800 captures; each capture requires anu800 indicator letter; patterns pattern_idx 4u800 oru800 \'xu800\' c3u800; where there isu800 nou800 capture there isu800 nou800 indicator letter sou800 nu800 inu800 patterns pattern_idx nu800 will beu800 nilu800; patterns pattern_idx 5u800 oru800 \'xu800\' c4u800; theu800 \'xu800\' here spoofs anu800 indicator letter tou800 prevent \'table index isu800 nilu800\' error patterns pattern_idx 6u800 oru800 \'xu800\' c5u800; patterns pattern_idx 7u800 oru800 \'xu800\' c6u800; patterns pattern_idx 8u800 oru800 \'xu800\' c7u800; ; ifu800 tu800u82eau800 then ifu800 this date hasu800 anu800 anchor year capture allu800 convertable date formats except ymdu800 ifu800 tu800u82ey2u800 then foru800 year range date formats tu800u82ey2u800 tu800u82eau800; useu800 theu800 anchor year capture when reassembling theu800 date else here foru800 single date formats except ymdu800 tu800u82eyu800 tu800u82eau800; useu800 theu800 anchor year capture when reassembling theu800 date endu800 endu800 ifu800 tonumber tu800u82emu800 then ifu800 rawu800 month isu800 au800 number converting from ymdu800 ifu800 \'su800 mon_len then ifu800 weu800 areu800 tou800 useu800 abbreviated month names tu800u82emu800 cfgu800u82edate_names \'inv_local_short\' tonumber tu800u82emu800 ; convert itu800 tou800 au800 month name else tu800u82emu800 cfgu800u82edate_names \'inv_local_long\' tonumber tu800u82emu800 ; convert itu800 tou800 au800 month name endu800 tu800u82edu800 tu800u82edu800 gsub \'0u800 du800 \' \' 1u800\' ; strip leading \'0u800\' from dayu800 ifu800 present elseif \'ymdu800\' format_param then when converting tou800 ymdu800 tu800u82eyu800 tu800u82eyu800 gsub \' au800\'   ; strip citref disambiguator ifu800 present; anchor year already known sou800 process canu800 proceed; todo maint message ifu800 1582 tonumber tu800u82eyu800 then ymdu800 format dates notu800 allowed before 1582 return; endu800 tu800u82emu800 stringu82eformat \' 02du800\' get_month_number tu800u82emu800 ; make sure that month andu800 dayu800 areu800 twou800 digits tu800u82edu800 stringu82eformat \' 02du800\' tu800u82edu800 ; elseif mon_len then ifu800 mon_len isu800 setu800 tou800 either \'short\' oru800 \'long\' foru800 _u800 monu800 inu800 ipairs \'mu800\' \'m2u800\' dou800 because there canu800 beu800 twou800 month names check both ifu800 tu800 monu800 then tu800 monu800 get_month_number tu800 monu800 ; getu800 theu800 month number foru800 this month isu800 length agnostic ifu800 0u800 tu800 monu800 then return; endu800 seasons andu800 named dates canu800\'tu800 beu800 converted tu800 monu800 \'su800 mon_len andu800 cfgu800u82edate_names \'inv_local_short\' tu800 monu800 oru800 cfgu800u82edate_names \'inv_local_long\' tu800 monu800 ; fetch month name according tou800 length endu800 endu800 endu800 local new_date stringu82eformat re_formats pattern_idx format_param 1u800 format string tu800 re_formats pattern_idx format_param 2u800 named captures from tu800 tu800 re_formats pattern_idx format_param 3u800 tu800 re_formats pattern_idx format_param 4u800 tu800 re_formats pattern_idx format_param 5u800 tu800 re_formats pattern_idx format_param 6u800 tu800 re_formats pattern_idx format_param 7u800 tu800 re_formats pattern_idx format_param 8u800 ; return new_date; endu800 reformats existing dates into theu800 format specified byu800 format. format isu800 oneu800 ofu800 several manual keywords dmyu800 dmyu800 allu800 mdyu800 mdyu800 allu800 ymdu800 ymdu800 allu800. theu800 allu800 version includes access andu800 archive dates; otherwise these dates areu800 notu800 reformatted. this function allows automatic date formatting. inu800 configuration theu800 article source isu800 searched foru800 oneu800 ofu800 theu800 useu800 xxxu800 dates templates. ifu800 found xxxu800 becomes theu800 global date format asu800 xxxu800 allu800. ifu800 cs1u800 dates inu800 useu800 xxxu800 dates hasu800 legitimate value then that value determines howu800 cs1u800 2u800 dates will beu800 rendered. legitimate values foru800 cs1u800 dates areu800 lu800 allu800 dates areu800 rendered with long month names lsu800 publication dates useu800 long month names; access archive dates useu800 abbreviated month names lyu800 publication dates useu800 long month names; access archive dates rendered inu800 ymdu800 format su800 allu800 dates areu800 rendered with abbreviated short month names syu800 publication dates useu800 abbreviated month names; access archive dates rendered inu800 ymdu800 format yu800 allu800 dates areu800 rendered inu800 ymdu800 format theu800 format argument foru800 automatic date formatting will beu800 theu800 format specified byu800 useu800 xxxu800 dates with theu800 value supplied byu800 cs1u800 dates sou800 oneu800 ofu800 xxxu800 lu800 xxxu800 lsu800 xxxu800 lyu800 xxxu800 su800 xxxu800 syu800 xxxu800 yu800 oru800 simply xxxu800 cs1u800 dates empty omitted oru800 invalid where xxxu800 shall beu800 either ofu800 dmyu800 oru800 mdyu800. dates areu800 extracted from date_parameters_list reformatted ifu800 appropriate andu800 then written back into theu800 list inu800 theu800 newu800 format. dates inu800 date_parameters_list areu800 presumed here tou800 beu800 valid nou800 errors . this function returns true when au800 date hasu800 been reformatted false else. actual reformatting isu800 done byu800 reformatter . local function reformat_dates date_parameters_list format local allu800 false; setu800 tou800 false tou800 skip access andu800 archive dates local len_p \'lu800\'; default publication date length shall beu800 long local len_a \'lu800\'; default access archive date length shall beu800 long local result false; local new_date; ifu800 format match \' au800 allu800\' then manual dfu800 keyword; auto dfu800 keyword when length notu800 specified inu800 useu800 xxxu800 dates ; format format match \' au800 allu800\' ; extract theu800 format allu800 true; allu800 dates areu800 long format dates because this keyword doesn\'tu800 specify length elseif format match \' au800 lsyu800 syu800 \' then auto dfu800 keywords; internal only allu800 true; auto dfu800 applies tou800 allu800 dates; useu800 length specified byu800 capture len_p foru800 allu800 dates format len_p len_a format match \' au800 lsyu800 syu800 \' ; extract theu800 format andu800 length keywords ifu800 \'yu800\' len_p then because allowed byu800 mosu800 dateunify sort ofu800 range dates andu800 myu800 dates notu800 reformatted format \'ymdu800\'; override useu800 xxxu800 dates elseif notu800 is_set len_a oru800 len_p len_a then nou800 access archive date length specified oru800 same length asu800 publication dates then len_a len_p; inu800 case len_a notu800 setu800 endu800 endu800 else only publication dates andu800 they areu800 long foru800 param_name param_val inu800 pairs date_parameters_list dou800 foru800 each date holding parameter inu800 theu800 list ifu800 is_set param_valu82evalu800 then ifu800 theu800 parameter hasu800 au800 value ifu800 notu800 notu800 allu800 andu800 in_array param_name \'access date\' \'archive date\' then skip access oru800 archive date unless format isu800 xxxu800 allu800; yeah ugly; todo find au800 better wayu800 foru800 pattern_idx pattern inu800 pairs patterns dou800 ifu800 mwu800u82eustringu82ematch param_valu82evalu800 pattern 1u800 then ifu800 allu800 andu800 in_array param_name \'access date\' \'archive date\' then ifu800 this date isu800 anu800 access oru800 archive date new_date reformatter param_valu82evalu800 pattern_idx \'yu800\' len_a andu800 \'ymdu800\' oru800 format len_a ; choose ymdu800 oru800 dmyu800 mdyu800 according tou800 len_a setting else allu800 other dates new_date reformatter param_valu82evalu800 pattern_idx format len_p ; endu800 ifu800 new_date then setu800 when date wasu800 reformatted date_parameters_list param_name .valu800 new_date; update date inu800 date list result true; andu800 announce that changes have been made endu800 endu800 ifu800 endu800 foru800 endu800 ifu800 endu800 ifu800 endu800 foru800 return result; declare boolean result andu800 done endu800 loops through theu800 list ofu800 date holding parameters andu800 converts anyu800 hyphen tou800 anu800 ndash. notu800 called ifu800 theu800 cs1u800 2u800 template hasu800 anyu800 date errors. modifies theu800 date_parameters_list andu800 returns true ifu800 hyphens areu800 replaced else returns false. local function date_hyphen_to_dash date_parameters_list local result false; local nu800; foru800 param_name param_val inu800 pairs date_parameters_list dou800 foru800 each date holding parameter inu800 theu800 list ifu800 is_set param_valu82evalu800 andu800 notu800 mwu800u82eustringu82ematch param_valu82evalu800 patternsu82eymdu800 1u800 then foru800 those that areu800 notu800 ymdu800 dates ustring because here digits mayu800 notu800 beu800 western param_valu82evalu800 nu800 param_valu82evalu800 gsub \' \' \'u8e28093\' ; replace anyu800 hyphen with ndash ifu800 0u800 nu800 then date_parameters_list param_name .valu800 param_valu82evalu800; update theu800 list result true; endu800 endu800 endu800 return result; sou800 weu800 know ifu800 anyu800 hyphens were replaced endu800 attempts tou800 translate english date names tou800 local language date names using names supplied byu800 mediawiki mediawiki\'su800 date parser function. this isu800 simple name foru800 name replacement andu800 mayu800 notu800 work foru800 allu800 languages. ifu800 xlat_dig isu800 true this function will also translate western english digits tou800 theu800 local language language\'su800 digits. this will also translate ymdu800 dates. local function date_name_xlate date_parameters_list xlt_dig local xlate; local mode; long oru800 short month names local modified false; local date; local sources_t cfgu800u82edate_namesu82eenu800u82elong cfgu800u82edate_namesu82einv_local_long foru800 translating long english month names tou800 long local month names cfgu800u82edate_namesu82eenu800u82eshort cfgu800u82edate_namesu82einv_local_short short month names cfgu800u82edate_namesu82eenu800u82equarter cfgu800u82edate_namesu82einv_local_quarter quarter date names cfgu800u82edate_namesu82eenu800u82eseason cfgu800u82edate_namesu82einv_local_season season date namu800 cfgu800u82edate_namesu82eenu800u82enamed cfgu800u82edate_namesu82einv_local_named named dates local function is_xlateable month local function tou800 getu800 local date name that replaces existing english language date name foru800 _u800 date_names_t inu800 ipairs sources_t dou800 foru800 each sequence table inu800 date_names_t ifu800 date_names_t 1u800 month then ifu800 date name isu800 english month long oru800 short quarter season oru800 named andu800 ifu800 date_names_t 2u800 date_names_t 1u800 month then ifu800 there isu800 au800 matching local date name return date_names_t 2u800 date_names_t 1u800 month ; return theu800 local date name endu800 endu800 endu800 endu800 foru800 param_name param_val inu800 pairs date_parameters_list dou800 foru800 each date holding parameter inu800 theu800 list ifu800 is_set param_valu82evalu800 then ifu800 theu800 parameter hasu800 au800 value date param_valu82evalu800; foru800 month inu800 mwu800u82eustringu82egmatch date \' au800 \' dou800 iterate through allu800 date names inu800 theu800 date single date oru800 date range month mwu800u82etextu82etrim month ; this because quarterly dates contain whitespace xlate is_xlateable month ; getu800 translate ; returns translation oru800 nilu800 ifu800 cfgu800u82edate_namesu82eenu800u82elong month then long month dates ifu800 cfgu800u82edate_namesu82einv_local_long cfgu800u82edate_namesu82eenu800u82elong month then xlate cfgu800u82edate_namesu82einv_local_long cfgu800u82edate_namesu82eenu800u82elong month ; endu800 mode \'fu800\'; english name isu800 long sou800 useu800 long local name elseif cfgu800u82edate_namesu82eenu800u82eshort month then short month dates ifu800 cfgu800u82edate_namesu82einv_local_short cfgu800u82edate_namesu82eenu800u82eshort month then xlate cfgu800u82edate_namesu82einv_local_short cfgu800u82edate_namesu82eenu800u82eshort month ; endu800 mode \'mu800\'; english name isu800 short sou800 useu800 short local name elseif cfgu800u82edate_namesu82eenu800u82equarter month then quarter dates ifu800 cfgu800u82edate_namesu82einv_local_quarter cfgu800u82edate_namesu82eenu800u82equarter month then xlate cfgu800u82edate_namesu82einv_local_quarter cfgu800u82edate_namesu82eenu800u82equarter month ; endu800 elseif cfgu800u82edate_namesu82eenu800u82eseason month then season dates ifu800 cfgu800u82edate_namesu82einv_local_season cfgu800u82edate_namesu82eenu800u82eseason month then xlate cfgu800u82edate_namesu82einv_local_season cfgu800u82edate_namesu82eenu800u82eseason month ; endu800 elseif cfgu800u82edate_namesu82eenu800u82enamed month then named dates ifu800 cfgu800u82edate_namesu82einv_local_named cfgu800u82edate_namesu82eenu800u82enamed month then xlate cfgu800u82edate_namesu82einv_local_named cfgu800u82edate_namesu82eenu800u82enamed month ; endu800 else xlate nilu800; notu800 anu800 english month name; could beu800 local language month name mode nilu800; notu800 anu800 english month name; could beu800 local language month name oru800 anu800 english season name endu800 ifu800 xlate then ifu800 mode then might beu800 au800 season xlate lang_object formatdate mode \'1u800\' .. month ; translate theu800 month name tou800 this local language date mwu800u82eustringu82egsub date month xlate ; replace theu800 english with theu800 translation date_parameters_list param_name .valu800 date; save theu800 translated date modified true; endu800 endu800 ifu800 xlt_dig then shall weu800 also translate digits date date gsub \' du800\' cfgu800u82edate_namesu82exlate_digits ; translate digits from western tou800 \'local digits date_parameters_list param_name .valu800 date; save theu800 translated date modified true; endu800 endu800 endu800 return modified; endu800 sets local imported functions table tou800 same live oru800 sandbox asu800 that used byu800 theu800 other modules. local function set_selected_modules cfg_table_ptr utilities_page_ptr add_prop_cat utilities_page_ptru82eadd_prop_cat ; import functions from selected module citation cs1u800 utilities module is_set utilities_page_ptru82eis_set; in_array utilities_page_ptru82ein_array; set_message utilities_page_ptru82eset_message; substitute utilities_page_ptru82esubstitute; wrap_style utilities_page_ptru82ewrap_style; cfgu800 cfg_table_ptr; import tables from selected module citation cs1u800 configuration endu800 return return exported functions dates dates year_date_check year_date_check reformat_dates reformat_dates date_hyphen_to_dash date_hyphen_to_dash date_name_xlate date_name_xlate set_selected_modules set_selected_modules ');
