# Module:Jcon

local p = {}  
local getArgs = require("Module:Arguments").getArgs  
local data = mw.loadData('Module:Jcon/data')  
local miscTable = data.miscTable  
local typeTable = data.typeTable  
local divisionTable = data.divisionTable  
local pictureTable = data.pictureTable  

---
R E T U R N P I C T U R E  
Return the picture of text  
---

local function returnPicture(,Type,args,division)  
if not pictureTable[division] then -- Return nothing if region doen't have pictures  
return ""  
end  

local export = pictureTable[division][1]..args[2]..pictureTable[division][2] or "" -- Set picture  

if args[2] == "52" and division == "Simcoe" then -- Picture exceptions  
export = "Simcoe county road 52.png"  
elseif args[2] == "407ETR" and division == "Highway" then  
export = "Highway407crest.png"  
elseif args[2] == "QEW" and division == "Highway" then  
export = "Ontario QEW crown.svg"  
else  
routenumber = string.gsub(args[2],"%D","")  
if tonumber(routenumber) == nil then  
return "" -- Return nothing if there's no route number  
elseif tonumber(routenumber) >= 500 and division == "Highway" then -- If highway is secondary  
export = "Ontario Highway "..args[2]..".svg"  
end  
end  
if export == "" or nil then return "" end -- Return nothing if export is nothing  
if :callParserFunction('#ifexist', 'Media:' .. export, '1') ~= '' then -- Set picture sizes  
if args["size"] then  
return table.concat({""})  
elseif args[2] == "407ETR" then  
return table.concat({""})  
elseif division == "Kawartha Lakes" then  
return table.concat({""})  
else  
return table.concat({""})  
end  
else  
return "" -- Retrun nothing if the picture doesn't exist  
end  
end  

---
R E T U R N T E X T  
Returns the text/link  
---

local function returnText(,Type,args,division,showred)  
local export; -- Link  
local display; -- Display (if different from link)  
if args[2] == "407ETR" then -- Exception  
export = "Ontario Highway".." ".."407"  
display = "Highway".." ".."407"  
elseif args[2] == "QEW" then -- Exception  
export = "Queen Elizabeth Way"  
elseif Type == "Highway" then -- Highways  
export = "Ontario Highway".." "..args[2]  
display = "Highway".." "..args[2]  
elseif division == "Kawartha Lakes" then  
export ="Kawartha Lakes" .." ".."Road".." "..args[2]  
display = Type.." ".."Road".." "..args[2]  
elseif Type == "County Highway" or Type == "Regional Highway" then  
export = division.." "..args[2]  
display = Type.." "..args[2]  
else  
export = division.." "..Type.." ".."Road".." "..args[2]  
display = Type.." ".."Road".." "..args[2]  
end  
if (:callParserFunction('#ifexist',export, '1') ~= '' or showred) and not args["nolink"] then  
if display then  
export = ""..display.."" -- Show display  
else  
export = ""..export.."" -- Show export  
end  

return export  
elseif display then  
return display  
else  
return export  
end  
end  

---
R E T U R N P L A C E  
Add name/link for a city/town  
---

local function returnPlace(,export,place,after,showred)  
local preExport  
if :callParserFunction('#ifexist',place..", Ontario", '1') ~= '' or showred then  
preExport = ""..place..""  
else  
preExport = place  
end  
if after == true then  
return export..", "..preExport  
else  
return export.." – "..preExport  
end  
end  

---
P . J C O N  
Return final picture(s)/text(s)  
---

function p.jcon  
local args = getArgs  
args[1] = args[1] or "" -- Unnil args[1]  
local Remove = {"regional","region","county","country",  
"municipality of","city of","^ "," $"} -- Stuff to remove from lowercase input  
for _,v in ipairs(Remove) do  
args[1] = mw.ustring.gsub(args[1]:lower,v,'')  
end  
args[2] = args[2] or ""  
local division = divisionTable[args[1]:lower] or args[1]  
local Type = typeTable[division]  
local export = ""  
if miscTable[args[1]:lower] or miscTable[args[2]:lower] then  
return miscTable[args[1]:lower] or miscTable[args[2]:lower]  
end  
if not typeTable[division] then -- Region not in typeTable  
return "&#8203;"  
end  
if args[2] == "" then -- Need args[2] after this point  
return "&#8203;"  
end  
if args["ot"] then -- If output should only be text  
args["nosh"] = "yes"  
args["nolink"] = "yes"  
end  
args["2A"] = args[2] -- road1 is args[2]  
if args["con"] then args["2B"] = args["con"] end -- road 2 is args["con"]  
if args["con2"] then args["2C"] = args["con2"] end -- road 3 is args["con2"]  
-- G E T P I C T U R E --  
if not args["nosh"] then -- If allowed to add shield  
args[2] = args["2A"] -- Set args[2] to road 1  
picture = returnPicture(,Type,args,division) -- Return picture of road 1  
if args["con"] then  
args[2] = args["2B"] -- Set args[2] to road 2  
picture = picture.."&nbsp;"..returnPicture(,Type,args,division) -- Return picture of road 2  
end  
if args["con2"] then  
args[2] = args["2C"] -- Set args[2] to road 3  
picture = picture.."&nbsp;"..returnPicture(,Type,args,division) -- Return picture of road 3  
end  
if picture ~= "" and not args["pic aft"] then -- If a picture was returned and picture goes first  
picture = picture.."&nbsp;" -- Add a space  
end  
end  
-- A D D P I C T U R E (If it goes before) --  
if not args["pic aft"] and picture then -- If picure goes first  
export = picture  
end  
-- A D D T E X T --  
if not args["notext"] then -- If allowed to show text  
args[2] = args["2A"]  
export = export..returnText(,Type,args,division,args['showred'])  
if args["con"] then  
args[2] = args["2B"]  
export = export.."&nbsp;".."/".." "..returnText(,Type,args,division,args['showred'])  
end  
if args["con2"] then  
args[2] = args["2C"]  
export = export.."&nbsp;".."/".." "..returnText(,Type,args,division,args['showred'])  
end  
end  
if args["dir"] then -- Direction  
export = export.." "..args["dir"]  
if args["condir"] then  
export=export.."/"..args["condir"]  
end  
end  
if args[3] then -- Name (argument 3)  
export = export.." ("..args[3]..")"  
end  
if args["city"] then -- City 1  
export = returnPlace(,export,args["city"],false,args['showred'])  
elseif args["town"] then -- Or town 1  
export = returnPlace(,export,args["town"],false,args['showred'])  
end  
if args["city2"] then -- City 1  
export = returnPlace(,export,args["city2"],true,args['showred'])  
elseif args["town2"] then -- Or town 1  
export = returnPlace(,export,args["town2"],true,args['showred'])  
end  
-- A D D P I C T U R E (If it goes after) --  
if args["pic aft"] and picture then  
export = export.."&nbsp;"..picture  
end  
return export  
end  

---
P . S U P P O R T E D  
Return all supported "regions" in a list format  
---

function p.supported  
local export = "**Note: All inputs are converted to lowercase**  
<u>**Supported 'Regions':**</u>" -- Add header  
local supportedTable = {} -- Used to store all regional tables  
local index = {} -- Used to sort alphabetically  
for correct,_ in pairs(typeTable) do -- Create tables for each region  
supportedTable[correct] = {correct}  
end  
for improper,proper in pairs(divisionTable) do -- Add improper to regional tables  
if supportedTable[proper] then  
table.insert(supportedTable[proper],improper)  
else  
mw.log(proper.." doesn't have a type specified") -- Log regions that do not have a type  
supportedTable[proper] = {proper,improper} -- Create table  
end  
end  
for correct,_ in pairs(supportedTable) do -- Add keys to sortable index  
table.insert(index,correct)  
end  
table.sort(index) -- Sort index  
for _,correct in ipairs(index) do -- Go over each proper region  
for _,name in ipairs(supportedTable[correct]) do -- Go over each region name  
table.sort(supportedTable[correct])  
if name == correct then -- Add to list if proper name  
export = export.."  
• "..name  
else -- Add to list if improper name  
export = export.."  
".."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".."• "..name  
end  
end  
end  
export = export.."  
<u>**Supported MTO signs:**</u>" -- Add MTO header  
for k,v in pairs(miscTable) do -- Add MTO signs  
export = export.."  
• "..k  
end  
return export -- Return list  
end  

---
Return Output  
End of module  
---

return p;