Module:Common
Documentation for this module may be created at Module:Common/doc
local getArgs = require('Module:Arguments').getArgs; local defArgs = require('Module:Arguments').defaultArgs; local common = {}; function common.FormatName( frame ) local args = defArgs(getArgs(frame), 1, "GlcNAca/b1-3Xyla-4Galb1-3GalNAca1-4(NeuAc?1-2NeuGc4Mea1-3)GalNAcb1-4(EtnP-6)GlcNAcb1-3Manb1-4Glcb1-1Cer"); local arg = args[1]; replacements = { ["alpha"] = "α", ["beta"] = "β", ["chi"] = "χ", ["delta"] = "δ", ["Delta"] = "Δ", ["epsilon"] = "ε", ["zeta"] = "ζ", ["phi"] = "φ", ["gamma"] = "γ", ["Gamma"] = "Γ", ["eta"] = "η", ["kappa"] = "κ", ["lambda"] = "λ", ["mu"] = "μ", ["nu"] = "ν", ["pi"] = "π", ["Pi"] = "Π", ["theta"] = "θ", ["tau"] = "τ", ["upsilon"] = "υ", ["Upsilon"] = "Υ", ["phi"] = "φ", ["psi"] = "ψ", ["xi"] = "ξ", ["omega"] = "ω", ["sigma"] = "σ", } if string.len(arg) > 0 then name = arg:match(".+") ---SUPER AND SUBSCRIPTS (SINGLE LETTER)--- name = string.gsub( name, "%^([-+%p%w])_([-+%p%w]) ", '<span style="line-height: 1em; font-size: x-small; position: absolute; font-family: monospace">%1<br>%2</span><span style="font-family: monospace; font-size: x-small">{{#createstring: |{{#max:{{#length:%1}}|{{#length:%2}}}}}}</span>') ---SUPER AND SUBSCRIPTS (MULTIPLE LETTERS)--- name = string.gsub( name, "%^{([-+%p%w]+)}_{([-+%p%w]+)}", '<span style="line-height: 1em; font-size: x-small; position: absolute; font-family: monospace">%1<br>%2</span><span style="font-family: monospace; font-size: x-small">{{#createstring: |{{#max:{{#length:%1}}|{{#length:%2}}}}}}</span>') ---SINGLE AND MULTIPLE--- name = string.gsub( name, "%^([-+%p%w])_{([-+%p%w]+)}", '<span style="line-height: 1em; font-size: x-small; position: absolute; font-family: monospace">%1<br>%2</span><span style="font-family: monospace; font-size: x-small">{{#createstring: |{{#max:{{#length:%1}}|{{#length:%2}}}}}}</span>') name = string.gsub( name, "%^{([-+%p%w]+)}_([-+%p%w])", '<span style="line-height: 1em; font-size: x-small; position: absolute; font-family: monospace">%1<br>%2</span><span style="font-family: monospace; font-size: x-small">{{#createstring: |{{#max:{{#length:%1}}|{{#length:%2}}}}}}</span>') ---SUPER/SUBSCRIPTS--- name = string.gsub( name, "_{([-+%p%w]+)}", "<sub>%1</sub>" ) name = string.gsub( name, "_([-+%p%w]) ", "<sub>%1</sub>" ) name = string.gsub( name, "_([-+%p%w])$", "<sub>%1</sub>" ) name = string.gsub( name, "%^{([-+%p%w]+)}", "<sup>%1</sup>" ) name = string.gsub( name, "%^([-+%p%w]) ", "<sup>%1</sup>" ) ---GREEK LETTERS--- name = string.gsub (name, '([%a"]+)', function (str) return replacements[str] or str end ) else name = "" end return frame:preprocess(name) end function common.ListMolByReference( frame ) local args = defArgs(getArgs(frame), 1, ""); local arg = args[1]; local text = "" idS = {} count=0 for ref, sp, id in arg:gmatch("&?&?([^&]+)&&([%w\., \(\)]+)&&([^\n]+)") do local S = idS[id] if (S == nil) then idS[id]={} S = idS[id] count = count + 1 end if (S[sp] == nil) then S[sp] = {ref} else table.insert(S[sp], ref) end end text = "Showing below ".. count .. " structures." for k,v in pairs(idS) do text = text .. "\n* [[" ..k.. "&" ..k.. "]] [[Image:" ..k.. ".png&200px]]\n" for i,w in pairs(v) do text = text .. i for j,x in ipairs(w) do au, ja, yr = string.match(x, "([%w_]+)[^,]+,([^,]+),([%d]+)" ) text = text .. '([[Reference:' ..x.. '&' ..au..'_'..yr..'_'..ja.. ']])' end end end return text end return common