Jump to content
 







Main menu
   


Navigation  



Main page
Contents
Current events
Random article
About Wikipedia
Contact us
Donate
 




Contribute  



Help
Learn to edit
Community portal
Recent changes
Upload file
 








Search  

































Create account

Log in
 









Create account
 Log in
 




Pages for logged out editors learn more  



Contributions
Talk
 



















Contents

   



(Top)
 


1 Syntax  



1.1  Hierarchy and fields  





1.2  Parser arguments  





1.3  Basic string syntax  





1.4  Switching  





1.5  Existence testing  





1.6  Hooks  





1.7  Other functionality  







2 Structure  



2.1  Aliasing  





2.2  Inheriting types  







3 Advanced uses  





4 Style  














Module:Road data/strings/USA/IL







فارسی
Føroyskt


Simple English


 

Edit links
 









Module
Talk
 

















Read
View source
View history
 








Tools
   


Actions  



Read
View source
View history
 




General  



What links here
Related changes
Upload file
Special pages
Permanent link
Page information
Get shortened URL
Download QR code
Wikidata item
 




Print/export  



Download as PDF
Printable version
 
















Appearance
   

 





Permanently protected module

From Wikipedia, the free encyclopedia
 

< Module:Road data | strings | USA

Syntax

Hierarchy and fields

At its most basic level, this module is a nested table of strings. At the top is the root table, named for the abbreviation of a country, state, or province. This table stores the type data for a particular place, which is named in the comment in the first line, and is returned at the end of the module. The table is composed of further tables, one per type. The basic syntax for a type table is:

place.type = {
 shield = "",
 name = "",
 link = "",
 abbr = ""
}

The four main fields in a type table are shield, name, link, and abbr. Currently, these are the types used by all countries. By convention, they are always specified, using an empty string "", if there is no value.

Other common fields in road data tables

USA.CR = {
 shield = "CR %route% jct.svg",
 shieldmain = "[county||%county% |]County %route%.svg",
 name = "County Road %route%",
 link = "",
 abbr = "CR %route%"
}
PER.RN = {
 shield = "PE-%route% route sign.svg",
 name = "National Route %route%",
 link = "Peru Highway %route%",
 abbr = "PE-%route%",
 translation = "Ruta nacional %route%",
 lang = "es-pe"
}

Once a type is defined, it can be referenced later in the code. As seen here, it is common to define all parameters for main types like US and then to use aliases for subtypes such as US-Alt.

MO.US = {
 shield = "US %route%.svg",
 base = "U.S. Route %route%",
 link = "U.S. Route %route% in Missouri",
 abbr = "US&nbsp;%route%",
 width = "expand"
}

MO["US-Alt"] = {
 shield = MO.US.shield,
 link = MO.US.base .. " Alternate ([dab||%dab%, |]Missouri)",
 abbr = MO.US.abbr .. " Alt.",
 banner = "Alternate plate.svg",
 width = "expand"
}

Parser arguments

When the parser function of Module:Road data/parser is called, it is passed up to three parameters. The second one is the field to parse, and the last one is a rarely-used option designed for multiple-shield types. The first and most important parameter is a table of arguments collected by the calling module, which generally includes the state, country, or both; the type and number of the route; and a few miscellaneous arguments. This table of arguments forms the basis of the parser's format string syntax.

The table accessible by the strings includes the following entries by default:

The above entries are primarily used to find the string module itself, so they should not be a concern for module writers.

The following entries are used less often:

Parser hooks, which will be described later, can add entries to this table that may be used by strings.

Basic string syntax

The most basic value that can be used for most type table fields is a specially formatted string, which will be referred to in this documentation as a format string. This is the string that will ultimately be parsed and returned by the parser. A format string is an ordinary string object. The power of these strings comes in the form of two special instructions that are recognized by the parser.

The first is anything in %argument% form. The parser will replace such a statement with the value of the argument entry in the arguments table described earlier. This is what allows the route number to be spliced into a shield or link name.

The second special string is in the form of [arg|equals|then|else]. This functions as a rudimentary if-then-else statement. The parser tests the value of arg to see if it is equal to the value specified in equals. equals may be empty, in which case the parser tests the existence of the arg argument. If the result of the test is true, the statement is replaced with the value of the then block. Otherwise, it is replaced with the value of the else block.

The two statements may be combined. The parser will parse the if-then-else statement first, and then perform the argument inclusion. This combination is commonly used with bannered routes in the United States, where the dab argument is tested and the link disambiguation is adjusted accordingly, as follows:

AL["US-Bus"] = {
 shield = "US %route%.svg",
 link = "U.S. Route %route% Business ([dab||%dab%, |]Alabama)",
 abbr = "US-%route% Bus.",
 banner = "Business plate.svg",
 width = "expand"
}

When parsing the link field, the parser first checks to see if the dab argument was provided. If so, it replaces the statement with %dab%, . If not, the statement is replaced with the empty string placed in the else block. Then, the parser replaces %route% with the route number and, if the dab argument was provided, %dab% with the value of that argument.

Switching

Some logic is too complicated to represent with only format strings. This framework provides several methods to express complex data. All of these involve storing a nested table as the value of a field.

The most straightforward functionality provided by nested tables is switching. In its most basic form, the table consists of a series of key-value pairs, with the keys being route numbers and the values being the format strings used by those routes. Usually, the format string returned does not need parsing, but the option is there. A default entry should be provided to handle any route numbers not explicitly stated. The following is a representative example of route-based switching (from Module:Road data/strings/USA/AR):

AR.AR = {
 shield = {
  default = "Arkansas %route%.svg",
  ["917"] = "Arkansas 917-1.svg",
  ["980"] = "Arkansas 980(Airport).svg"
 },
 link = "Arkansas Highway %route% [dab||(%dab%)|]",
 abbr = "Hwy.&nbsp;%route%",
 width = "expand"
}

In this example, Highways 917 and 980 have non-standard shield names, which are explicitly provided. Other route numbers use the default format.

Switching on other arguments is also allowed. The name of the argument to be used for switching is stated in the arg field of the table. Nesting switches on different arguments is also allowed. A good example that uses both forms of switching can be found in Ontario:

local regionalShields = {
 arg = "county",
 ["Essex"] = "Essex County Road %route%.png",
 ["York"] = "York Regional Road %route%.svg",
 ["Durham"] = "Durham Regional Road %route%.svg",
 ["Niagara"] = "Niagara Regional Road %route%.svg",
 ["Simcoe"] = {
  ["52"] = "Simcoe county road 52.png",
  default = "Simcoe County Road %route%.JPG"
 }
}

In this example, which is a shield table that is reused by several types in Ontario, the county argument is used for the primary switch. If the route is in Simcoe County, a second switch is performed, this time on the route number.

Existence testing

Another use for tables is existence testing. If a table has the ifexists field set to true, the parser will perform existence testing on the result of parsing the default field. If the test fails, the result of parsing the otherwise field is returned. Existence testing may be chained by using a second ifexists table as the value of the first table's otherwise field, and so on. Here's an example of nested existence testing (from Module:Road data/strings/GBR):

GBR.B = {
 shield = {
  ifexists = true,
  default = "UK road B%route%.svg",
  otherwise = {
   ifexists = true,
  default = "UK road B%route%.png"
  }
 },
 link = "",
 abbr = "B%route%"
}

Hooks

Due to technical limitations, these string modules cannot contain functions. Rather than force functionality into the string framework, the parser can call functions in a separate hooks module. The functions in this module, Module:Road data/parser/hooks, are more-or-less fully functional functions. The exact functionalities of these hooks are beyond the scope of this documentation. Descriptions of these hooks may be found on their documentation page.

Generally speaking, a hook is called by setting the hook field in a table as equal to the name of a hook. Hooks receive two arguments, both tables: parameters, which is the table in the definition; and args, which is simply the table of arguments normally passed to the parser. The hook returns a string, which is then parsed as usual. A powerful feature of hooks is that they can add arbitrary values to the argument table, which may be referenced in the string returned by the hook. Generally, the format string returned by the hook is specified in some form by the default field of the table, though there are exceptions. Here is an example of a hook (from Module:Road data/strings/MEX):

MEX.SH = {
 shield = {
  ifexists = true,
  arg = "state",
  SON = "HIGHWAYSON %route%.jpg",
  NLE = "Nuevo Leon State Highway %route%.PNG",
  default = ""
 },
 link = {
  hook = "mask",
  mask = "Road data/masks/MEX",
  base = "state",
  masked = "fullstate",
  default = "%fullstate% State Highway %route%"
 },
 abbr = "SH&nbsp;%route%"
}

In this example, the parser will process the link by calling the mask hook. In short, this hook takes the argument referenced in base, passes it through the mask module specified in mask, and stores it in the field in the arguments noted in masked. The hook returns the string given in default, which has access to the fullstate argument added by the hook.

Other functionality

Functionality exists to display multiple shields for one route, which is used to display tolled and free shields for routes where they differ. This is done by supplying a table with two values, which are listed without indices. The parser is called twice by the calling module, and it returns one shield per call. An example may be found in Texas:

TX.Both = {
 shield = {"Texas %route%.svg", "Toll Texas %route% new.svg"},
 link = "Texas State Highway %route%",
 abbr = "SH&nbsp;%route%",
 width = 40
}

Structure

Each country has its own module. In the United States and Canada, each state/territory/province also has its own module. Each module begins with a comment stating the name of the country or state, followed by the root table declaration, as follows (from Module:Road data/strings/USA/AS):

-- American Samoa
local AS = {}

The root table is named based on the established abbreviation for the country or state, which is the same as the abbreviation used in the module title. This table stores the various types used in that particular place. Most of the remaining code in the module defines these various types. The module ends by returning the root table:

return AS

Aliasing

There are two ways to define a type as an alias. If the type is defined within the module, simply set the new type as equal to the type being aliased, as shown above (from Module:Road data/strings/HKG):

HKG.Route = {
 shield = "HK Route%route%.svg",
 link = "Route %route% (Hong Kong)",
 abbr = "Route&nbsp;%route%"
}

HKG.route = HKG.Route

If the type is defined in a separate module, such as a state highway type being used in another state's module, a special syntax may be used to refer to that module (from Module:Road data/strings/USA/NJ):

NJ.NY = {alias = {module = "USA/NY", type = "NY"}}

This code sets the NY type as a link to the NY type in Module:Road data/strings/USA/NY. The parser will import that module and process the type as if the original module had declared it itself. The alias declaration may not add or override any data in the type table it points to.

Inheriting types

It is possible to predefine several types for a location by inheriting them from another module. In this example, the module for Albania inherits all of the specified types from the Europe module.

-- Albania
local ALB = {}

local util = require("Module:Road data/util")
util.addAll(ALB, require("Module:Road data/strings/EUR"))

Nota bene* Only one module may be inherited at this time.

Advanced uses

It is possible to create multiple types based on a specified pattern using ipairs. In this example from Module:Road data/strings/USA/WA, the US 1926, US 1948, and US 1961 types are all created from the same code. At the bottom that is an override for US 1961's shieldmain.

for _,year in ipairs({"1926", "1948", "1961"}) do
 WA["US " .. year] = {
  shield = format("US %%route%% (%s).svg", year),
  shieldmain = format("US %%route%% Washington %s.svg", year),
  base = WA.US.base,
  name = WA.US.name,
  link = WA.US.link,
  abbr = WA.US.abbr,
  width = "square",
 }
end

WA["US 1961"].shieldmain = "US %route% (1961).svg"

Similarly, subtypes can be created in the same manner. This example creates 9 subtypes each for WA and SR. The aux is inherited from Module:Road data/strings/USA. That, in turn, modifies auxType and spec accordingly.

for _,type in ipairs({'WA', 'SR'}) do
 for _,auxType in ipairs({"Alt", "Bus", "Byp", "Conn", "Opt", "Scenic", "Spur", "Temp", "Truck"}) do
  local spec = WA[" aux "][auxType]
  WA[type .. "-" .. auxType] = {
   shield = WA[type].shield,
   shieldmain = WA[type].shieldmain,
   name = WA[type].name .. " " .. spec.name,
   link = WA[type].link .. " " .. spec.name .. suffix,
   abbr = WA[type].abbr .. " " .. spec.abbrsuffix,
   banner = spec.bannerprefix .. " plate.svg",
   aux = spec.aux,
   width = WA[type].width
  }
 end
end

Style

There are a few style guidelines that should be followed:

  1. Align table fields using tabs. All tables should be aligned so that fields line up with each other, as shown in the above examples.
  2. Each table field should be on its own line.
  3. Add spaces to either side of an assignment operator (equals sign).
  4. Leave a blank line between types. Type aliases should be set off from their base type by a blank line, but no blank lines should be placed between the aliases themselves.

--[==[
To inspect the content of this data module, use [[Special:ExpandTemplates]]
and enter the following input text:
  {{#invoke:Road data/dump|dump|module=Module:<name-of-this-module>}}

To inspect the content of this data module when editing, enter the following
into the Debug console:
  local util = require("Module:Road data/util")
  print(util.arrayToString(p))
To inspect a particular route type, change `p` above to include the route type,
e.g., `p.I` and `p["US-Hist"]`.
]==]

-- Illinois
local IL = {}

local util = require("Module:Road data/util")
local format = mw.ustring.format
util.addAll(IL, require("Module:Road data/strings/USA"))

local suffix = " ([dab||%dab%, |]Illinois)"

IL.I.link = {
 ["39"] = "Interstate 39",
 ["41"] = "Interstate 41",
 ["44"] = "Interstate 44 in Missouri",
 ["72"] = "Interstate 72",
 ["88"] = "Interstate 88 (Illinois)",
 ["172"] = "Interstate 172",
 ["255"] = "Interstate 255",
 ["270"] = "Interstate 270 (Missouri–Illinois)",
 ["280"] = "Interstate 280 (Iowa–Illinois)",
 ["294"] = "Interstate 294",
 ["355"] = "Interstate 355",
 ["474"] = "Interstate 474",
 default = {
  hook = "split",
  split = 100,
  above = "Interstate %route% (Illinois)",
  below = "Interstate %route% in Illinois"
 }
}

for k, v in pairs(IL) do if k:find ("^I") then 
 v.link = IL.I.link
 end
end

IL.BL.link = IL.I.base .. " Business" .. suffix

for k, v in pairs(IL) do if k:find ("^BL") then 
 v.link = IL.BL.link
 end
end

IL.US.shieldmain = {
 ["60"] = {"US 60.svg", "US 62.svg"},
 default = "US %route%.svg"
}
IL.US.name = {
 ["60"] = "U.S. Route 60 and U.S. Route 62",
 default = IL.US.base
}
IL.US.link = "U.S. Route %route% in Illinois"

for k, v in pairs(IL) do if k:find ("^US %d") then 
 v.link = IL.US.link
 end
end

for _,auxType in ipairs({"Alt", "Bus", "Byp", "City", "Conn", "Emerg", "Opt", "Scenic", "Spur", "Temp", "Toll", "Truck"}) do
 local spec = IL[" aux "][auxType]
  for k, v in pairs(IL) do if k:find (auxType) then if k:find ("^US") then
   v.link = IL.US.base .. " " .. spec.name .. suffix
   end
  end
 end
end

for _,type in ipairs({'US 1961'}) do
 for _,auxType in ipairs({"Alt", "Bus", "Byp", "Conn", "Opt", "Scenic", "Spur", "Temp", "Toll", "Truck"}) do
  local spec = IL[" aux "][auxType]
  IL[type .. "-" .. auxType] = {
   shield = IL[type].shield,
   name = IL.US.name.default .. " " .. spec.name,
   link = IL.US.base .. " " .. spec.name .. suffix,
   abbr = IL.US.abbr .. " " .. spec.abbrsuffix,
   banner = spec.bannerprefix .. " plate 1971.svg",
   aux = spec.aux,
   width = "expand",
  }
 end
end

IL["US 1926-Temp"] = {
 shield = IL["US 1926"].shield,
 shieldmain = "US %route% Temporary 1926.svg",
 name = "Temporary " .. IL.US.name.default,
 link = "U.S. Route %route% Temporary ([dab||%dab%, |]Illinois)",
 abbr = "Temp. US&nbsp;%route%",
 width = "square"
}
IL["US 1961-Toll"].name = "Toll " .. IL.US.name.default

IL["US 1961-Toll-Bus"] = {
 shield = IL["US 1961"].shield,
 name = "Toll " .. IL.US.name.default .. " Business",
 link = "U.S. Route %route% Toll Business ([dab||%dab%, |]Illinois)",
 abbr = "Toll US&nbsp;%route% Bus. ",
 banner = "Toll-business plate.svg",
 width = "square"
}

IL["US-Hist"].link = IL.US.link

IL.IL = {
 shield = "Illinois %route%.svg",
 name = "Illinois Route %route%",
 link = "Illinois Route %route%",
 abbr = "IL&nbsp;%route%",
 width = "expand"
}

for _,year in ipairs({"1926", "1950", "1960"}) do
 IL["IL " .. year] = {
  shield = format("Illinois %%route%% (%s).svg", year),
  name = IL.IL.name,
  link = IL.IL.link,
  abbr = IL.IL.abbr,
  orientation = "upright"
 }
end
IL["IL 1924"] = IL["IL 1926"]

for _,type in ipairs({'IL', 'IL 1960'}) do
 for _,auxType in ipairs({"Alt", "Bus", "Byp", "Conn", "Opt", "Scenic", "Spur", "Temp", "Toll", "Truck"}) do
  local spec = IL[" aux "][auxType]
  IL[type .. "-" .. auxType] = {
   shield = IL[type].shield,
   name = IL.IL.name .. " " .. spec.name,
   link = IL.IL.name .. " " .. spec.name .. IL[" dab "],
   abbr = IL.IL.abbr .. " " .. spec.abbrsuffix,
   banner = spec.bannerprefix .. " plate.svg",
   aux = spec.aux,
   width = "expand",
  }
 end
end
IL["IL-Toll"].banner = "Toll plate yellow.svg"

IL.CKC = {
 shield = "Illinois 110.svg",
 name = "Chicago–Kansas City Expressway",
 link = "Chicago–Kansas City Expressway",
 abbr = "IL&nbsp;110 (CKC)",
 banner = "Chicago-Kansas City Expressway plate.svg",
 width = "square"
}

-- add new types above this line if you want it to have the state highway browse and maint
for k, v in pairs(IL) do if k:find ("^%a") then
 v.maint = "[[Illinois Department of Transportation|IDOT]]"
 v.browse = "[[Illinois State Highway System]]"
 v.browselinks = {
  [1] = "[[List of Interstate Highways in Illinois|Interstate]]",
  [2] = "[[List of U.S. Highways in Illinois|US]]",
  [3] = "[[List of state routes in Illinois|State]]",
  [4] = "[[Illinois State Toll Highway Authority|Tollways]]"
 }
 end
end

for k, v in pairs(IL) do if k:find ("Toll$") then 
 v.maint = "[[Illinois State Toll Highway Authority|ISTHA]]"
 end
end

IL.Skyway = {
 shield = "Chicago Skyway logo.svg",
 name = "Chicago Skyway",
 link = "Chicago Skyway",
 abbr = "Chicago Skyway",
 bannersuffix = "blue",
 maint = "Skyway Concession Company"
}

IL.Lincoln.link = "Lincoln Highway in Illinois"

IL.LHT = {
 shield = "Lincoln Heritage Trail.png",
 name = "Lincoln Heritage Trail",
 link = "Lincoln Heritage Trail",
 abbr = "Lincoln Heritage Trail [route||(%route%)|]"
}

IL.MGR = {
 shield = "",
 name = "Meeting of the Great Rivers Scenic Route",
 link = "Meeting of the Great Rivers Scenic Route",
 abbr = "Meeting of the Great Rivers"
}

IL.IRR = {
 shield = "",
 name = "Illinois River Road",
 link = "Illinois River Road",
 abbr = "Illinois River Road"
}

IL.CR.link = "County Road %route% ([county||%county% County, |]Illinois)"
IL.CR.maint = ""
IL.CR.browse = "%county% County Roads"
IL.CR.browselinks = ""


IL.IA = {alias = {module = "USA/IA", type = "IA"}}
IL.IN = {alias = {module = "USA/IN", type = "IN"}}
IL.Toll = {alias = {module = "USA/IN", type = "Toll"}}
IL.KY = {alias = {module = "USA/KY", type = "KY"}}
IL.MO = {alias = {module = "USA/MO", type = "MO"}}
IL.WI = {alias = {module = "USA/WI", type = "WI"}}
IL['I-MO'] = {alias = {module = "USA/MO", type = "I"}}

return IL

Retrieved from "https://en.wikipedia.org/w/index.php?title=Module:Road_data/strings/USA/IL&oldid=1181052503"

Hidden category: 
Wikipedia semi-protected modules
 



This page was last edited on 20 October 2023, at 15:21 (UTC).

Text is available under the Creative Commons Attribution-ShareAlike License 4.0; additional terms may apply. By using this site, you agree to the Terms of Use and Privacy Policy. Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc., a non-profit organization.



Privacy policy

About Wikipedia

Disclaimers

Contact Wikipedia

Code of Conduct

Developers

Statistics

Cookie statement

Mobile view



Wikimedia Foundation
Powered by MediaWiki