Usage
This module colors each letter depending on which one it is the first parameter/the function is "letter", if it is "blank" it does produce colors, but converts the letters to non-breaking spaces.
{{#invoke:Sandbox/Wnt|letter|foo bar baz}}
produces Lua error in package.lua at line 80: module 'Module:ColorAlphabet/lookup' not found..
{{#invoke:Sandbox/Wnt/ColorAlphabet|blank|foo bar baz}}producesLua error in package.lua at line 80: module 'Module:ColorAlphabet/lookup' not found..
---- This module is supposed to apply Green-Armytage's standard for a "color alphabet" to letters in a string of input text.
---- {{#invoke:ColorAlphabet|blank|whatever}} for blank,
---- {{#invoke:ColorAlphabet|letter|whatever}} for colored letters
local getArgs = require('Module:Arguments').getArgs
local p = {}
function p._main(text, lookupfile, nowiki, blank)
local debuglog=""
local lookup = {}
lookup.file = lookupfile
lookup.data = mw.loadData(lookup.file)
debuglog = debuglog..tostring(lookup.data)..table.concat(lookup.data)..lookup.data[7] -- debug
if not(lookup.data) then return "error: failed to open lookup file" .. tostring(lookup.file) end
local x=0
repeat
x=x+1
i=lookup.data[x*3-2]
j=lookup.data[x*3-1]
k=lookup.data[x*3]
-- debuglog=debuglog..tostring(i)..tostring(j)..tostring(k)
if not (i and j and k) then break end
lookup[i]=j .. (blank or i) .. k -- create the lookup table of what letters are supposed to be transliterated to. If blank == " " then spaces, not letters go in the middle
until false
lookup["["]="";lookup["]"]="" -- don't include these in output
local wikistart={};wikiend={}
local s=0;local e=0
repeat
s,e=mw.ustring.find(text,"%[%[[^%[%]]-%]%]",e)
if (not(s) or not(e)) then break end
wikistart[s]=mw.text.trim(mw.ustring.sub(text,s+2,e-2))
wikiend[e]=true
until false
local prowl=mw.ustring.gmatch(text,"(.)")
local output=""
local wl=1
position=0
repeat
local letter=prowl()
if not(letter) then break end
position=position+1
if wikistart[position] then output=output..'<div style="position:relative;display:inline-block;"><div style="position:absolute;display:inline-block;top:-20px;left:0px;clip:rect(0px,'..3*mw.ustring.len(wikistart[position])..'px,20px,0px);overflow:hidden;">[[File:Transparent600.gif|link=http://en.wikipedia.org/wiki/' ..wikistart[position].. ']]</div></div>' end
if wikiend[position] then output=output.."" end
output=output..(lookup[letter] or letter) -- unicode letters will never all be looked up, handle punctuation the same
until false
output='<div style="position:relative;display:inline-block;">'..output..'</div>'
if nowiki then output='<nowiki>'..output..'</nowiki>'; output=output..debuglog end
return output
end
-- common code with all relevant args
function p.main(args, blank)
local text = args[1] or ""
local nowiki = args.nowiki or nil
local lookupfile = args.lookup or "Module:ColorAlphabet/lookup"
return p._main(text, lookupfile, nowiki, blank)
end
-- entry for colorizing letters
function p.letter(frame)
local args = getArgs(frame)
return frame:preprocess(p.main(args, nil))
end
-- entry for replacing letters with colored nonbreaking spaces
function p.blank(frame)
local args = getArgs(frame)
return frame:preprocess(p.main(args, " "))
end
return p