--ToDo: Aggiungere riconoscimento degli apici oltre alle virgolette in tutte le stringhelocal p=;
--funzione di estrazione per utilizzo multiplolocal function extract(x) face=string.match(x, "face%s*=%s*([%d%aæ,]+)") or string.match(x, 'face%s*=%s*"%s*([^"]+)"') size=string.match(x, 'size%s*=%s*"?%s*([-+]?%d+[pxtem%%]*)"?') or string.match(x, 'size%s*=%s*"?%s*([%a-]+)"?') color=string.match(x, 'color%s*=%s*"?%s*(rgb%([^)]+%))"?') or string.match(x, 'color%s*=%s*"?%s*(#?%w+)"?') style=string.match(x, 'style%s*=%s*"([^"]+)"') return end
--funzione per ricostruire lo stylelocal function build(a,b,c,d) --Mette insieme lo style if d
if a~=nil then d=d .. "color:" .. a .. ";" end if b~=nil then d=d .. "font-size:" .. b .. ";" end if c~=nil then d=d .. "font-family:" .. c .. ";" end
--Via le virgolette conclusive e restituisce style impacchettato return string.gsub(d, ";+$", "")end
local function convert(a,type)
if type
if type
--tabella semplificazione colore per i casi più semplici ctab = a = ctab[a] or aendreturn aend
function p.main(frame) str=frame.args[1] local substype--substype per eventuale spostamento testo if string.match(str, "
]+>%[%[[^%]]+]]<%/font>") then substype=1; --solo wikilink elseif string.match(str, "]+>%[http[^%]]+ [^%]]+]<%/font>") or string.match(str, "]+>%[\{\{fullurl[^%]]+ [^%]]+]<%/font>") then substype=2; --solo link esterno CON TITOLO elseif string.match(str, "]+>%[http[^%] ]+]<%/font>") or string.match(str, "]+>%[\{\{fullurl[^%] ]+]<%/font>") then return str; --solo link esterno SENZA TITOLO: il font colora il numero progressivo dall'esterno, lo span no; non ho trovato un modo per colorarlo con span interno. end --negli altri casi i risultati sono equivalenti --riduzione stringa al solo font di apertura e minuscolizza il tuttos=mw.ustring.lower(string.sub(str,1,string.find(str, ">")));--estrazione attributiattr=extract(s)
--torno ad attributi con nome per semplicitàface=attr[1]size=attr[2]color=attr[3]style=attr[4]
--conversione size e aggiustamento numeriif size~=nil then size=convert(size, "size") end--uscita di sicurezzaif size
"7" then return str end --font troppo grande, non sono riuscito a convertirlo
--conversione color ed eventuale aggiustamento cancellettoif color~=nil then color = convert(color, "color") end
-- elimina parametri duplicati, lascia quello in styleif style~=nil then style=string.gsub(style, "background%-color", "background%-clor") --workaround per evitare match sul bgcol if color~=nil and string.match(style, "color:") then color=nil end if size~=nil and string.match(style, "font%-size:") then size=nil end if face~=nil and string.match(style, "font%-family:") then face=nil end style=string.gsub(style, "background%-clor", "background%-color") --annullo il workaroundend
--Costruisce lo stylestyle=build(color, size, face, style)
--Controllo "di sicurezza": se lo style è (quasi) vuoto restituisce il testo di partenza e buonanotteif string.match(style, "^%s*$") then return str end
--Costruisce lo span e ci inserisce il testo (substype 0)span='
'text=string.gsub(str, "<%/?[Ff][Oo][Nn][Tt][^>]*>", "")result= span .. text .. ""--Spostamento per substype = 1if substype
elseif substype
return result
end
--funzione per accorpare due font/span con lo stesso testo in mezzofunction p.sempl(frame) str=frame.args[3] --estrazione parametri sparsi x=extract(mw.ustring.lower(frame.args[1])) y=extract(mw.ustring.lower(frame.args[2]))
--estrazione parametri dal primo style if x[4]~=nil then x[4]=string.gsub(x[4], "background%-color", "background%-clor") --workaround per evitare match sul bgcol c1=string.match(x[4], 'color:([^;"]+)') s1=string.match(x[4], 'font%-size:([^;"]+)') f1=string.match(x[4], 'font%-family:([^;"]+)') x[4]=string.gsub(string.gsub(string.gsub(x[4], 'font%-family:([^;"]+)', ""), 'font%-size:([^;"]+)', ""), 'color:([^;"]+)', "") x[4]=string.gsub(x[4], "background%-clor", "background%-color") --annullo il workaround end --estrazione parametri dal secondo style if y[4]~=nil then y[4]=string.gsub(y[4], "background%-color", "background%-clor") --workaround per evitare match sul bgcol c2=string.match(y[4], 'color:([^;"]+)') s2=string.match(y[4], 'font%-size:([^;"]+)') f2=string.match(y[4], 'font%-family:([^;"]+)') y[4]=string.gsub(string.gsub(string.gsub(y[4], 'font%-family:([^;"]+)', ""), 'font%-size:([^;"]+)', ""), 'color:([^;"]+)', "") y[4]=string.gsub(y[4], "background%-clor", "background%-color") --annullo il workaround end --Parametro univoco, ordine di priorità: style dentro, tag dentro, style fuori, tag fuori f=f2 or y[1] or f1 or x[1] s=s2 or y[2] or s1 or x[2] c=c2 or y[3] or c1 or x[3] --conversione size e aggiustamento numeri if s~=nil then s=convert(s, "size") end --uscita di sicurezza if s
"7" then return str end --font troppo grande, non sono riuscito a convertirlo
--conversione color ed eventuale aggiustamento cancelletto if c~=nil then c = convert(c, "color") end --Scorre i due style per trovare parametri uguali if x[4]~=nil and y[4]~=nil then --liste di attributi it1= string.gmatch(x[4], "([%a-]+:)") it2= string.gmatch(y[4], "([%a-]+:)") corr=; --table vuota di corrispondenze for i in it1 do for j in it2 do if i
return p