Module:ColorAlphabet

This module is supposed to apply Green-Armytage's standard for a "color alphabet" to letters in a string of input text. for blank, for colored letters local p={} function p.letter(frame,blank) local debuglog="" local args=frame.args local parent=frame.getParent(frame) local pargs={} if parent then pargs=parent.args end local text=args[1] or pargs[1] or "" local nowiki=args.nowiki or pargs.nowiki local lookup={} lookup.file=args.lookup or pargs.lookup or "Module:ColorAlphabet/lookup" 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.ustring.sub(text,s,e) 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..'  ' 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=' '..output..' ' if nowiki then output=' '..output..' '; output=output..debuglog end return frame.preprocess(frame,output) end

function p.blank(frame) local blank=" " return p.letter(frame,blank) end return p