<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Module%3A%E6%B2%99%E7%9B%92%2FHello903hello%2Fmap</id>
	<title>Module:沙盒/Hello903hello/map - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Module%3A%E6%B2%99%E7%9B%92%2FHello903hello%2Fmap"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Module:%E6%B2%99%E7%9B%92/Hello903hello/map&amp;action=history"/>
	<updated>2026-07-16T11:38:37Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Module:%E6%B2%99%E7%9B%92/Hello903hello/map&amp;diff=2982540&amp;oldid=prev</id>
		<title>imported&gt;H78c67c：​←建立内容为“-- copied from Wikivoyage (English) wikivoyage:Module:Map CC BY-SA 3.0 local getArgs = require(&#039;Module:Arguments&#039;).getArgs local p = {}  functio…”的新页面</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Module:%E6%B2%99%E7%9B%92/Hello903hello/map&amp;diff=2982540&amp;oldid=prev"/>
		<updated>2017-12-06T02:37:31Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=WP:AES&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;WP:AES（页面不存在）&quot;&gt;←&lt;/a&gt;建立内容为“-- copied from Wikivoyage (English) &lt;a href=&quot;https://en.wikivoyage.org/wiki/Module:Map&quot; class=&quot;extiw&quot; title=&quot;wikivoyage:Module:Map&quot;&gt;wikivoyage:Module:Map&lt;/a&gt; CC BY-SA 3.0 local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs local p = {}  functio…”的新页面&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- copied from Wikivoyage (English) [[wikivoyage:Module:Map]] CC BY-SA 3.0&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function dbg(v, msg)&lt;br /&gt;
    mw.log((msg or &amp;#039;&amp;#039;) .. mw.text.jsonEncode(v))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Parse all unnamed string parameters in a form of &amp;quot;latitude, longitude&amp;quot; into the real number pairs&lt;br /&gt;
function getSequence(args)&lt;br /&gt;
    local coords = {}&lt;br /&gt;
    for ind, val in pairs( args ) do&lt;br /&gt;
        if type(ind) == &amp;quot;number&amp;quot; then&lt;br /&gt;
            local valid = false&lt;br /&gt;
            local val2 = mw.text.split( val, &amp;#039;,&amp;#039;, true )&lt;br /&gt;
            -- allow for elevation&lt;br /&gt;
            if #val2 &amp;gt;= 2 and #val2 &amp;lt;= 3 then&lt;br /&gt;
                local lat = tonumber(val2[1])&lt;br /&gt;
                local lon = tonumber(val2[2])&lt;br /&gt;
                if lat ~= nil and lon ~= nil then&lt;br /&gt;
                    table.insert(coords, { lon, lat } )&lt;br /&gt;
                    valid = true&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if not valid then error(&amp;#039;Unnamed parameter #&amp;#039; .. ind .. &amp;#039; &amp;quot;&amp;#039; .. val .. &amp;#039;&amp;quot; is not recognized as a valid &amp;quot;latitude,longitude&amp;quot; value&amp;#039;) end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return coords&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--   See http://geojson.org/geojson-spec.html&lt;br /&gt;
-- Convert a comma and semicolon separated numbers into geojson coordinate arrays&lt;br /&gt;
-- Each geotype expects a certain array depth:&lt;br /&gt;
--   Point           - [ lon, lat ]  All other types use point as the basic type&lt;br /&gt;
--   MultiPoint      - array of points: [ point, ... ]&lt;br /&gt;
--   LineString      - array of 2 or more points: [ point, point, ... ]&lt;br /&gt;
--   MultiLineString - array of LineStrings: [ [ point, point, ... ], ... ]&lt;br /&gt;
--   Polygon         - [ [ point, point, point, point, ... ], ... ]&lt;br /&gt;
--                     each LinearRing is an array of 4 or more points, where first and last must be the same&lt;br /&gt;
--                     first LinearRing is the exterior ring, subsequent rings are holes in it&lt;br /&gt;
--   MultiPolygon    - array of Polygons: [ [ [ point, point, point, point, ... ], ... ], ... ]&lt;br /&gt;
--&lt;br /&gt;
-- For example, for the LineString, data &amp;quot;p1;p2;p3&amp;quot; would be converted to [p1,p2,p3] (each &amp;quot;p&amp;quot; is a [lon,lat] value)&lt;br /&gt;
-- LineString has the depth of &amp;quot;1&amp;quot; -- array of points (each point being a two value array)&lt;br /&gt;
-- For Polygon, the same sequence &amp;quot;p1;p2;p3&amp;quot; would be converted to [[p1,p2,p3]]&lt;br /&gt;
-- Which is an array of array of points. But sometimes we need to specify two subarrays of points:&lt;br /&gt;
-- [[p1,p2],[p3]] (last point is in a separate array), and we do it with &amp;quot;p1;p2;;p3&amp;quot;&lt;br /&gt;
-- Similarly, for MultiPolygon, &amp;quot;p1;p2;;;p3&amp;quot; would generate [[[p1,p2]],[[p3]]]&lt;br /&gt;
--&lt;br /&gt;
function p.parseGeoSequence(args)&lt;br /&gt;
    local result = p._parseGeoSequence(args)&lt;br /&gt;
    if type(result) == &amp;#039;string&amp;#039; then error(result) end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._parseGeoSequence(args)&lt;br /&gt;
    local allTypes = {&lt;br /&gt;
        -- how many nested array levels until we get to the Point,&lt;br /&gt;
        -- second is the minimum number of values each Points array must have&lt;br /&gt;
        Point           = { 1, 1 },&lt;br /&gt;
        MultiPoint      = { 1, 0 },&lt;br /&gt;
        LineString      = { 1, 2 },&lt;br /&gt;
        MultiLineString = { 2, 2 },&lt;br /&gt;
        Polygon         = { 2, 4 },&lt;br /&gt;
        MultiPolygon    = { 3, 4 },&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if not allTypes[args.geotype] then return (&amp;#039;Unknown geotype &amp;#039; .. args.geotype) end&lt;br /&gt;
    local levels, min = unpack(allTypes[args.geotype])&lt;br /&gt;
&lt;br /&gt;
    local result&lt;br /&gt;
    result = {}&lt;br /&gt;
    for i = 1, levels do result[i] = {} end&lt;br /&gt;
    local gap = 0&lt;br /&gt;
&lt;br /&gt;
    -- Example for levels==3, converting &amp;quot;p1 ; p2 ; ; ; p3 ; ; p4&amp;quot; =&amp;gt; [[[p1, p2]], [[p3],[p4]]]&lt;br /&gt;
    -- This function will be called after each gap, and all values are done, so the above will call:&lt;br /&gt;
    -- before p3:  gap=2, [],[],[p1,p2]            =&amp;gt; [[[p1,p2]]],[],[]&lt;br /&gt;
    -- before p4:  gap=1, [[[p1,p2]]],[],[p3]      =&amp;gt; [[[p1,p2]]],[[p3]]],[]&lt;br /&gt;
    -- the end,    gap=2, [[[p1,p2]]],[[p3]]],[p4] =&amp;gt; [[[p1,p2]],[[p3],[p4]]],[],[]&lt;br /&gt;
    -- Here, convert at &amp;quot;p1 ; ; &amp;quot; from [[],[p1]]&lt;br /&gt;
    local closeArrays = function (gap)&lt;br /&gt;
        if #result[levels] &amp;lt; min then&lt;br /&gt;
            error(&amp;#039;Each points array must be at least &amp;#039; .. min .. &amp;#039; values&amp;#039;)&lt;br /&gt;
        elseif min == 1 and #result[levels] ~= 1 then&lt;br /&gt;
            -- Point&lt;br /&gt;
            error(&amp;#039;Point must have exactly one data point&amp;#039;)&lt;br /&gt;
        end&lt;br /&gt;
        -- attach arrays in reverse order to the higher order ones&lt;br /&gt;
        for i = levels, levels-gap+1, -1 do&lt;br /&gt;
            table.insert(result[i-1], result[i])&lt;br /&gt;
            result[i] = {}&lt;br /&gt;
        end&lt;br /&gt;
        return 0&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local usedSequence = false&lt;br /&gt;
    for val in mw.text.gsplit(args.data, &amp;#039;;&amp;#039;, true) do&lt;br /&gt;
        local val2 = mw.text.split(val, &amp;#039;,&amp;#039;, true)&lt;br /&gt;
        -- allow for elevation&lt;br /&gt;
        if #val2 &amp;gt;= 2 and #val2 &amp;lt;= 3 and not usedSequence then&lt;br /&gt;
            if gap &amp;gt; 0 then gap = closeArrays(gap) end&lt;br /&gt;
            local lat = tonumber(val2[1])&lt;br /&gt;
            local lon = tonumber(val2[2])&lt;br /&gt;
            if lat == nil or lon == nil then return (&amp;#039;Bad data value &amp;quot;&amp;#039; .. val .. &amp;#039;&amp;quot;&amp;#039;) end&lt;br /&gt;
            table.insert(result[levels], { lon, lat } )&lt;br /&gt;
        else&lt;br /&gt;
            val = mw.text.trim(val)&lt;br /&gt;
            if val == &amp;#039;&amp;#039; then&lt;br /&gt;
                usedSequence = false&lt;br /&gt;
                gap = gap + 1&lt;br /&gt;
                if (gap &amp;gt;= levels) then return (&amp;#039;Data must not skip more than &amp;#039; .. levels-1 .. &amp;#039; values&amp;#039;) end&lt;br /&gt;
            elseif usedSequence then&lt;br /&gt;
                return (&amp;#039;Coordinates may not be added right after the named sequence&amp;#039;)&lt;br /&gt;
            else&lt;br /&gt;
                if gap &amp;gt; 0 then&lt;br /&gt;
                    gap = closeArrays(gap)&lt;br /&gt;
                elseif #result[levels] &amp;gt; 0 then&lt;br /&gt;
                    return (&amp;#039;Named sequence &amp;quot;&amp;#039; .. val .. &amp;#039;&amp;quot; cannot be used in the middle of the sequence&amp;#039;)&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                -- Parse value as a sequence name. Eventually we can load data from external data sources&lt;br /&gt;
                if val == &amp;#039;values&amp;#039; then&lt;br /&gt;
                    val = getSequence(args)&lt;br /&gt;
                elseif min == 4 and val == &amp;#039;world&amp;#039; then&lt;br /&gt;
                    val = {{36000,-180}, {36000,180}, {-36000,180}, {-36000,-180}, {36000,-180}}&lt;br /&gt;
                elseif tonumber(val) ~= nil then&lt;br /&gt;
                    return (&amp;#039;Not a valid coordinate or a sequence name: &amp;#039; .. val)&lt;br /&gt;
                else&lt;br /&gt;
                    return (&amp;#039;Sequence &amp;quot;&amp;#039; .. val .. &amp;#039;&amp;quot; is not known. Try &amp;quot;values&amp;quot; or &amp;quot;world&amp;quot; (for Polygons), or specify values as lat,lon;lat,lon;... pairs&amp;#039;)&lt;br /&gt;
                end&lt;br /&gt;
                result[levels] = val&lt;br /&gt;
                usedSequence = true&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    -- allow one empty last value (some might close the list with an extra semicolon)&lt;br /&gt;
    if (gap &amp;gt; 1) then return (&amp;#039;Data values must not have blanks at the end&amp;#039;) end&lt;br /&gt;
    closeArrays(levels-1)&lt;br /&gt;
    return args.geotype == &amp;#039;Point&amp;#039; and result[1][1] or result[1]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Run this function to check that the above works ok&lt;br /&gt;
function p.parseGeoSequenceTest()&lt;br /&gt;
    local testSeq = function(data, expected)&lt;br /&gt;
        local result = getSequence(data)&lt;br /&gt;
        if type(result) == &amp;#039;table&amp;#039; then&lt;br /&gt;
            local actual = mw.text.jsonEncode(result)&lt;br /&gt;
            result = actual ~= expected and &amp;#039;data=&amp;quot;&amp;#039; .. mw.text.jsonEncode(data) .. &amp;#039;&amp;quot;, actual=&amp;quot;&amp;#039; .. actual .. &amp;#039;&amp;quot;, expected=&amp;quot;&amp;#039; .. expected .. &amp;#039;&amp;quot;&amp;lt;br&amp;gt;\n&amp;#039; or &amp;#039;&amp;#039;&lt;br /&gt;
        else&lt;br /&gt;
            result = result .. &amp;#039;&amp;lt;br&amp;gt;\n&amp;#039;&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end&lt;br /&gt;
    local test = function(geotype, data, expected, values)&lt;br /&gt;
        values = values or {}&lt;br /&gt;
        values.geotype = geotype;&lt;br /&gt;
        values.data = data;&lt;br /&gt;
        local result = p._parseGeoSequence(values)&lt;br /&gt;
        if type(result) == &amp;#039;table&amp;#039; then&lt;br /&gt;
            local actual = mw.text.jsonEncode(result)&lt;br /&gt;
            result = actual ~= expected and &amp;#039;geotype=&amp;quot;&amp;#039; .. geotype .. &amp;#039;&amp;quot;, data=&amp;quot;&amp;#039; .. data .. &amp;#039;&amp;quot;, actual=&amp;quot;&amp;#039; .. actual .. &amp;#039;&amp;quot;, expected=&amp;quot;&amp;#039; .. expected .. &amp;#039;&amp;quot;&amp;lt;br&amp;gt;\n&amp;#039; or &amp;#039;&amp;#039;&lt;br /&gt;
        else&lt;br /&gt;
            result = &amp;#039;geotype=&amp;quot;&amp;#039; .. geotype .. &amp;#039;&amp;quot;, data=&amp;quot;&amp;#039; .. data .. &amp;#039;&amp;quot;, error=&amp;quot;&amp;#039; .. result .. &amp;#039;&amp;lt;br&amp;gt;\n&amp;#039;&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end&lt;br /&gt;
    local values = {&amp;#039; 9 , 8 &amp;#039;,&amp;#039;7,6&amp;#039;}&lt;br /&gt;
    local result = &amp;#039;&amp;#039; ..&lt;br /&gt;
            testSeq({}, &amp;#039;[]&amp;#039;) ..&lt;br /&gt;
            testSeq({&amp;#039;\t\n 1 \r,-10&amp;#039;}, &amp;#039;[[-10,1]]&amp;#039;) ..&lt;br /&gt;
            testSeq(values, &amp;#039;[[8,9],[6,7]]&amp;#039;) ..&lt;br /&gt;
            test(&amp;#039;Point&amp;#039;, &amp;#039;1,2&amp;#039;, &amp;#039;[2,1]&amp;#039;) ..&lt;br /&gt;
            test(&amp;#039;MultiPoint&amp;#039;, &amp;#039;1,2;3,4;5,6&amp;#039;, &amp;#039;[[2,1],[4,3],[6,5]]&amp;#039;) ..&lt;br /&gt;
            test(&amp;#039;LineString&amp;#039;, &amp;#039;1,2;3,4&amp;#039;, &amp;#039;[[2,1],[4,3]]&amp;#039;) ..&lt;br /&gt;
            test(&amp;#039;MultiLineString&amp;#039;, &amp;#039;1,2;3,4&amp;#039;, &amp;#039;[[[2,1],[4,3]]]&amp;#039;) ..&lt;br /&gt;
            test(&amp;#039;MultiLineString&amp;#039;, &amp;#039;1,2;3,4;;5,6;7,8&amp;#039;, &amp;#039;[[[2,1],[4,3]],[[6,5],[8,7]]]&amp;#039;) ..&lt;br /&gt;
            test(&amp;#039;Polygon&amp;#039;, &amp;#039;1,2;3,4;5,6;1,2&amp;#039;, &amp;#039;[[[2,1],[4,3],[6,5],[2,1]]]&amp;#039;) ..&lt;br /&gt;
            test(&amp;#039;MultiPolygon&amp;#039;, &amp;#039;1,2;3,4;5,6;1,2&amp;#039;, &amp;#039;[[[[2,1],[4,3],[6,5],[2,1]]]]&amp;#039;) ..&lt;br /&gt;
            test(&amp;#039;MultiPolygon&amp;#039;, &amp;#039;1,2;3,4;5,6;1,2;;11,12;13,14;15,16;11,12&amp;#039;, &amp;#039;[[[[2,1],[4,3],[6,5],[2,1]],[[12,11],[14,13],[16,15],[12,11]]]]&amp;#039;) ..&lt;br /&gt;
            test(&amp;#039;MultiPolygon&amp;#039;, &amp;#039;1,2;3,4;5,6;1,2;;;11,12;13,14;15,16;11,12&amp;#039;, &amp;#039;[[[[2,1],[4,3],[6,5],[2,1]]],[[[12,11],[14,13],[16,15],[12,11]]]]&amp;#039;) ..&lt;br /&gt;
            test(&amp;#039;MultiPolygon&amp;#039;, &amp;#039;1,2;3,4;5,6;1,2;;;11,12;13,14;15,16;11,12;;21,22;23,24;25,26;21,22&amp;#039;, &amp;#039;[[[[2,1],[4,3],[6,5],[2,1]]],[[[12,11],[14,13],[16,15],[12,11]],[[22,21],[24,23],[26,25],[22,21]]]]&amp;#039;) ..&lt;br /&gt;
            test(&amp;#039;MultiLineString&amp;#039;, &amp;#039;values;;1,2;3,4&amp;#039;, &amp;#039;[[[8,9],[6,7]],[[2,1],[4,3]]]&amp;#039;, values) ..&lt;br /&gt;
            test(&amp;#039;Polygon&amp;#039;, &amp;#039;world;;world&amp;#039;, &amp;#039;[[[36000,-180],[36000,180],[-36000,180],[-36000,-180],[36000,-180]],[[36000,-180],[36000,180],[-36000,180],[-36000,-180],[36000,-180]]]&amp;#039;) ..&lt;br /&gt;
            &amp;#039;&amp;#039;&lt;br /&gt;
    return result ~= &amp;#039;&amp;#039; and result or &amp;#039;Tests passed&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p._tag(args)&lt;br /&gt;
    local tagname = args.type or &amp;#039;maplink&amp;#039;&lt;br /&gt;
    if tagname ~= &amp;#039;maplink&amp;#039; and tagname ~= &amp;#039;mapframe&amp;#039; then error(&amp;#039;unknown type &amp;quot;&amp;#039; .. tagname .. &amp;#039;&amp;quot;&amp;#039;) end&lt;br /&gt;
&lt;br /&gt;
    local geojson&lt;br /&gt;
    local tagArgs = {&lt;br /&gt;
        text = args.text,&lt;br /&gt;
        zoom = tonumber(args.zoom),&lt;br /&gt;
        latitude = tonumber(args.latitude),&lt;br /&gt;
        longitude = tonumber(args.longitude),&lt;br /&gt;
        group = args.group,&lt;br /&gt;
        show = args.show,&lt;br /&gt;
        class = args.class,&lt;br /&gt;
    }&lt;br /&gt;
    if tagname == &amp;#039;mapframe&amp;#039; then&lt;br /&gt;
        tagArgs.width = args.width == nil and 420 or args.width&lt;br /&gt;
        tagArgs.height = args.height == nil and 420 or args.height&lt;br /&gt;
        tagArgs.align = args.align == nil and &amp;#039;right&amp;#039; or args.align&lt;br /&gt;
    elseif not args.class and (args.text == &amp;#039;&amp;#039; or args.text == &amp;#039;&amp;quot;&amp;quot;&amp;#039;) then&lt;br /&gt;
		-- Hide pushpin icon in front of an empty text link&lt;br /&gt;
		tagArgs.class = &amp;#039;no-icon&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if args.data == &amp;#039;&amp;#039; then args.data = nil end&lt;br /&gt;
    if (not args.geotype) ~= (not args.data) then&lt;br /&gt;
        -- one is given, but not the other&lt;br /&gt;
        if args.data then&lt;br /&gt;
            error(&amp;#039;Parameter &amp;quot;data&amp;quot; is given, but &amp;quot;geotype&amp;quot; is not set. Use one of these: Point, MultiPoint, LineString, MultiLineString, Polygon, MultiPolygon&amp;#039;)&lt;br /&gt;
        elseif args.geotype == &amp;quot;Point&amp;quot; and tagArgs.latitude ~= nil and tagArgs.longitude ~= nil then&lt;br /&gt;
            -- For Point geotype, it is enough to set latitude and logitude, and data will be set up automatically&lt;br /&gt;
            args.data = tagArgs.latitude .. &amp;#039;,&amp;#039; .. tagArgs.longitude&lt;br /&gt;
        else&lt;br /&gt;
            error(&amp;#039;Parameter data must be set. Use &amp;quot;values&amp;quot; to use all unnamed parameters as coordinates (lat,lon|lat,lon|...), &amp;quot;world&amp;quot; for the whole world, a combination to make a mask, e.g. &amp;quot;world;;values&amp;quot;, or direct values &amp;quot;lat,lon;lat,lon...&amp;quot; with &amp;quot;;&amp;quot; as value separator&amp;#039;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Kartographer can now automatically calculate needed zoom &amp;amp; lat/long based on the data provided&lt;br /&gt;
    -- Current version ignores mapmasks, but that will also be fixed soon.  Leaving this for now, but can be removed if all is good.&lt;br /&gt;
    -- tagArgs.zoom = tagArgs.zoom == nil and 14 or tagArgs.zoom&lt;br /&gt;
    -- tagArgs.latitude = tagArgs.latitude == nil and 51.47766 or tagArgs.latitude&lt;br /&gt;
    -- tagArgs.longitude = tagArgs.longitude == nil and -0.00115 or tagArgs.longitude&lt;br /&gt;
&lt;br /&gt;
	if args.image then&lt;br /&gt;
		args.description = (args.description or &amp;#039;&amp;#039;) .. &amp;#039;[[file:&amp;#039; .. args.image .. &amp;#039;|300px]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    if args.geotype then&lt;br /&gt;
        geojson = {&lt;br /&gt;
            type = &amp;quot;Feature&amp;quot;,&lt;br /&gt;
            properties = {&lt;br /&gt;
                title = args.title,&lt;br /&gt;
                description = args.description,&lt;br /&gt;
                [&amp;#039;marker-size&amp;#039;] = args[&amp;#039;marker-size&amp;#039;],&lt;br /&gt;
                [&amp;#039;marker-symbol&amp;#039;] = args[&amp;#039;marker-symbol&amp;#039;],&lt;br /&gt;
                [&amp;#039;marker-color&amp;#039;] = args[&amp;#039;marker-color&amp;#039;],&lt;br /&gt;
                stroke = args.stroke,&lt;br /&gt;
                [&amp;#039;stroke-opacity&amp;#039;] = tonumber(args[&amp;#039;stroke-opacity&amp;#039;]),&lt;br /&gt;
                [&amp;#039;stroke-width&amp;#039;] = tonumber(args[&amp;#039;stroke-width&amp;#039;]),&lt;br /&gt;
                fill = args.fill,&lt;br /&gt;
                [&amp;#039;fill-opacity&amp;#039;] = tonumber(args[&amp;#039;fill-opacity&amp;#039;]),&lt;br /&gt;
            },&lt;br /&gt;
            geometry = {&lt;br /&gt;
                type = args.geotype,&lt;br /&gt;
                coordinates = p.parseGeoSequence(args)&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if args.debug ~= nil then&lt;br /&gt;
        local html = mw.html.create(tagname, not geojson and {selfClosing=true} or nil)&lt;br /&gt;
        :attr(tagArgs)&lt;br /&gt;
        if geojson then&lt;br /&gt;
            html:wikitext( mw.text.jsonEncode(geojson, mw.text.JSON_PRETTY) )&lt;br /&gt;
        end&lt;br /&gt;
        return &amp;#039;syntaxhighlight&amp;#039;, tostring(html) .. mw.text.jsonEncode(args, mw.text.JSON_PRETTY), { lang = &amp;#039;json&amp;#039; }&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return tagname, geojson and mw.text.jsonEncode(geojson) or &amp;#039;&amp;#039;, tagArgs&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.tag(frame)&lt;br /&gt;
    local args = getArgs(frame)&lt;br /&gt;
    local tag, geojson, tagArgs = p._tag(args)&lt;br /&gt;
    return frame:extensionTag(tag, geojson, tagArgs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;H78c67c</name></author>
	</entry>
</feed>