Module:Road data/strings/doc: Difference between revisions

Content deleted Content added
Created page with 'This module is used to store type data for use with several road templates, including {{tl|jct}} and {{tl|routelist row}}. Background information and a summary o...'
 
Continuing
Line 37:
HKG.route = HKG.Route
</source>
 
===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:
* <code>state</code>: The state or province the route is located in.
* <code>country</code>: The country the route is located in. If the country is not passed by the calling module, the parser will attempt to include it.
The above entries are primarily used to find the string module itself, so they should not be a concern for module writers.
 
* <code>type</code>: The type of the route. This determines the entry of the root table that is used by the parser.
* <code>route</code>: The route "number". This is easily the most important argument for module writers.
 
The following entries are used less often:
* <code>county</code>: The county the route is located in. This is usually used for county routes in the United States.
* <code>township</code>: This entry is similar in function and utility to the <code>county</code> entry.
* <code>dab</code>: A tag used to disambiguate the link target. This is mostly used for bannered routes in the United States.
* <code>denom</code>: This rare entry is used exclusively for West Virginia county routes.
 
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 <code>%argument%</code> form. The parser will replace such a statement with the value of the <code>argument</code> 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 <code>[arg|equals|then|else]</code>. This functions as a rudimentary if-then-else statement. The parser tests the value of <code>arg</code> to see if it is equal to the value specified in <code>equals</code>. <code>equals</code> may be empty, in which case the parser tests the existence of the <code>arg</code> argument. If the result of the test is true, the statement is replaced with the value of the <code>then</code> block. Otherwise, it is replaced with the value of the <code>else</code> 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 <code>dab</code> argument is tested and the link disambiguation is adjusted accordingly, as follows (from [[Module:Road data/strings/USA/AL]]):
<source lang="lua">
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"}
</source>
 
When parsing the <code>link</code> field, the parser first checks to see if the <code>dab</code> argument was provided. If so, it replaces the statement with <code>%dab%, </code>. If not, the statement is replaced with the empty string placed in the <code>else</code> block. Then, the parser replaces <code>%route%</code> with the route number and, if the <code>dab</code> argument was provided, <code>%dab%</code> with the value of that argument.