Bruger:Sechinsic/Tilføjelse

Fra Wikipedia, den frie encyklopædi

Jeg forstiller mig allokeringen

local messages = {
key = value,
..
keyN = value,
}

er en slags funktions-definition. Det ligner godtnok en array allokering, men værdierne indeholder generiske variabler ($1 $2 $3 $4), og det giver ingen mening hvis disse variabler expanderes i den pågældende allokerings-ekspression, ex.

['published'] = ' (published $1)',
..
['sections'] = '§§ $1',

Den betydende nøgle - 'series' - må givetvis kaldes, og den literale streng 'series' - ekslusiv gåseøjne - er heldigvis ikke overvældende hyppig. Således findes i Citation/CS1:

Series = utilities.is_set (Series) and wrap_msg ('series', {sepc, Series}) or "";

Labels i tuborgklammerne må så, alt andet lige, korrespondere med variablerne $1 og $2 i 'array' allokeringen. Såvidt så godt.

Det er interessant de foregående versioner af Citation/CS1/Configuration altid har haft den samme definition af 'series',

['series'] = 'Serier $1',

og de foregående versioner af Citation/CS1 har da også et andet 'funktionskald', senest versionen af 5. maj 2021.

table.insert(s, wrap_msg ('series', SeriesNumber, use_lowercase));

Men med opdateringen af 27. dec 2021 og fremefter benyttes så formatet med tuborg-klammerne.

Det er nogenlunde klart hvordan 'wrap_msg()' forløber. Navnligt er der et 'cfg.messages[key]' hvor key er det første parameter til 'wrap_msg()', dvs. 'cfg.messages['series']'. Det er, såvidt jeg forstår koden, simpelthen dette 'series' med den allokerede værdi fra Citation/CS1/Configuration. 'cfg' definitionen er kommenteret som »table of configuration tables that are defined in Module:Citation/CS1/Configuration« men den højere videnskab i array-allokeringer der indeholder uopløste variabler kender jeg ikke.
Dels er 'wrap_msg()', som navnet antyder en wrapper for en mediawiki funktion,

mw.message.newRawMessage(msg,args):plain()

Kaldet til mediawiki er indirekte, indkapslet i et mellemliggende funktionskald til 'utilities.substitute' - fra enwiki sees både 'utilities.substitute()' og 'wrap_msg()' at være principielt uændret siden dag et.

I den Scribunto Lua reference som jeg hentede fra nettet i april måned 2015 står der

  • 4.5.12 mw.message:plain
msg:plain()
Substitutes the parameters and returns the message wikitext as-is.

Fra 'wrap_msg()' kommer dels det her 'cfg.message[key]' dels et 'SeriesNumber', i den gamle version, eller tuborgklammerne med labels, '{sepc,Series}, i den nye version, dvs.

mw.message.newRawMessage(cfg.message['series'],SeriesNumber):plain()

eller

mw.message.newRawMessage(cfg.message['series'],{sepc,Series}):plain()

Alt andet lige må disse parametre korrespondere til variablerne i ovennævnte array/funktions-allokering, altså ex.

'Serier $1'

hhv.

'$1 $2'

og for den nye version (siden 27 december 2021) giver allokeringen '$1 $2' så god mening.

Det der undrer mig her, er at den literale streng "Serier" - i den engelske version "Series" - jo altså så må slippe med ud i html-formateringen, uanset om der er 1 eller 2 variabler at expandere.

Hmm

Der kunne være noget magi gemt i 'cfg.message'. Den står der ikke noget om i Scribunto Lua manualen, så det er nok noget generisk tilhørende Lua programmerings-sproget..? På den anden side er det også en ledetråd at det foregående kald til 'wrap_msg()' sker med parameteret 'SeriesNumber' og det fremgår også af konteksten dette kald kun forekommer ved citationstypen 'cite episode' ol., ja faktisk forekommer den literale streng 'series' også kun i den kontekst.

Formateringen af boglige referencer, med det enslydende {{Citation}}-parameter 'series', processeres på anden vis,

Series = is_set(Series) and (sepc .. " " .. Series) or "";

Men med versionen af 27. dec. 2021 på dawiki kommer der en anden processering. Kaldet til 'wrap_msg()' forekommer i en ikke nærmere klart bestembar kontekst, men ihvertfald er det nogenlunde klart at dette kald nu ikke længere er specifik for 'cite episode'-typologien ol. mens den foregående version af kaldet til 'wrap_msg()' næsten genfindes i konteksten for denne her 'cite episode'-typologi ol. - iflg. kildekommentaren »Account for the oddities that are {{cite episode}} and {{cite serial}}«

table.insert(s, wrap_msg ('seriesnum', SeriesNumber, use_lowercase)); end

Det er så endelig tid at vende tilbage til Citation/CS1/Configuration og antagelsen om en skrivefejl:

['sections'] = '§§ $1',
['series'] = 'Serier $1',
-- MGA73: rettet fra '$1 $2', (som det var på dawiki)
-- $1 is sepc, $2 is series
['seriesnum'] = 'Series $1',
['translated'] = 'Oversat af $1',	
-- MGA73: rettet fra 'Translated by $1',

Det må være label 'seriesnum' der her påkræver oversættelse.