<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ar">
	<id>https://3rabica.org/index.php?action=history&amp;feed=atom&amp;title=%D9%88%D8%AD%D8%AF%D8%A9%3ARoad_data</id>
	<title>وحدة:Road data - تاريخ المراجعة</title>
	<link rel="self" type="application/atom+xml" href="https://3rabica.org/index.php?action=history&amp;feed=atom&amp;title=%D9%88%D8%AD%D8%AF%D8%A9%3ARoad_data"/>
	<link rel="alternate" type="text/html" href="https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:Road_data&amp;action=history"/>
	<updated>2026-06-04T20:16:53Z</updated>
	<subtitle>تاريخ التعديل لهذه الصفحة في الويكي</subtitle>
	<generator>MediaWiki 1.43.7</generator>
	<entry>
		<id>https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:Road_data&amp;diff=412&amp;oldid=prev</id>
		<title>عبد العزيز: أنشأ الصفحة ب&#039;local p = {}  -- Change to &quot;&quot; upon deployment. local moduleSuffix = &quot;/sandbox&quot;  local parserModuleName = &quot;Module:Road data/parser&quot; .. moduleSuffix local statenameModuleN...&#039;</title>
		<link rel="alternate" type="text/html" href="https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:Road_data&amp;diff=412&amp;oldid=prev"/>
		<updated>2016-05-25T13:07:22Z</updated>

		<summary type="html">&lt;p&gt;أنشأ الصفحة ب&amp;#039;local p = {}  -- Change to &amp;quot;&amp;quot; upon deployment. local moduleSuffix = &amp;quot;/sandbox&amp;quot;  local parserModuleName = &amp;quot;Module:Road data/parser&amp;quot; .. moduleSuffix local statenameModuleN...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;صفحة جديدة&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Change to &amp;quot;&amp;quot; upon deployment.&lt;br /&gt;
local moduleSuffix = &amp;quot;/sandbox&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local parserModuleName = &amp;quot;Module:Road data/parser&amp;quot; .. moduleSuffix&lt;br /&gt;
local statenameModuleName = &amp;quot;Module:Jct/statename/sandbox&amp;quot; -- TODO transition&lt;br /&gt;
&lt;br /&gt;
local concat = table.concat&lt;br /&gt;
local insert = table.insert&lt;br /&gt;
local format = mw.ustring.format&lt;br /&gt;
&lt;br /&gt;
local parserModule = require(parserModuleName)&lt;br /&gt;
local parser = parserModule.parser&lt;br /&gt;
local util = require(&amp;quot;Module:Road data/util&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
-- Shields&lt;br /&gt;
local defaultShieldSize = 20&lt;br /&gt;
&lt;br /&gt;
local function addContextBanner(route, name, suffix, bannerSpec)&lt;br /&gt;
	local bannerModule = &amp;#039;Module:Road data/banners/&amp;#039; .. string.upper(route.country)&lt;br /&gt;
	local shieldfield = name .. &amp;#039;shield&amp;#039;&lt;br /&gt;
	local shield = parser(route, shieldfield)&lt;br /&gt;
	if shield == nil then&lt;br /&gt;
		-- This route type does not define shield.&lt;br /&gt;
		-- Find shield in the default banner table.&lt;br /&gt;
		shield = parser(route, &amp;#039;shield&amp;#039;, name, bannerModule)&lt;br /&gt;
		if shield and shield ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			if suffix == nil then&lt;br /&gt;
				suffix = parser(route, &amp;#039;shield&amp;#039;, &amp;#039;suffix&amp;#039;, bannerModule)&lt;br /&gt;
			end&lt;br /&gt;
			if suffix and suffix ~= &amp;#039;&amp;#039; then&lt;br /&gt;
				shield = shield .. &amp;quot; &amp;quot; .. suffix&lt;br /&gt;
			end&lt;br /&gt;
			shield = shield .. &amp;quot;.svg&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if shield and shield ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		local shieldsizefield = name .. &amp;#039;shieldsize&amp;#039;&lt;br /&gt;
		local shieldSize = parser(route, shieldsizefield)&lt;br /&gt;
		if shieldSize == nil then&lt;br /&gt;
			-- This route type does not define shield size.&lt;br /&gt;
			-- Find shield size in the default banner table.&lt;br /&gt;
			shieldSize = parser(route, &amp;#039;shieldsize&amp;#039;, name, bannerModule)&lt;br /&gt;
		end&lt;br /&gt;
		if shieldSize == nil then shieldSize = &amp;quot;20&amp;quot; end&lt;br /&gt;
		-- Add banner plate.&lt;br /&gt;
		insert(bannerSpec, {shield, shieldSize})&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function bannerSpec(banner, bannerSize, bannerSuffix, route)&lt;br /&gt;
	local banners = {}&lt;br /&gt;
	if type(banner) == &amp;quot;table&amp;quot; then&lt;br /&gt;
		local bannerSizeIsNotTable = type(bannerSize) ~= &amp;quot;table&amp;quot;&lt;br /&gt;
		for i,filename in ipairs(banner) do&lt;br /&gt;
			local bannersize = bannerSizeIsNotTable and bannerSize or bannerSize[i] or defaultShieldSize&lt;br /&gt;
			insert(banners, {filename, bannersize})&lt;br /&gt;
		end&lt;br /&gt;
	elseif banner ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		insert(banners, {banner, bannerSize})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if route.dir then&lt;br /&gt;
		addContextBanner(route, &amp;#039;dir&amp;#039;, bannerSuffix, banners)&lt;br /&gt;
	end&lt;br /&gt;
	if route.to then&lt;br /&gt;
		addContextBanner(route, &amp;#039;to&amp;#039;, bannerSuffix, banners)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return banners&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function shieldSpec(route, mainShield)&lt;br /&gt;
	local shieldSpec = {}&lt;br /&gt;
&lt;br /&gt;
	local shield&lt;br /&gt;
	if mainShield then shield = parser(route, &amp;quot;shieldmain&amp;quot;) end&lt;br /&gt;
	if not shield then shield = parser(route, &amp;#039;shield&amp;#039;) or &amp;#039;&amp;#039; end&lt;br /&gt;
	if shield == &amp;#039;&amp;#039; then return shieldSpec end&lt;br /&gt;
&lt;br /&gt;
	local shieldsize&lt;br /&gt;
	if mainShield then shieldsize = parser(route, &amp;quot;shieldmainsize&amp;quot;) end&lt;br /&gt;
	if not shieldsize then shieldsize = parser(route, &amp;quot;shieldsize&amp;quot;) or &amp;quot;&amp;quot; end&lt;br /&gt;
	local shieldsizeIsNotTable = type(shieldsize) ~= &amp;quot;table&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	local banner = parser(route, &amp;#039;banner&amp;#039;) or {}&lt;br /&gt;
	local bannersize = parser(route, &amp;#039;bannersize&amp;#039;) or defaultShieldSize&lt;br /&gt;
	local bannersuffix = parser(route, &amp;#039;bannersuffix&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	local bannerIsNotTable = type(banner) ~= &amp;quot;table&amp;quot;&lt;br /&gt;
	local bannersizeIsNotTable = type(bannersize) ~= &amp;quot;table&amp;quot;&lt;br /&gt;
	local bannersuffixIsNotTable = type(bannersuffix) ~= &amp;quot;table&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	if type(shield) == &amp;quot;table&amp;quot; then&lt;br /&gt;
		for i,filename in ipairs(shield) do&lt;br /&gt;
			local size = shieldsizeIsNotTable and shieldsize or shieldsize[i]&lt;br /&gt;
			if size == &amp;quot;&amp;quot; then size = nil end&lt;br /&gt;
			-- banner.all describes banners that apply to all multiple shields.&lt;br /&gt;
			local shieldBanner = bannerIsNotTable and banner or (banner[i] or banner.all or {})&lt;br /&gt;
			-- Banner size is default if the corresponding entry&lt;br /&gt;
			-- in bannerSize table is not set.&lt;br /&gt;
			local shieldBannerSize =&lt;br /&gt;
				bannersizeIsNotTable and bannersize&lt;br /&gt;
				or (bannersize[i] or bannersize.all or defaultShieldSize)&lt;br /&gt;
			local shieldBannerSuffix = bannersuffix and (bannersuffixIsNotTable and bannersuffix or bannersuffix[i])&lt;br /&gt;
			insert(shieldSpec, {&lt;br /&gt;
				shield = {filename, size},&lt;br /&gt;
				banners = bannerSpec(shieldBanner, shieldBannerSize, shieldBannerSuffix, route)&lt;br /&gt;
			})&lt;br /&gt;
		end&lt;br /&gt;
	elseif shield ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		if shieldsize == &amp;quot;&amp;quot; then shieldsize = nil end&lt;br /&gt;
		insert(shieldSpec, {&lt;br /&gt;
			shield = {shield, shieldsize},&lt;br /&gt;
			banners = bannerSpec(banner, bannersize,  bannersuffix, route)&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return shieldSpec&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local missingShields&lt;br /&gt;
&lt;br /&gt;
local shieldExistsCache = {}&lt;br /&gt;
&lt;br /&gt;
-- Return up to two booleans.&lt;br /&gt;
-- The first boolean is false if `shield` does not exist, and true otherwise.&lt;br /&gt;
-- If the first boolean is true, the second boolean is true if the shield is&lt;br /&gt;
-- landscape (width &amp;gt;= height), and false otherwise.&lt;br /&gt;
local function shieldExists(shield)&lt;br /&gt;
	local result = shieldExistsCache[shield]&lt;br /&gt;
	if result == nil then&lt;br /&gt;
		local file = mw.title.new(shield, &amp;#039;Media&amp;#039;).file&lt;br /&gt;
		-- Cache result.&lt;br /&gt;
		local exists = file.exists&lt;br /&gt;
		result = {exists}&lt;br /&gt;
		if exists then result[2] = file.width &amp;gt;= file.height end&lt;br /&gt;
		shieldExistsCache[shield] = result&lt;br /&gt;
	end&lt;br /&gt;
	if result[1] then return true, result[2] end&lt;br /&gt;
	insert(missingShields, shield)&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function render(shieldEntry, scale, showLink)&lt;br /&gt;
	local shield = shieldEntry.shield&lt;br /&gt;
	local banners = shieldEntry.banners&lt;br /&gt;
	local exists, landscape = shieldExists(shield[1])&lt;br /&gt;
	if not exists then return &amp;#039;&amp;#039; end&lt;br /&gt;
&lt;br /&gt;
	local size&lt;br /&gt;
	if shield[2] then&lt;br /&gt;
		local width, height = mw.ustring.match(shield[2], &amp;quot;(%d*)x?(%d*)&amp;quot;)&lt;br /&gt;
		width = tonumber(width)&lt;br /&gt;
		height = tonumber(height)&lt;br /&gt;
		local sizeparts = {}&lt;br /&gt;
		if width then&lt;br /&gt;
			insert(sizeparts, format(&amp;quot;%d&amp;quot;, width * scale))&lt;br /&gt;
		end&lt;br /&gt;
		if height then&lt;br /&gt;
			insert(sizeparts, format(&amp;quot;x%d&amp;quot;, height * scale))&lt;br /&gt;
		end&lt;br /&gt;
		size = concat(sizeparts)&lt;br /&gt;
	else&lt;br /&gt;
		size = format(&amp;quot;%s%d&amp;quot;, landscape and &amp;quot;x&amp;quot; or &amp;quot;&amp;quot;, defaultShieldSize * scale)&lt;br /&gt;
	end&lt;br /&gt;
	local link = showLink and &amp;quot;&amp;quot; or &amp;quot;|link=&amp;quot;&lt;br /&gt;
	local shieldCode = format(&amp;quot;[[File:%s|%spx%s|%s]]&amp;quot;, shield[1], size, link, shield[1])&lt;br /&gt;
	if not banners[1] then return shieldCode end&lt;br /&gt;
&lt;br /&gt;
	for _,banner in ipairs(banners) do&lt;br /&gt;
		if shieldExists(banner[1]) then&lt;br /&gt;
			shieldCode = format(&amp;quot;[[File:%s|%dpx%s|%s]]&amp;lt;br&amp;gt;%s&amp;quot;,&lt;br /&gt;
				banner[1],&lt;br /&gt;
				banner[2] * scale,&lt;br /&gt;
				link,&lt;br /&gt;
				banner[1],&lt;br /&gt;
				shieldCode)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;&amp;lt;span style=&amp;quot;display: inline-block; vertical-align: baseline; line-height: 0; text-align: center;&amp;quot;&amp;gt;&amp;#039; .. shieldCode .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.shield(route, scale, showLink, mainShield)&lt;br /&gt;
	missingShields = {}&lt;br /&gt;
	if route.rdt then&lt;br /&gt;
		local shieldSize = mw.ustring.match(route.rdt, &amp;#039;^(%d+)$&amp;#039;) or 17&lt;br /&gt;
		scale = shieldSize/defaultShieldSize&lt;br /&gt;
	end&lt;br /&gt;
	scale = scale or 1&lt;br /&gt;
&lt;br /&gt;
	local rendered = {}&lt;br /&gt;
	for _,entry in ipairs(shieldSpec(route, mainShield)) do&lt;br /&gt;
		insert(rendered, render(entry, scale, showLink))&lt;br /&gt;
	end&lt;br /&gt;
	return concat(rendered), missingShields&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.link(route)&lt;br /&gt;
	local abbr = parser(route, &amp;#039;abbr&amp;#039;)&lt;br /&gt;
	if not abbr then&lt;br /&gt;
		route.typeerror = true&lt;br /&gt;
		return util.err(format(&amp;quot;Invalid type: %s&amp;quot;, route.type or &amp;quot;(nil)&amp;quot;))&lt;br /&gt;
	end&lt;br /&gt;
	if route.nolink then return abbr, abbr end&lt;br /&gt;
&lt;br /&gt;
	local link = parser(route, &amp;#039;link&amp;#039;) or &amp;#039;&amp;#039;&lt;br /&gt;
	if link == &amp;#039;&amp;#039; then return abbr, abbr end&lt;br /&gt;
&lt;br /&gt;
	return format(&amp;quot;[[%s|%s]]&amp;quot;, link, abbr), abbr&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function stateName(args)&lt;br /&gt;
	-- TODO transition&lt;br /&gt;
	local data = mw.loadData(statenameModuleName) &lt;br /&gt;
	local abbr = args.state or args.province&lt;br /&gt;
	local countryData = data[args.country]&lt;br /&gt;
	return countryData and countryData[abbr]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.locations(args, module, group)&lt;br /&gt;
	module = module or &amp;quot;&amp;quot;&lt;br /&gt;
	local modulearticle = module .. &amp;quot;article&amp;quot;&lt;br /&gt;
	local moduleprefix = module .. &amp;quot;prefix&amp;quot;&lt;br /&gt;
	local modulenameprefix = module .. &amp;quot;nameprefix&amp;quot;&lt;br /&gt;
	local modulenamesuffix = module .. &amp;quot;namesuffix&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	local warnings = {}&lt;br /&gt;
&lt;br /&gt;
	-- Region, for disambiguation&lt;br /&gt;
	local region = parserModule.parser(args, &amp;quot;region&amp;quot;, &amp;quot; common &amp;quot;)&lt;br /&gt;
	if not region then&lt;br /&gt;
		-- TODO transition&lt;br /&gt;
		if args.region then&lt;br /&gt;
			warnings.region = &amp;quot;region parameter is deprecated&amp;quot;&lt;br /&gt;
			region = args.region&lt;br /&gt;
		elseif args.country and (args.state or args.province) then&lt;br /&gt;
			warnings.region = &amp;quot;Inferring region from country and state/province&amp;quot;&lt;br /&gt;
			region = stateName(args)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local regionName&lt;br /&gt;
	local regionText&lt;br /&gt;
	if type(region) == &amp;quot;table&amp;quot; then&lt;br /&gt;
		regionName = region.name&lt;br /&gt;
		regionText = format(&amp;quot;[[%s|%s]]&amp;quot;, region.link, regionName)&lt;br /&gt;
	else&lt;br /&gt;
		regionName = region&lt;br /&gt;
		regionText = format(&amp;quot;[[%s]]&amp;quot;, regionName)&lt;br /&gt;
	end&lt;br /&gt;
	args.region = regionName&lt;br /&gt;
&lt;br /&gt;
	local locations = parserModule.parser(args, &amp;quot;locations&amp;quot;, &amp;quot; common &amp;quot;) or {}&lt;br /&gt;
&lt;br /&gt;
	-- Primary topic requires no specialization to supplied locations.&lt;br /&gt;
	local primaryTopic = not locations and module == &amp;quot;jctint&amp;quot; and args.primary_topic ~= &amp;#039;no&amp;#039;&lt;br /&gt;
	if args.primary_topic then&lt;br /&gt;
		-- TODO transition&lt;br /&gt;
		warnings.primary_topic = &amp;quot;primary_topic parameter is deprecated&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Independent city&lt;br /&gt;
	local indepCityText&lt;br /&gt;
	if args.indep_city_special then&lt;br /&gt;
		indepCityText = args.indep_city_special -- Overrides `indep_city` argument.&lt;br /&gt;
	elseif args.indep_city then&lt;br /&gt;
		local indepCity = args.indep_city&lt;br /&gt;
		local spec = locations.indep_city&lt;br /&gt;
		if spec then&lt;br /&gt;
			local link = format(&amp;quot;%s%s%s&amp;quot;,&lt;br /&gt;
				spec.linkprefix or &amp;quot;&amp;quot;, indepCity, spec.linksuffix or &amp;quot;&amp;quot;)&lt;br /&gt;
			local name = format(&amp;quot;%s%s%s&amp;quot;,&lt;br /&gt;
				spec[modulenameprefix] or spec.nameprefix or &amp;quot;&amp;quot;,&lt;br /&gt;
				indepCity,&lt;br /&gt;
				spec[modulenamesuffix] or spec.namesuffix or &amp;quot;&amp;quot;)&lt;br /&gt;
			indepCityText = format(&amp;quot;%s%s[[%s|%s]]&amp;quot;,&lt;br /&gt;
				spec[modulearticle] or spec.article or &amp;quot;&amp;quot;,&lt;br /&gt;
				spec[moduleprefix] or spec.prefix or &amp;quot;&amp;quot;,&lt;br /&gt;
				link, name)&lt;br /&gt;
		else&lt;br /&gt;
			-- TODO transition&lt;br /&gt;
			warnings.indep_city = &amp;quot;Spec for indep_city parameter undefined in road data module&amp;quot;&lt;br /&gt;
			local cityLink -- Wikilink for independent city&lt;br /&gt;
			if primaryTopic then&lt;br /&gt;
				cityLink = format(&amp;#039;[[%s]]&amp;#039;, indepCity)&lt;br /&gt;
			else&lt;br /&gt;
				-- Specialize independent city to the region.&lt;br /&gt;
				cityLink = format(&amp;#039;[[%s, %s|%s]]&amp;#039;, indepCity, region, indepCity)&lt;br /&gt;
			end&lt;br /&gt;
			indepCityText = &amp;quot;[[Independent city|City]] of &amp;quot; .. cityLink&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if indepCityText then&lt;br /&gt;
		return {region = regionText, indep_city = indepCityText, warnings = warnings}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- First-level subdivision, e.g., county&lt;br /&gt;
	-- Name of the type of subdivision, e.g., &amp;quot;County&amp;quot; and &amp;quot;Parish&amp;quot;&lt;br /&gt;
	local sub1name = args.sub1name -- TODO transition&lt;br /&gt;
	local sub1Text&lt;br /&gt;
	if args.sub1_special then&lt;br /&gt;
		sub1Text = args.sub1_special -- Overrides `sub1` argument.&lt;br /&gt;
	elseif args.sub1 then&lt;br /&gt;
		local sub1 = args.sub1&lt;br /&gt;
		local article&lt;br /&gt;
		local link = sub1&lt;br /&gt;
		local name = sub1&lt;br /&gt;
		-- Type of first-level subdivision area, as a form of disambiguation&lt;br /&gt;
		local sub1area = args.sub1area&lt;br /&gt;
		if sub1area then&lt;br /&gt;
			local sub1areaSpec = locations.sub1areas and locations.sub1areas[sub1area]&lt;br /&gt;
			if sub1areaSpec then&lt;br /&gt;
				article = sub1areaSpec[modulearticle] or sub1areaSpec.article or &amp;quot;&amp;quot;&lt;br /&gt;
				link = format(&amp;quot;%s%s%s&amp;quot;,&lt;br /&gt;
					sub1areaSpec.linkprefix or &amp;quot;&amp;quot;, link, sub1areaSpec.linksuffix or &amp;quot;&amp;quot;)&lt;br /&gt;
				name = format(&amp;quot;%s%s%s&amp;quot;,&lt;br /&gt;
					group and &amp;quot;&amp;quot; or sub1areaSpec[modulenameprefix] or sub1areaSpec.nameprefix or &amp;quot;&amp;quot;,&lt;br /&gt;
					name,&lt;br /&gt;
					group and &amp;quot;&amp;quot; or sub1areaSpec[modulenamesuffix] or sub1areaSpec.namesuffix or &amp;quot;&amp;quot;)&lt;br /&gt;
			else&lt;br /&gt;
				-- TODO report error&lt;br /&gt;
				local errMsg = util.err(format(&amp;quot;Undefined sub1area: %s&amp;quot;, sub1area))&lt;br /&gt;
				name = format(&amp;quot;%s%s&amp;quot;, name, errMsg)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if locations.sub1 then&lt;br /&gt;
			local spec = locations.sub1&lt;br /&gt;
			-- Prepend and append text from spec.&lt;br /&gt;
			link = format(&amp;quot;%s%s%s&amp;quot;,&lt;br /&gt;
				spec.linkprefix or &amp;quot;&amp;quot;, link, spec.linksuffix or &amp;quot;&amp;quot;)&lt;br /&gt;
			name = format(&amp;quot;%s%s%s&amp;quot;,&lt;br /&gt;
				spec[modulenameprefix] or spec.nameprefix or &amp;quot;&amp;quot;,&lt;br /&gt;
				name,&lt;br /&gt;
				spec[modulenamesuffix] or spec.namesuffix or &amp;quot;&amp;quot;)&lt;br /&gt;
			sub1Text = format(&amp;quot;%s[[%s|%s]]&amp;quot;, article or &amp;quot;&amp;quot;, link, name)&lt;br /&gt;
		else&lt;br /&gt;
			-- TODO transition&lt;br /&gt;
			warnings.sub1 = &amp;quot;Spec for sub1 parameter undefined in road data module&amp;quot;&lt;br /&gt;
			-- Add type (if specified) to wikilink for first-level subdivision.&lt;br /&gt;
			local sub1Link = sub1name and format(&amp;quot;%s %s&amp;quot;, sub1, sub1name) or sub1&lt;br /&gt;
			local sub1Name = module == &amp;quot;jcttop&amp;quot; and sub1Link or sub1&lt;br /&gt;
			if primaryTopic then&lt;br /&gt;
				sub1Text = format(&amp;#039;[[%s|%s]]&amp;#039;, sub1Link, sub1Name)&lt;br /&gt;
			else&lt;br /&gt;
				-- Specialize first-level subdivision, with type added, to the region.&lt;br /&gt;
				sub1Text = format(&amp;#039;[[%s, %s|%s]]&amp;#039;, sub1Link, region, sub1Name)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Second-level subdivision, e.g., city and town&lt;br /&gt;
	local sub2Text&lt;br /&gt;
	if args.sub2_special then&lt;br /&gt;
		sub2Text = args.sub2_special -- Overrides `sub2` argument.&lt;br /&gt;
	elseif args.sub2 then&lt;br /&gt;
		local sub2 = args.sub2&lt;br /&gt;
		if sub2 == &amp;quot;none&amp;quot; then&lt;br /&gt;
			sub2Text = &amp;quot;&amp;amp;#8203;&amp;quot; -- Zero-width space&lt;br /&gt;
		elseif sub2 == &amp;quot;&amp;amp;nbsp;&amp;quot; then&lt;br /&gt;
			-- TODO transition&lt;br /&gt;
			warnings.sub2 = &amp;quot;&amp;amp;nbsp; argument for sub2 parameter is deprecated&amp;quot;&lt;br /&gt;
			sub2Text = &amp;quot;&amp;amp;#8203;&amp;quot; -- Zero-width space&lt;br /&gt;
		elseif primaryTopic then&lt;br /&gt;
			-- TODO transition&lt;br /&gt;
			sub2Text = format(&amp;quot;[[%s]]&amp;quot;, sub2)&lt;br /&gt;
		else&lt;br /&gt;
			local article&lt;br /&gt;
			local link = sub2&lt;br /&gt;
			local name = sub2&lt;br /&gt;
			-- Type of area, e.g., city and village, as a form of disambiguation&lt;br /&gt;
			local sub2area = args.sub2area --[[TODO transition]] or args.area&lt;br /&gt;
			if sub2area then&lt;br /&gt;
				local sub2areaSpec = locations.sub2areas and locations.sub2areas[sub2area]&lt;br /&gt;
				if not sub2areaSpec then&lt;br /&gt;
					-- TODO transition&lt;br /&gt;
					warnings.sub2 =&lt;br /&gt;
						format(&amp;quot;Spec for area parameter &amp;#039;%s&amp;#039; undefined in road data module&amp;quot;, sub2area)&lt;br /&gt;
					local sub2areas = { -- table of different area types&lt;br /&gt;
						city = {&lt;br /&gt;
							linksuffix = &amp;quot; (city)&amp;quot;,&lt;br /&gt;
							jcttoparticle = &amp;quot;the &amp;quot;,&lt;br /&gt;
							nameprefix = &amp;quot;City of &amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						town = {&lt;br /&gt;
							linksuffix = &amp;quot; (town)&amp;quot;,&lt;br /&gt;
							jcttoparticle = &amp;quot;the &amp;quot;,&lt;br /&gt;
							nameprefix = &amp;quot;Town of &amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						village = {&lt;br /&gt;
							linksuffix = &amp;quot; (village)&amp;quot;,&lt;br /&gt;
							jcttoparticle = &amp;quot;the &amp;quot;,&lt;br /&gt;
							nameprefix = &amp;quot;Village of &amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						community = {&lt;br /&gt;
							linksuffix = &amp;quot; (community)&amp;quot;,&lt;br /&gt;
							jcttoparticle = &amp;quot;the &amp;quot;,&lt;br /&gt;
							nameprefix = &amp;quot;Community of &amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						CDP = {&lt;br /&gt;
							linksuffix = &amp;quot; (CDP)&amp;quot;,&lt;br /&gt;
							jcttoparticle = &amp;quot;the &amp;quot;,&lt;br /&gt;
							nameprefix = &amp;quot;Community of &amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						hamlet = {&lt;br /&gt;
							linksuffix = &amp;quot; (hamlet)&amp;quot;,&lt;br /&gt;
							jcttoparticle = &amp;quot;the &amp;quot;,&lt;br /&gt;
							nameprefix = &amp;quot;Hamlet of &amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						[&amp;quot;unorganized territory&amp;quot;] = {&lt;br /&gt;
							linksuffix = &amp;quot; (unorganized territory)&amp;quot;,&lt;br /&gt;
							jcttoparticle = &amp;quot;the &amp;quot;,&lt;br /&gt;
							nameprefix = &amp;quot;Unorganized Territory of &amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						township = {&lt;br /&gt;
							linksuffix = &amp;quot; Township&amp;quot;,&lt;br /&gt;
							namesuffix = &amp;quot; Township&amp;quot;,&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					sub2areaSpec = sub2areas[sub2area]&lt;br /&gt;
				end&lt;br /&gt;
				if sub2areaSpec then&lt;br /&gt;
					article = sub2areaSpec[modulearticle] or sub2areaSpec.article or &amp;quot;&amp;quot;&lt;br /&gt;
					link = format(&amp;quot;%s%s%s&amp;quot;,&lt;br /&gt;
						sub2areaSpec.linkprefix or &amp;quot;&amp;quot;, link, sub2areaSpec.linksuffix or &amp;quot;&amp;quot;)&lt;br /&gt;
					name = format(&amp;quot;%s%s%s&amp;quot;,&lt;br /&gt;
						group and &amp;quot;&amp;quot; or sub2areaSpec[modulenameprefix] or sub2areaSpec.nameprefix or &amp;quot;&amp;quot;,&lt;br /&gt;
						name,&lt;br /&gt;
						group and &amp;quot;&amp;quot; or sub2areaSpec[modulenamesuffix] or sub2areaSpec.namesuffix or &amp;quot;&amp;quot;)&lt;br /&gt;
				else&lt;br /&gt;
					-- TODO report error&lt;br /&gt;
					local errMsg = util.err(format(&amp;quot;Undefined sub2area: %s&amp;quot;, sub2area))&lt;br /&gt;
					name = format(&amp;quot;%s%s&amp;quot;, name, errMsg)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if locations.sub2 then&lt;br /&gt;
				local spec = locations.sub2&lt;br /&gt;
				-- Prepend and append text from spec.&lt;br /&gt;
				link = format(&amp;quot;%s%s%s&amp;quot;,&lt;br /&gt;
					spec.linkprefix or &amp;quot;&amp;quot;, link, spec.linksuffix or &amp;quot;&amp;quot;)&lt;br /&gt;
				name = format(&amp;quot;%s%s%s&amp;quot;,&lt;br /&gt;
					spec[modulenameprefix] or spec.nameprefix or &amp;quot;&amp;quot;,&lt;br /&gt;
					name,&lt;br /&gt;
					spec[modulenamesuffix] or spec.namesuffix or &amp;quot;&amp;quot;)&lt;br /&gt;
			else&lt;br /&gt;
				-- TODO transition&lt;br /&gt;
				warnings.sub2 = &amp;quot;Spec for sub2 parameter undefined in road data module&amp;quot;&lt;br /&gt;
				-- Some second-level subdivisions are not unique in a given region.&lt;br /&gt;
				-- `sub1dab` is the first-level subdivision to be used for disambiguation.&lt;br /&gt;
				local sub1dab = args.sub1dab&lt;br /&gt;
				if sub1dab then&lt;br /&gt;
					sub1dab = sub1name and format(&amp;quot;%s %s&amp;quot;, sub1dab, sub1name) or sub1dab&lt;br /&gt;
					link = format(&amp;quot;%s, %s&amp;quot;, link, sub1dab)&lt;br /&gt;
				end&lt;br /&gt;
				link = format(&amp;quot;%s, %s&amp;quot;, link, region) -- Add region to wikilink&lt;br /&gt;
			end&lt;br /&gt;
			sub2Text = format(&amp;quot;%s[[%s|%s]]&amp;quot;, article or &amp;quot;&amp;quot;, link, name)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return {region = regionText, sub1 = sub1Text, sub2 = sub2Text, warnings = warnings}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>عبد العزيز</name></author>
	</entry>
</feed>