Module:IgenCoa

local libraryUtil = require('libraryUtil')

local p = {} --

-- local function "user code table" for COAInformtion users, -- by the user short code ('uc') as table key -- user short code may get an expansion "c" for charges, "e" for ecclesiasticals, "x" for raster images

utab = {	--- tools:	 1   2    3 a	= { 'A', nil, 'c' }; 		--	standard Adobe i	= { 'I', nil, 'c' }; 		--	standard Inkscape ia	= { 'IA',nil, 'c' }; 		--	Inkscape + Adobe im	= { 'Im',nil, 'c' }; 		--	impotent Inkscape t  = { 'T', '0', 'c' };		--	Text editor -- user:	 1   2    3    4    5			gc	sd	  U,u	su   ca	ad	= { 'I', nil, 'c', 'gf', nil,		':Adalric67', 'AD', 'Adalric67' }; ag	= { 'I', nil, 'c', 'gi', nil,		':ANGELUS', 'AG', 'ANGELUS' }; ah	= { 'I', nil, 'c', 'nl', nil,		':AtHoek', 'AH', 'A. ter Hoek' }; ai	= { 'IA',nil, 'c', 'gf', nil,		':Aubisse', 'AI', nil, 'Aubisse' }; al	= { 'I', nil, 'c', 'Hi', nil,		':Aliman', 'AL', 'Aliman5040' }; an	= { 'I', nil, 'c', 'ge', nil,		':Anenja', 'AN', 'Anenja',nil, nil, 'Contribuciones de Anenja' }; ak	= { 'Is',nil, 'c', 'gH', nil,		':ARK', 'AK', 'ARK' }; ao	= { 'II',nil, 'c', 'gi', nil,		':Ashoppio', 'AO' }; ar	= { 'I', nil, 'c', 'gf', nil,		':Aroche', 'AR', 'Aroche' }; as	= { 'I', nil, 'c', nil, nil,		nil, 'AS', 'Archmedus' }; --	at	= { 'I', nil, 'c', 'gP', nil,		nil, 'AT', 'Alex Tora' };  images afre too poor au = { 'I', nil, 'c', 'gf', nil,		':Aups', 'AU', 'Aups' }; av	= { 'I', nil, 'c', 'gp', nil,		':Aviz2000', 'AV', 'Aviz2000' }; aw	= { 'I', nil, 'c', 'gf', nil,		'/ch:Aiwe', 'AW', 'Aiwe' }; b1	= { 'I', nil, 'c', nil, nil,		nil, 'B1', 'B1mbo' }; ba	= { 'I', nil, 'c', 'gP', nil,		':Bastianow', 'BA', 'Bastianow' }; bbr	= { 'U', 'n', 'c', 'gp', nil,		':Brian Boru', 'BB', 'Brian Boru' }; be	= { 'I', nil, 'c', 'gf', nil,		':Bear17', 'BE', 'Bear17' }; bg	= { 'I', nil, 'c', 'gc', nil,		':Balmung', 'BG', 'Balmung0731' };		--	Japanese bi	= { 'I', nil, 'c', 'gf', nil,		':Bibar', 'BI', 'Bibar' };	--	nil, '-Blasons' }; bl	= { 'I', nil, 'c', 'gf', nil,		':Bluebear', 'BL', 'Bluebear2' }; bn	= { 'F', '8', 'c', 'gH', nil,		':Bernina', 'BN', nil,'Bernina' }; bo	= { 'D', nil, 'c', nil, nil,		nil, 'Bo', 'BrCaLeTo' }; br	= { 'I', nil, 'c', 'br', nil,		':Brieg', 'BR', 'Brieg' }; bt	= { 'I', nil, 'c', 'gf', nil,		':Binnette', 'BT', 'Binnette' }; bv	= { 'I', nil, 'c', 'gf', nil,		':Bvs-aca', 'BV', 'bvs-aca' }; by	= { 'I', nil, 'c', 'gf', nil,		':Bizcayen', 'BY', 'Bizcayen' }; bz	= { 'I', nil, 'c', 'gf', nil,		':Benzebu', 'BZ', nil,'Benzebuth198' }; c1	= { 'A', nil, 'c', nil, nil,		nil, 'C1', 'COAmaker17' }; c2	= { 'D', nil, 'c', 'su', nil,		nil, 'C2', 'Care' }; --	c3	= { 'I', nil, 'c', nil, nil,		nil, 'C3', 'Care  corel' }; cb = { 'I', nil, 'c', 'gf', nil,		':Celbusro', 'CB', 'Celbusro' }; ccr	= { 'U', 'n', 'eh','gp', nil,		':CatChess', 'CC', 'CatChess' }; ch	= { 'I', nil, 'c', 'gf', nil,		':Chatsam', nil, 'Chatsam',nil, nil, 'Blason chatsam' }; chc = { 'I', nil, 'ce','gf', nil,		':Chatsam', nil, 'Chatsam',nil, nil, 'Blason chatsam' }; cl	= { 'I', nil, 'c', nil, nil,		nil, 'CL', 'Carlos yo' }; cm = { 'DrawShield', nil, 'c', 'ei', nil,		nil, nil, 'Charles Matthews' }; cn = { 'I', nil, 'c', 'gf', nil,		':Caranorn', 'CN', 'Caranorn' }; cp = { 'I', nil, 'eh','ph', nil,		':CPhoenix', 'CP' }; cs	= { 'I', nil, 'c', 'dn','nl',		':Chris', nil, 'Chris die Seele',nil, 'CoA by Chris die Seele' }; cv	= { 'I', nil, 'c', nil, nil,		nil, 'CV', nil,'Csavil' }; cy	= { 'I', nil, 'c', 'gf', nil,		':Cyygma', 'CY', 'Cyygma' }; d9	= { 'Im','5', 'c', 'gf', nil,		'/ch:Delta-9', 'D9', 'Delta-9' }; da	= { 'I', nil, 'c', 'nl', nil,		':DArch', 'DA', "D'Arch",nil, nil, 'Coat of Arms by Arch' }; dd	= { 'I', nil, 'c', 'gi', nil,		':Dd..monn', 'DD', 'Ddurbmonnejg' }; dk = { 'T', '0', 'c', 'gs', nil,		':Dan Koehl', 'DK', 'Sarang',nil, nil, 'Coats of arms by Dan Koehl'}; dkr = { 'U', 'n', 'c', 'gs', nil,		':Dan Koehl', 'DK', 'Dan Koehl',nil, nil, 'Coats of arms by Dan Koehl'}; dl	= { 'I', nil, 'c', 'di', nil,		':D.S.Liuzzo', 'DL', 'David Liuzzo' }; dtx	= { 'I', nil, 'c', 'dn', nil,		nil, nil, 'Doc Taxon',nil, 'CoA by Doc Taxon'}; dxr = { 'U', 'n', 'c', 'ei', nil,		':Domaleixo', 'DO', 'Domaleixo' }; ekr	= { 'U', 'n', 'c', 'di', nil,		':Ekpah', 'EK', 'Ekpah' }; em	= { 'I', nil, 'c', 'gi', nil,		':Echando', 'EM', nil,"Echando una mano" }; en	= { 'Im',nil, 'c', 'gB', nil,		':Enekorga', 'EN', 'Enekorga' }; ep	= { 'A', nil, 'c', 'ei', nil,		':Boricua', 'EP' };	--	 	User:The Eloquent Peasant - also Adobe er	= { 'Io',nil, 'c', 'ge', nil,		nil, nil, 'Erlenmeyer',nil, nil, 'Contribuciones de Erlenmeyer' }; es	= { 'Iz',nil, 'c', 'gH', nil,		':Espandero', 'ES', 'Espandero' }; et	= { 'IA',nil, 'c', 'gf', nil,		':Etxeko', 'ET', 'Etxeko' }; eu	= { 'I', nil, 'c', 'gc', nil,		':Euryrel', 'EU', 'Euryrel' }; eue	= { 'I', nil, 'eh','gc', nil,		':Euryrel', 'EU', 'Euryrel' }; f2	= { 'I', nil, 'c', 'di', nil,		':Flow2', 'F2', 'Flow2' }; f5	= { 'I', nil, 'c', 'gf', nil,		':F5JMH', 'F5', nil,'A.T-2015' }; fj	= { 'I', nil, 'c', 'gf', nil,		':Flyjack', 'FJ', 'Flying jacket' }; fmu	= { 'U', nil, 'c', nil, nil,		nil, 'FD', 'FDRMRZUSA' }; fo	= { 'I', nil, 'c', 'su', nil,		':FennO', 'FO', 'Fenn-O-maniC' }; fq	= { 'I', nil, 'c', 'gi', nil,		':Facquis', 'FQ', 'Facquis' }; fr	= { 'I', nil, 'c', 'gH', nil,		':Fränsmer', 'FR', 'Fränsmer' }; fu	= { 'I', nil, 'c', 'gi', nil,		':Fulvioπ', 'FU', 'Fulvio314' }; -- take care with g -  some pseudo-keys ae reserved ! g2	= { 'I', nil, 'c', 'gi', nil,		':Gb89.2', 'G2', 'Gb89.2' }; gb	= { 'I', nil, 'c', 'gH', nil,		':GerhardB', 'GB', 'Gerhard Bräunlich' }; gj	= { 'I', nil, 'c', 'gi', nil,		':GJo', 'GJ', 'GJo' }; gk	= { 'U', nil, 'c', nil, nil,		nil, 'GK', 'Geraldiker' }; gl	= { 'I', nil, 'c', 'di','sx',		':Gliwi', nil, 'Gliwi',nil, 'CoA by Gliwi' }; go	= { 'I', nil, 'c', nil, nil,		nil, 'GO', 'Gunnar.offel' }; gr	= { 'I', nil, 'c', 'gf', nil,		':Gretaz', 'GR', 'Gretaz' }; gy	= { 'I', nil, 'eh','ph', nil,		':G_Yosh', 'GY' }; he	= { 'I', nil, 'c', 'ei', nil,		':Heralder', 'HE', 'Heralder' }; hp	= { 'I', nil, 'c', 'gf', nil,		':Honneur-P', 'HP', 'Honneur-Patrie' }; hs	= { 'I', nil, 'c', 'gf', nil,		':HSalomé', 'HS', nil,'&#x210d;enry Salomé' }; ip = { 'I', nil, 'c', 'gc', nil,		':Ipankonin', 'IP', 'Ipankonin',nil, nil, 'Images by Ipankonin' }; iw	= { 'I', nil, 'c', 'gP', nil,		':Isidor W', 'IW', 'Isidor Welti' }; j2	= { 'I', nil, 'c', nil, nil,		nil, 'J2', 'James2813' }; jcr	= { 'U', 'n', 'c', 'br', nil,		':J.C EVEN', 'JC', 'J.C EVEN' }; j9	= { 'I', nil, 'c', 'gf', nil,		':Jean92', 'J9', 'Jean92 dit le Comte' }; jk	= { 'I', nil, 'c', nil, nil,		nil, nil, 'Jürgen Krause',nil, 'CoA by Jürgen Krause', 'COA by User:Jürgen Krause' }; jm	= { 'I', nil, 'c', 'gf', nil,		':J-Mahmoud', 'JM', 'Jean-Mahmoud' }; jn	= { 'I', nil, 'c', 'gf', nil,		':Jimmy44', nil, 'Jimmy44',nil, nil, 'Files by User:Jimmy from fr.wikipedia' }; jne	= { 'I', nil, 'eh','gf', nil,		':Jimmy44', nil, 'Jimmy44',nil, nil, 'Files by User:Jimmy from fr.wikipedia' }; jp	= { 'I', nil, 'c', 'gf', nil,		':Jpgibert', nil, 'Jpgibert',nil, 'CoA by JPGibert' }; jpc = { 'I', nil, 'ce','gf', nil,		':Jpgibert', nil, nil,'Jean-Paul Gibert', 'CoA by JPGibert', 'Products of jpgibert/heraldry/charge' }; jpe = { 'I', nil, 'eh','gf', nil,		':Jpgibert', nil, 'Jpgibert',nil, 'CoA by JPGibert' }; jr = { 'I', nil, 'eh','ph', nil,		':J-Ronn', 'JR', 'J-Ronn' }; jw	= { 'T', nil, 'c', 'gc', nil,		':Jwnabd', 'JW', 'Jwnabd',nil, nil, 'Coats of arms drawn by User:Jwnabd' }; jwr	= { 'U', 'n', 'c', 'gc', nil,		':Jwnabd', nil, 'Jwnabd',nil, nil, 'Coats of arms drawn by User:Jwnabd' }; k2	= { 'I', nil, 'c', 'gf', nil,		':Kontributor', 'K2', 'Kontributor 2K' }; ke	= { 'I', nil, 'c', 'gi', nil,		':Ketipmaig', 'KE', 'Ketipmaig' }; kkr = { 'U', 'n', 'c', 'ga', nil,		':KKundl', 'KK', 'Kontrollstellekundl' }; l2	= { 'D', nil, 'c', nil, nil,		nil, 'L2', 'Leonid 2' }; l5r	= { 'U', 'n', 'c', 'di', nil,		':Lothar520', 'L5', 'Lothar520' }; la	= { 'I', nil, 'c', 'gi', nil,		':Lamberto', 'LA', 'Lamberto99' }; lhr	= { 'U', 'n', 'c', 'di', nil,		':Losch', 'LH', 'Losch' }; lm	= { 'I', nil, 'c', 'gf', nil,		':LeMorvand', 'LM', 'LeMorvandiau' }; lp	= { 'I', nil, 'c', 'sx', nil,		':Lokal_Profil', 'LP', 'Lokal_Profil',nil ,nil, 'Images by Lokal_Profil/CoA'}; lu	= { 'I', nil, 'c', 'di', nil,		':Ludger1961', 'LU', 'Ludger1961' }; lv	= { 'D', nil, 'c', 'gr', nil,		':Lobachev', 'LV ', nil, 'Lobachev' }; ly 	= { 'I', nil, 'c', 'gi', nil,		':Lynxlynx', 'LY', 'Lynxlynx' }; lyr	= { 'U', 'n', 'c', 'gi', nil,		':Lynxlynx', 'LY', 'Lynxlynx' }; ma	= { 'I', nil, 'c', 'gf', nil,		':Manassas', 'MA', nil,'Manassas' }; mb	= { 'I', nil, 'c', 'gh', nil,		':Madboy', nil, 'Madboy74',nil, 'CoA by Madboy74' }; mc	= { 'I', nil, 'eh','ei', nil,		':Macucal', 'MC', 'Macucal',nil, nil, 'User:Macucal' }; me	= { 'I', nil, 'c', 'gi', nil,		':MostEpic', 'ME', 'MostEpic' }; mg	= { 'I', nil, 'c', 'gP', nil,		':Magul', nil, 'Magul' }; mgr	= { 'U', 'n', 'c', 'gP', nil,		':Magul', 'MG', 'Magul' }; mi	= { 'I', nil, 'c', nil, nil,		nil, nil, 'Milenioscuro',nil, nil, 'Coats of arms by User:Milenioscuro' }; ml	= { 'I', nil, 'c', 'dw','no',		':MaxxL', nil, 'MaxxL',nil, 'CoA by MaxxL' }; mmr	= { 'u', 'n', 'c', 'gi', nil,		':Massimop', 'MM', 'Massimop' }; mn	= { 'I', nil, 'c', 'ge', nil,		':Miguillen', 'MN', 'Miguillen' }; mx	= { 'I', nil, 'c', 'di', nil,		':Maxwxyz', 'MX', 'Maxwxyz' }; n7 = { 'I', nil, 'c',  nil, nil,		nil, 'N7', 'Nanin7' }; ne	= { 'I', nil, 'c', 'gf', nil,		':Nescd', 'NE', 'Nescd' }; ng = { 'I', nil, 'c', 'gc', nil,		':Ng556', 'NG', 'Ng556' }; nge= { 'I', nil, 'eh','gc', nil,		':Ng556', 'NG', 'Ng556' }; np	= { 'I', nil, 'c', 'gp', nil,		':NPortuguês', 'NP', 'N.Português' }; od	= { 'I', nil, 'c', 'gf', nil,		':Odejea', nil, 'Odejea',nil, nil, 'Files by Odejea/SVG coat of arms' }; ode	= { 'I', nil, 'eh','gf', nil,		':Odejea', nil, 'Odejea',nil, nil, 'Files by Odejea/SVG ecclesiastical coat of arms' }; odr = { 'Blender', 'n', 'c','gf', nil,	':Odejea','OD', 'Odejea',nil, nil, 'Files by Odejea/PNG coat of arms' }; p4	= { 'A', nil, 'c', 'di', nil,		':Puck04', 'P4', 'Puck04' }; p7	= { 'I', nil, 'c', 'fi', nil,		':Peter17', 'P7', 'Peter17',nil, nil, 'Images by Peter Potrowl' };	-- in user templ. pc	= { 'Im',nil, 'c', 'gf', nil,		':Pce13', 'PC', 'Pce13' }; ph	= { 'I', nil, 'c', 'di', nil,		':Perhelion', 'PH', 'Perhelion' }; pi	= { 'I', nil, 'eh','gP', nil,		':Piom', 'PI', 'Piom',nil, nil, 'Pictures by PioM' }; pir	= { 'U', 'n', 'eh','gP', nil,		':Piom', 'PI', 'Piom',nil, nil, 'Pictures by PioM' }; pn	= { 'I', nil, 'c', 'di', nil,		':Philnate', 'PN', 'Philnate' }; po	= { 'A', nil, 'c', 'gr', nil,		':Popadius', 'PO', 'Popadius' }; r2	= { 'I', nil, 'c', nil, nil,		nil, 'R2', 'RaFaDa20631' }; ra	= { 'I', nil, 'c', 'gP', nil,		':Ragimiri', 'RA', 'Ragimiri' }; rc	= { 'A', nil, 'c', nil, nil,		nil, 'RC', 'Regicollis' }; rgr	= { 'U', 'n', 'c', 'di', nil,		':Repgow', 'RG', 'Repgow' }; rl	= { 'U', nil, 'c', nil, nil,		nil, 'RL', 'RootOfAllLight' }; -- ':R-O-A-L' rlr	= { 'U', 'n', 'c', nil, nil,		nil, 'RL', 'RootOfAllLight' }; -- ':R-O-A-L' rn	= { 'I', nil, 'c', 'gf', nil,		':Rinaldum', 'RN', 'Rinaldum' }; rq	= { 'I', nil, 'c', nil, nil,		nil, 'RQ', nil,'Roqz' }; rv	= { 'I', nil, 'c', 'gi', nil,		':Ruthven',nil, 'Ruthven',nil, 'CoA by Ruthven' }; rve	= { 'I', nil, 'eh','gi', nil,		':Ruthven',nil, 'Ruthven',nil, 'CoA by Ruthven' }; s0	= { 'I', nil, 'c', 'gf', nil,		':Spax89', nil, 'Spax89',nil, 'CoA by Spax89' }; s1	= { 'I', nil, 'c', 'gf', nil,		':Spax89', '89', 'Spax89' };		-- noshow invalid, and don't subcat --	s3	= { 'I', nil, 'c', nil, nil,		nil, 'S3', 'Skjoldbro' }; s7	= { 'I', nil, 'c', 'gf', nil,		':Ssire', 'S7', 'Ssire' };			-- + c, + e	sa	= { 'I', nil, 'c', nil, nil,		nil, nil, 'SajoR',nil, 'CoA by SajoR' }; sae	= { 'I', nil, 'eh', nil, nil,		nil, nil, 'SajoR',nil, 'Escudos eclesiásticos de SajoR' }; se	= { 'I', nil, 'c', 'di', nil,		':Simon.E', nil, 'Simon.eller',nil, 'CoA by Simon Eller' }; sf	= { 'I', nil, 'c', nil, nil,		nil, 'SF', 'Srfortes' }; sg	= { 'Im',nil, 'c', 'gf', nil,		':Sanguinez', 'SG', 'Sanguinez' }; sge	= { 'Im',nil, 'eh','gf', nil,		':Sanguinez', 'SG', 'Sanguinez' }; si	= { 'A', nil, 'c', 'gH', nil,		':Sidonius', 'SI', 'Sidonius' }; sj	= { 'I', nil, 'c', nil, nil,		nil, 'SJ', 'Ssolbergj' }; sk	= { 'I', nil, 'c', nil,'fl',		nil, nil, 'SteveK', nil, 'CoA by SteveK', 'COA by SteveK' }; skw	= { 'I', nil, 'c', 'gd','sx',		nil, nil, 'SteveK', nil, nil, 'COA by SteveK' }; sl	= { 'Ac',nil, 'c', 'gH', nil,		':Spinner2', 'SL', 'SpinnerLaserzthe2nd' }; sm	= { 'I', nil, 'c', nil, nil,		nil, 'SM', 'Samhanin' }; sn	= { 'I', nil, 'c', 'ei', nil,		':SeñorDLN', 'SN', 'ElSeñorDeLaNoche' }; so	= { 'I', nil, 'c', 'gl', nil,		':Sodacan', 'SO', 'Sodacan' }; sp	= { 'I', nil, 'c', 'gf', nil,		':Spedona', 'SP', 'Spedona' }; sq	= { 'I', nil, 'c', 'ge', nil,		nil, 'SQ', nil,'SanchoPanzaXXI', nil, 'Contribuciones de SanchoPanzaXXI' }; sr	= { 'I', nil, 'c', 'fx', nil,		':SanglierT', 'SR', 'SanglierT' }; sre	= { 'I', nil, 'eh','fx', nil,		':SanglierT', 'SR', 'SanglierT' }; ss	= { 'I', nil, 'c', 'gH', nil,		':Sandro S.', 'SS', 'Sa-se' }; st	= { 'I', nil, 'c', 'gf', nil,		':Stella3', 'ST', 'Stella3' }; su	= { 'I', nil, 'c', 'gs', nil,		':C.Sundin', 'SU', 'C.Sundin',nil, nil, 'Images by User:C.Sundin' }; sy	= { 'I', nil, 'c', 'gf', nil,		':Syryatsu', nil, 'Syryatsu',nil, nil, 'Blason par Syryatsu' }; syr	= { 'Photoshop', 'n', 'c', 'gf', nil,		':Syryatsu', 'SY', 'Syryatsu',nil, nil, 'Blason par Syryatsu' }; ta	= { 'I', nil, 'c', 'gH', nil,		':Taktaal', 'TA', 'Taktaal' }; tf	= { 'I', nil, 'c', 'cs', nil,		':TFerenczy', 'TF', 'TFerenczy' }; tk	= { 'I', nil, 'c', 'gf', nil,		':TomKr', 'TK', 'TomKr' }; tl	= { 'I', nil, 'c', 'gf', nil,		':Lanaud', 'TL', 'Thom.Lanaud' }; tlu	= { 'U', nil, 'c', 'gf', nil,		':Lanaud', 'TL', 'Thom.Lanaud' }; to	= { 'I', nil, 'c', 'nl', nil,		':Tom-L', 'TO', 'Tom-L' }; tr	= { 'I', nil, 'c', 'di', nil,		':TRystau', 'TR', nil,'T. Rystau' }; trr	= { 'U', 'n', 'c', 'di', nil,		':TRystau', 'TR', nil,'T. Rystau' }; tu	= { 'Im',nil, 'c', nil, nil,		nil, 'TU', nil,'Tomáš Urban' }; tur	= { 'U', 'n', 'eh', nil, nil,		nil, 'TU', nil,'Tomáš Urban' }; tv	= { 'I', nil, 'c', 'gf', nil,		':Tretinville', 'TV', 'Tretinville',nil, nil, 'Blasons Tretinville' }; v1 = { 'A', nil, 'c',  nil, nil,		nil, 'V1', 'ViniciusBR11' }; v9 = { 'I', nil, 'c', 'gi', nil,		':Vale93b', nil, 'Vale93b',nil, 'CoA by Vale93b', 'U:Vale93b' }; --	v9e= { 'I', nil, 'eh','gi', nil,		':Vale93b', nil, 'Vale93b',nil, 'Ecclesiastical heraldry by Vale93b', 'U:Vale93b' }; v9h= { 'U', 'n', 'eh','gi', nil,		':Vale93b', nil, 'Vale93b',nil, 'CoA by Vale93b', 'U:Vale93b' }; v9r= { 'U', 'n', 'c', 'gi', nil,		':Vale93b', nil, 'Vale93b',nil, 'CoA by Vale93b', 'U:Vale93b' }; va	= { 'I', nil, 'c', 'gf', nil,		':B.Vallette', 'VA', nil,'Bruno' }; vd	= { 'I', nil, 'c', 'gf', nil,		':Vddbert', 'VD', 'Vddbert' }; vde	= { 'I', nil, 'eh','gf', nil,		':Vddbert', 'VD', 'Vddbert' }; vor	= { 'U', 'n', 'c', 'uk', nil,		':VityOKM', 'VO', 'Vity OKM' }; wa	= { 'I', nil, 'c', 'gf', nil,		':Wagner51', 'WA', 'Wagner51' };		-- + c, + e	wh	= { 'T', nil, 'c', 'di', nil,		':Walderich', 'WH', 'Walderich' }; wk	= { 'I', nil, 'c', nil, nil,		nil, 'WK',  nil,'Kaliforniyka' }; xv	= { 'I', nil, 'c', 'ge', nil,		':Xavigivax', 'XV', 'Xavigivax' }; yr	= { 'Im',nil, 'c', 'gf', nil,		':Yricordel', 'YR', 'Yricordel' }; za	= { 'I', nil, 'c', 'gf', nil,		':Zardoz91', 'ZA', 'Zardoz91',nil, nil, 'SVG coats of arms of France'}; zi	= { 'I', nil, 'c', 'gf', nil,		':Zigeuner', 'ZI', 'Zigeuner' }; -- Alt zo	= { 'I', nil, 'c', 'gf', nil,		':Zorlot', 'ZO', 'Zorlot' }; --- formatting: v  = { '=========', '==', '==', '==' };	--	separator -- labs:											these are all reserved pseudo keys h	= { 'I', nil, 'c', 'gH' };	--	ch cz	= { 'I', nil, 'c', 'cs' };	--	cs d	= { 'I', nil, 'c', 'gd' };	--	de dc	= { 'I', nil, 'ce','gd' };	--	de charges de	= { 'I', nil, 'eh','gd' };	--	de eccles. di	= { 'I', nil, 'c', 'di' };	--	de individ dx	= { 'I', nil, 'c', 'gd' };	--	de catonly e	= { 'I', nil, 'c', 'ge' };	--	es ec	= { 'I', nil, 'ce','ge' };	--	es charges ee	= { 'I', nil, 'eh','ge' };	--	es eccles. ei	= { 'I', nil, 'c', 'ei' };	--	es individ ex	= { 'I', nil, 'c', 'ge' };	--	es catonly f	= { 'I', nil, 'c', 'gf' };	--	fr fc	= { 'I', nil, 'ce','gf' };	-- 	fr charges fe	= { 'I', nil, 'eh','gf' };	-- 	fr eccles. fi	= { 'I', nil, 'c', 'fi' };	--	fr individ fx	= { 'I', nil, 'c', 'gf' };	--	fr catonly gc	= { 'I', nil, 'c', 'gc' };	--	common it	= { 'I', nil, 'c', 'gi' };	--	it nl	= { 'I', nil, 'c', 'nl' };	--	nl pb	= { 'I', nil, 'c', 'gf' };	--	fr project blason pl	= { 'I', nil, 'c', 'gP' };	--	pl rie	= { 'U', 'n', 'eh', nil };	--	raster image (+ c)	rir	= { 'U', 'n', 'c', nil };	--	raster image ru	= { 'I', nil, 'c', 'gr' };	--	ru --	sx	= { 'I', nil, 'c', 'gs' };	--	sv catonly u	= { 'U', nil, 'c', 'gc', nil,	':UU' }; 		--	Unknown tool zzzz= { 'U', nil, 'c', 'gc', nil,	':??' ,nil, nil,"substitute:" };	--	return value for invalid key };

-- get extension flag ('s' when svg, otherwise another letter ) local function extflag local page = mw.title.getCurrentTitle.text; local ptab = mw.text.split(page, '.', true) local extn = mw.ustring.lower( table.concat(ptab, '', #ptab ) ) return		 mw.ustring.sub ( extn, 1, 1 ) end -- local function extflag

local function uctab ( uc ) local	p1	=	mw.ustring.lower( uc ) or 'nihl'; local	p2	=	p1; if	#p1 == 2 then if	extflag ~= 's' then p2 = p1..'r';						--	raster elseif gratop == 'eh' then p2 = p1..'e';						--	ecclesiastical elseif gratop == 'ce' then p2 = p1..'c';						--	charges end end if	#p1 == 3 then if mw.ustring.sub(p1,3) == 'c' 			--	charges or mw.ustring.sub(p1,3) == 'e' 			--	ecclesial or mw.ustring.sub(p1,3) == 'r' then		--	rasters p1 = mw.ustring.sub(p1,1,2);		--	shorten end end if 		utab[mw.ustring.lower(p2)] ~= nil then return utab[mw.ustring.lower(p2)];		--	expanded key elseif	utab[mw.ustring.lower(p1)] ~= nil then return utab[mw.ustring.lower(p1)];		--	original key else return utab[mw.ustring.lower('zzzz')];	--	neither exist end end	-- local function utab

🔶🔶🔶🔶🔶🔶🔶🔶 ---

-- global function - with the user code table function p.main ( frame )			--	invoked from template:COAInformation local lpar  = frame.args local parstr = mw.text.trim(lpar[1] or ' ');	--	slash-separated local tmplte = mw.text.trim(lpar[2] or 'Igen');	--	or c/f/m	? local gratop = mw.text.trim(lpar[3] or 'c');	--	graphic lab topic local inptab = {}; local outtab = {}; local argtab = mw.text.split( parstr, "/" );	--	becomes "|" local labtb	=									-- corresponds with {--	parm 4 = g_lab		coa		 charge		eccles		indiv. catonly	 Wappenwerkst g7 = 'g7';	g8 = 'g8';	g9 = 'g9';		-- + Baltic ga = 'ga'; gB = 'gB'; gc = 'gc';	br = 'br';					-- Breton												cx = 'gc'; gd = 'gd';	d = 'gd';	dc = 'gd';	de = 'gd';	di = 'gd';	dx = 'gd'; dw = 'gd'; ge = 'ge';	e = 'ge';	ec = 'ge';	ee = 'ge';	ei = 'ge';	ex = 'ge'; gl = 'en'; gf = 'gf';	f = 'gf';	fc = 'gf';	fe = 'gf';	fi = 'gf';	fx = 'gf'; gH = 'gH';										Hi = 'gH'; gi = 'gi';				gl = 'gl'; gh = 'gh'; gp = 'gp';	gP = 'gP';	gr = 'gr';	nl = 'nl';	ph = 'ph';	ru = 'ru'; uk = 'uk'; gs = 'gs';										si = 'gs';	sx = 'gs'; su = 'fi'; xx = 'xx'; cx = 'cx';	cs = 'cs';  dn = '  ';  nn = '  '; };

local nattb	= { g7='et'; g8='lt'; g9='lv'; ga='at'; gB='eu'; gc='cm'; gd='de'; ge='es'; gf='fr'; gH='ch'; gh='hu'; gi='it'; gp='pt'; gP='pl'; gr='ru'; br='br'; gl='en'; gs='sv'; nl='nl'; ph='ph'; uk='uk'; fi='fi'; cs='cs';}; local natio = ''; local toptb	= { 'm', 'lm', 'wm', 'ggg', 'f', 'ffi', 'c', 'ce', 'eh', 'ee' }; local modtb	= { 'dc', 'de', 'di', 'dx', 'dw', 'dn', 'nn' };		--	Lab modification local coatb = { c = 'c'; ce = 'c'; eh = 'c'; ee = 'c'; } local v_stb = { lf = ; fl = ; nl = ; no = ; none = ; sx = ; } local othtb = {}; othtb [1] = '+';		--	re_insert the "+"

if	gratop == ''		then gratop = 'c'; end 	-- test if	lpar["el"] == 'y'	then gratop = 'ce'; end 	-- test 'ce' for element (charge) if	lpar["eh"] == 'y'	then gratop = 'eh'; end 	-- test 'eh' for ecclesial coa if	lpar["el"] == 'y'	and	lpar["eh"] == 'y'	then gratop = 'ee'; end 	-- test 'ee' for ecclesial element if	tmplte == 'c'			--	coa or	tmplte == 'f'			--	flag or	tmplte == 'm' then		--	map if	gratop ~= "ce" and	gratop ~= "ee" and	gratop ~= "eh" then	--	graphic lab topic comes with second parameter gratop = tmplte	--	c, f, m		end tmplte = 'Igen' end

--1: get values from input parameter, to inptab for i, v in ipairs(argtab) do		v	= mw.ustring.gsub( v, " ", "↔" ),_;		-- double spaces v	= mw.ustring.gsub( v, " ", "" ),_;			-- remove spaces v	= mw.ustring.gsub( v, "[↔_]", " " ),_;		-- but make spaces from _ and ↔ U+2194 (8596) local fpos = nil; if	v ~= '' then v	= mw.ustring.gsub( v, "[¦\\]", "/" ),_;--	repl brokenbar (or "\") by slash; v	= mw.ustring.gsub( v, "¡", "\\" ),_;	--	repl inv. "!" by "\" if	v == '~' then fpos = nil; else fpos = mw.ustring.find( mw.ustring.sub(v,2), '~' );	--	"~" becomes "=" end if	fpos == nil then		--	pos, par if	v == '×'	then	simpl = '×';	end if	v ~= '+' then if	i < 6	then inptab [i] = v;	--	positional trimmed else outtab [i] = v;					end end else local parmn = mw.text.trim(mw.ustring.sub ( v, 1, fpos )); if '+' ~= mw.ustring.sub ( v, fpos+2 ) then if	parmn == 'ca' 	or	parmn == 'cat2' or	parmn == 'gc' or	parmn == 'sd' or	parmn == 'su'	or	parmn == 'sub:' or	parmn == 'U'	or	parmn == 'u' --					or	parmn == 'k'					or	parmn == 'tool'	then		-- is a known parmname inptab [ parmn ] = mw.ustring.sub ( v, fpos+2 ); else outtab [ parmn ] = mw.ustring.sub ( v, fpos+2 ); end end end end end

--2: All parameters are processed; check now the inptab for i = 1, #modtb do				--	(if	inptab[4]	== nil then) if	inptab[2] == modtb[i] then	--	was Uu/ll inptab[4] = inptab[2];		--	gralab modification inptab[2] = nil; end end for i = 1, #modtb do		if	inptab[3] == modtb[i] then	--	was Uu//ll inptab[4] = inptab[3]; inptab[3] = gratop; end end local iparm1 = inptab[1];		--	tool or user_short_code	key local iparm2 = inptab[2];		--	error count  or missing=nil local iparm3 = inptab[3];		--	topic c/ce/eh or missing=gratop --	special case: gratop = ce, and inptab[3] = eh: ee = ecclesiastical element --								or gratop; local iparm4 = inptab[4];		--	graphic lab  or missing local iparm5 = inptab[5];		--	vstyle       or  missing --	Named parameters (maybe nil) local ipargc = inptab['gc'];	--	parameter gc= local iparsd = inptab['sd'];	--	parameter sd= local iparuu = inptab['U'];		--	parameter U= local iparul = inptab['u'];		--	parameter u= --	local iparky = inptab['k'];		--	parameter k= local iparsu = inptab['sub:'] or inptab['su'];	--	sub:= local iparca = inptab['cat2'] or inptab['ca'];	--	cat2=

--	test parm2 to parm5 for their values coatb ["-"] = ;	labtb ["-"] = ;	v_stb ["-"] = ''; if iparm2 ~= nil then if	tonumber(iparm2)== nil	then	othtb[2] = iparm2;	iparm2 = nil; end end if iparm3 ~= nil then if	coatb [iparm3]	== nil	then	othtb[3] = iparm3;	iparm3 = nil; end end if iparm4 ~= nil then if	labtb [iparm4]	== nil	then	othtb[4] = iparm4;	iparm4 = nil; end end if iparm5 ~= nil then if	v_stb [iparm5]	== nil	then	othtb[5] = iparm5;	iparm5 = nil; end end -- solve the special case of numeric parm1 if	iparm2 == nil and tonumber(iparm1) ~= nil then iparm2 = iparm1; 			--  numeric error count iparm1 = 'I';				--	default tool end

--3: get values from the uctab	with key: iparm1 local etab = {}; etab = uctab ( iparm1 );		--	call the local function	💜💜💜💜💜💜💜💜 if	etab [6] == ':??' then --		etab [6] = ':'..mw.ustring.upper(iparm1);			--	subst 'gc' etab [9] = etab [9]..' '..mw.ustring.upper(iparm1);--	subst 'ul' end --4: replace values ( set 'nil' when "-", or may be kept 'nil' ) if	iparsd ~= nil	then	etab [10]	= nil;	end if	iparsu ~= nil	then	etab [7]	= nil;	end outtab [1]	=	inptab ['tool'] or etab [1];	--	converted value - NOT iparm1 key ! if	iparm2 == '-'	then	outtab [ 2 ]	=	nil; else	outtab [ 2 ]	=  iparm2 or etab [2];	end if	etab[3] == 'eh' and gratop == 'c'	then	gratop = etab [3];	end if	iparm3 == '-'	then	outtab [ 3 ]	=	nil; else	outtab [ 3 ]	=  iparm3 or gratop or etab [3];  end if	iparm4 == '-'	then	outtab [ 4 ]	=	nil; else	outtab [ 4 ]	=  iparm4 or etab [4];	end if	iparm5 == '-'	then	outtab [ 5 ]	=	nil; else	outtab [ 5 ]	=  iparm5 or etab [5];	end if	ipargc == '-'	then	outtab ['gc']	=	nil; else	outtab ['gc']	=  ipargc or etab [6];	end if	iparsd == '-'	then	outtab ['sd']	=	nil; else	outtab ['sd']	=  iparsd or etab [7];	end if	iparuu == '-'	then	outtab ['U']	=	nil; else	outtab ['U']	=  iparuu or etab [8];	end if	iparul == '-'	then	outtab ['u']	=	nil; else	outtab ['u']	=  iparul or etab [9];	end if	iparsu == '-'	then	outtab ['sub:']	=	nil; else	outtab ['sub:']	=  iparsu or etab [10];end --	if	iparky == '-'	then	outtab ['k']	=	'~'; --						else	outtab ['k']	=  iparky; end if	iparca == '-'	then	outtab ['cat2']	=	nil; else	outtab ['cat2']	=  iparca or etab [11];end --		check whether parm 3,4,5 are topic, labcode, vs - or something else

if gratop == 'ce' and inptab[3] == 'eh'	then	--	ecclesiastical element 'ee' outtab [3] = 'ee'; end iparm3 = outtab [3];		--	topic - or something else iparm4 = outtab [4];		--	gralab - or something else iparm5 = outtab [5];		--	vstyle - or something else

local glc = 'g'; local cnt = 0; for i = 1, #toptb do		if iparm3 == toptb [i] then cnt = i; end end if	cnt > 0 then				--	valid topic ? outtab ['s'] = iparm3; outtab [ 3 ] = nil; if	cnt > 6 then			--	valid coa topic glc = 'glc'; if cnt == 9	then			--	'eh' = ecclesiastical heraldry outtab ['s'] = 'eh'; outtab ['sub:'] = 'Ecclesiastical heraldry'; --	  			outtab ['w']  = elseif cnt == 10	then	--	'ee' = ecclesiastical element outtab ['s'] = 'eh';	--	or 'ce'    ??? outtab ['s:'] = 'ecclesiastical element'; --	  			outtab ['w']  = 'eccl. CoA element'; outtab ['w'] = 'eccl. CoA element'; --	  			if -- -- --		outtab ['sd'] = nil;	--	no further subc ? end end else outtab ['s'] = etab[3];		--	unknown topic end local save4 = iparm4;			--	etab or itab natio = labtb [iparm4] or ''; if	natio == '' then			--	if invalid, iparm4 = etab [4];			--	forget it		natio = labtb [iparm4] or ''; end if	natio ~= '' then			--	valid gralab code outtab [ glc ] = iparm4;			--	treat with Igen/glc outtab ['nat'] = natio;			--	national lab cod outtab ['lang'] = nattb [natio];	--	national lang code if	save4 == iparm4	then outtab [ 4 ] = nil; 			--	when from itab end else outtab ['g'] = save4; end --				for Doc Taxon (+ others?) if	iparm4	==	'dw'	then outtab ['gc']	=  ':'..outtab ['U']; outtab ['lc']	=  'n'; 				--	no lab cat else outtab ['lc']	=  's'; 				--	std lab cat end

if	iparm5 == 'nl' 	or	iparm5 == 'lf' or	iparm5 == 'sx' 	or	iparm5 == 'no' then outtab ['vs'] = iparm5;		-- valid vstyle outtab [ 5 ] = nil; else outtab ['vs'] = etab[5]; end

if 	outtab ['sd'] ~= nil then	--	complete outtab ['sd'] = '-'..outtab['sd']; end if	iparul ~= nil then			-- 	mutually exclusive: outtab['U']= nil;			--	when ul-input, U is not possible end if	iparuu ~= nil then			-- 	but when uu-input outtab['U']= iparuu;		--	it gets independently precedence end if	extflag ~= 's' then if	outtab [2] ~= nil then table.insert( outtab, outtab [2] ) end outtab [2]	= 'n'		if	outtab [1] == 'A' 		or	mw.ustring.sub(outtab [1], 1, 1 ) == 'I' then outtab [1] = 'U'; end end if	outtab [1]	== 'U' 	and	extflag	~= 's'  then outtab['cat']= 'Raster images created with Other tools' -- ..':CoA<'..iparm1..'>'; end --	if	outtab [3]	== nil --	or	outtab [3]	== 'c' --	if	lpar["eh"]	== 'y'	then outtab ['s']	= gratop;		--	'eh' or 'ee' --	end

for i = 1, 5 do		if othtb [i] ~= nil	then table.insert(outtab, othtb [i]); end end if outtab['tst'] == 'yes'	then tmplte = 'Showname';		-- final test end outtab ['k']	=	'~';		--	with DEFAULTSORT return mw.getCurrentFrame: expandTemplate { title = tmplte, args = outtab }; end -- function main

🔷🔷🔷🔷🔷🔷🔷🔷 ---

function p.distab(frame) local lpar = frame.args local sortp = lpar[1] or ' ';	--	"sort" ? if	sortp == 'sort' then sortp = ' class="sortable" '; end local ixtab = {};			--	user entries local fitab = {};			--	pseudo keys local rowrw = {}; local ixcnt = 0; local disct = 0; local disst = ''; local valid = 'Valid'; local lbtab	= {	--		parm 1 = tool pseudo keys a = ; i = ; ia = ; im = ; is = ; t = ;  u = ; rie= ; rir= ''; v = '==';	zzzz = ''; --		parm 4 = g_lab		coa		 charge		eccles		indiv. catonly	 Wappenwerkst g7 = 'et';	g8 = 'lt';	g9 = 'lv';			-- Baltic ga = 'at'; gB = 'eu'; 	br = 'br';			-- Breton gc = 'cm'; gd = 'de';	d = 'de';	dc = 'de';	de = 'de';	di = 'de';	dx = 'de';	dw = 'de'; ge = 'es';	e = 'es';	ec = 'es';	ee = 'es';	ei = 'es';	ex = 'es'; gl = 'en';		--	← "gl" is used as the key for Gimli gf = 'fr';	f = 'fr';	fc = 'fr';	fe = 'fr';	fi = 'fr';	fx = 'fr';	pb = 'fr'; gH = 'ch';	h = 'ch';									Hi = 'ch'; gi = 'it'; gl = 'en';  gh = 'hu';  it = 'it'; gp = 'pt'; gP = 'pl';	gr = 'ru';	nl = 'nl';  ph = 'ph';	ru = 'ru';	uk = 'uk'; gs = 'sv';										si = 'sv';	sx = 'sv';	su = 'fi'; xx = 'xx'; cx = 'cx'; cs = 'cs'; };	local extab = { br=; cs=; gb=; gl=; gr=; ph=; si=; su= };		--	exceptions: these are (also) user keys --	local rmtab = { d; dc; de; di; dx; dw;  e; ec; ee; ei; ex;   f; fc; fe; fi; fx;  gH; h; a; i; ia; im; sx; t; u; v };	-- pseudo local outtb = '\n '; return outtb; end -- function distab

🔸🔸🔸🔸🔸🔸🔸🔸 ---

function p.catg(frame)			--	definitions for user category local lparm = frame.args	--	global param local uname = lparm[1]; 	--	or ??? local csrpl = lparm['r+']; 	--	catseealso raster local csrmn = lparm['r-']; 	-- local unam2 = mw.text.trim(lparm[2] or uname); local natlb = lparm[4]; local outtb = {}; local tooln = '???'; local rtval = ''; local cname = ''; local cnamu = nil; local cnamu = nil; local cnamr = ''; local cattx = ''; local txttb = {}; local sl   = 24; local ul   = 4; local cttxt = ' drawers';

cname = mw.title.getCurrentTitle.text if	unam2 == nil or unam2 == ''  or unam2 == ' ' then unam2 = uname;					-- didn't work ? end if	mw.ustring.sub(cname,1,1) == 'V' then cnamv = 'In' ..mw.ustring.lower(mw.ustring.sub(cname,1,1))..(mw.ustring.sub(cname,2)); cnamr = mw.ustring.sub(cname,10,23); elseif mw.ustring.sub(cname,1,1) == 'I' then cnamv = mw.ustring.upper(mw.ustring.sub(cname,3,3))..(mw.ustring.sub(cname,4)); cnamr = mw.ustring.sub(cname,12,25); sl	= 26; else cnamv = nil; end if	mw.ustring.sub(cname,-#uname-4,-#uname-1) == ' by ' then ul	= #uname+4;				--	_by_username cttxt = ' by user'; end

if	cname ~= nil then if 		mw.ustring.sub(cname,sl,sl+7) == 'Inkscape'		then tooln = 'Inkscape'; elseif	mw.ustring.sub(cname,sl,sl+10)== 'Other tools'	then tooln = 'Other tools'; elseif	mw.ustring.sub(cname,sl,sl+10)== 'Text Editor'	then tooln = 'Text Editor'; elseif	mw.ustring.sub(cname,sl,sl+10)== 'Adobe Illus'	then tooln = 'Illustrator'; elseif	mw.ustring.sub(cname,sl,sl+6) == 'Fig2SVG'		then tooln = 'Fig2SVG'; elseif	mw.ustring.sub(cname,sl,sl+8) == 'CorelDRAW'	then tooln = 'CorelDRAW'; elseif	mw.ustring.sub(cname,sl,sl+9) == 'DrawShield'	then tooln = 'DrawShield'; else	tooln = 'Unknown tool'; end end

if	uname ~= nil and cname ~= nil then if	mw.ustring.sub(uname,1,1) ~= '[' and	mw.ustring.sub(uname,1,1) ~= '}' then cnamu ='📤 ' uname = ..unam2..; end tooln = ..tooln..; txttb['br']='Ardamezioù krouet gant '..uname..' gant '..tooln..'.'; txttb['cs']='Erb vytvořený uživatelem '..uname..' pomocí nástroje '..tooln..'.'; txttb['de']='Wappen die der Benutzer '..uname..' mittels '..tooln..' erstellt hat.'; txttb['en']='Coat of arms created by the user '..uname..' using '..tooln..'.'; txttb['es']='Escudos creados por el usuario '..uname..' utilizando '..tooln..'.'; txttb['et']='Kasutaja '..uname..' poolt '..tooln.."'i abil loodud vapp."; txttb['eu']=uname..' lankideak '..tooln..' erabiliz sortutako armarriak.'; txttb['fi']= uname..'-käyttäjän '..tooln..'-ohjelmalla luoma vaakuna.'; txttb['fr']="Blasons créés par l'utilisateur "..uname.." à l'aide de "..tooln.."."; txttb['hu']= uname..' felhasználó által '..tooln..' segítségével készített címer.'; txttb['it']='Stemmi creati dall utente '..uname..' usando '..tooln..'.'; txttb['lt']='Herbas, sukurtas naudotojo '..uname..' naudojant '..tooln..'.'; txttb['lv']='Ģerbonis, ko izveidojis lietotājs '..uname..', izmantojot '..tooln..'.'; txttb['nl']='Wapen gemaakt door de gebruiker '..uname..' met '..tooln..'.'; txttb['pl']='Herb stworzony przez użytkownika '..uname..' przy użyciu '..tooln..'.'; txttb['pt']='Escudo de armas criado pelo utilizador '..uname..' com '..tooln..'.'; txttb['ru']='Герб, созданный пользователем '..uname..' с помощью '..tooln..'.'; txttb['sv']='Vapensköld skapad av användaren '..uname..' med '..tooln..'.'; txttb['tr']=uname..' kullanıcısı tarafından '..tooln..' ile oluşturulan arma.'; txttb['uk']='Герб, створений користувачем '..uname..' за допомогою '..tooln..'.'; end if	cnamu ~= nil then cattx = cnamu;			-- appears only when cnamv end if	cnamv ~= nil then cattx = cattx.."See also category: Category:"..cnamv.." __HIDDENCAT__"; if	lparm[3] == nil then cattx = cattx..''; else cattx = cattx..''; end if mw.ustring.sub(cnamv,1,1) == 'I' then cattx = cattx..'    with '; table.insert(outtb, frame:expandTemplate{ title = "Catcont", args = { cnamv, coa='files', pref=cattx } } ); else table.insert(outtb, frame:expandTemplate{ title = "=", args = { cattx..' ' } } ); end if	csrpl == 'y' then cattx = "   and Category:Raster images"..cnamr..""; table.insert(outtb, frame:expandTemplate{ title = "=", args = { cattx..' ' } } ); end else if	mw.ustring.sub(cname,1,13) == 'Raster images' then cattx = 'All uploads by '..uname..': '..cattx;	-- Special:ListFiles cattx = cattx..' __HIDDENCAT__';	-- test --			if	csrmn == 'y' then table.insert(outtb, frame:expandTemplate{ title = "=", args = { cattx..' ' } } ); end end if	txttb['de'] ~= nil	then if natlb == 'br' or  natlb == '+'	then	-- exotic languages only for such users table.insert(outtb, frame:expandTemplate{ title = "Br", args = { txttb['br'] } } ); end if natlb == 'cs' or  natlb == '+'	then table.insert(outtb, frame:expandTemplate{ title = "Cs", args = { txttb['cs'] } } ); end table.insert(outtb, frame:expandTemplate{ title = "De", args = { txttb['de'] } } ); if natlb == 'et' or  natlb == 'lt'  or  natlb == 'lv'  or  natlb == '+'	then table.insert(outtb, frame:expandTemplate{ title = "Et", args = { txttb['et'] } } ); end table.insert(outtb, frame:expandTemplate{ title = "En", args = { txttb['en'] } } ); table.insert(outtb, frame:expandTemplate{ title = "Es", args = { txttb['es'] } } ); if natlb == 'eu' or  natlb == '+'	then table.insert(outtb, frame:expandTemplate{ title = "Eu", args = { txttb['eu'] } } ); end if natlb == 'fi' or  natlb == '+'	then table.insert(outtb, frame:expandTemplate{ title = "Fi", args = { txttb['fi'] } } ); end table.insert(outtb, frame:expandTemplate{ title = "Fr", args = { txttb['fr'] } } ); if natlb == 'hu' or  natlb  ==  '+'	then table.insert(outtb, frame:expandTemplate{ title = "Hu", args = { txttb['hu'] } } ); end table.insert(outtb, frame:expandTemplate{ title = "It", args = { txttb['it'] } } ); if natlb == 'et' or  natlb == 'lt'  or  natlb == 'lv'  or  natlb == '+'	then table.insert(outtb, frame:expandTemplate{ title = "Lv", args = { txttb['lv'] } } ); table.insert(outtb, frame:expandTemplate{ title = "Lt", args = { txttb['lt'] } } ); end table.insert(outtb, frame:expandTemplate{ title = "Nl", args = { txttb['nl'] } } ); table.insert(outtb, frame:expandTemplate{ title = "Pl", args = { txttb['pl'] } } ); table.insert(outtb, frame:expandTemplate{ title = "Pt", args = { txttb['pt'] } } ); if natlb == 'ru' or  natlb == '+'	then table.insert(outtb, frame:expandTemplate{ title = "Ru", args = { txttb['ru'] } } ); end table.insert(outtb, frame:expandTemplate{ title = "Sv", args = { txttb['sv'] } } ); if natlb == 'tr' or  natlb  ==  '+'	then table.insert(outtb, frame:expandTemplate{ title = "Tr", args = { txttb['tr'] } } ); end table.insert(outtb, frame:expandTemplate{ title = "Uk", args = { txttb['uk'] } } ); --		table.insert(outtb, frame:expandTemplate{ title = " ", args = { txttb['  '] } } ); end return table.concat (outtb) end -- function catg

🔹🔹🔹🔹🔹🔹🔹🔹 ---

return p;	--