Jump to content

Module:Titled coords: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
LUA module to generate titled coordinates from WikiData
 
fixed pattern matching on seconds to allow tenths and hundreds (copied from /sandbox)
Line 1: Line 1:
-- *** Version 1.1 (Alpha) ***
local p = {}
local p = {}


Line 18: Line 19:
-- ** See https://www.lua.org/manual/5.3/manual.html#6.4.1 **
-- ** See https://www.lua.org/manual/5.3/manual.html#6.4.1 **
sidx, _, lat_d, lat_m, lat_s, lat_NS, lon_d, lon_m, lon_s, lon_WE =
sidx, _, lat_d, lat_m, lat_s, lat_NS, lon_d, lon_m, lon_s, lon_WE =
string.find(raw_coords, "(%d+)/(%d+)/(%d+%.?%d?)/(%a)/(%d+)/(%d+)/(%d+%.?%d?)/(%a)")
string.find(raw_coords, "(%d+)/(%d+)/(%d+%.?%d*)/(%a)/(%d+)/(%d+)/(%d+%.?%d*)/(%a)")


if sidx == nil then -- extract without seconds
if sidx == nil then -- extract without seconds
Line 24: Line 25:
string.find(raw_coords, "(%d+)/(%d+)/(%a)/(%d+)/(%d+)/(%a)")
string.find(raw_coords, "(%d+)/(%d+)/(%a)/(%d+)/(%d+)/(%a)")
if sidx == nil then
if sidx == nil then
return output .. "<br/>Error: Failed to process raw_coords"
return output .. "<br/>Error: Failed to process raw_coords: " .. raw_coords
end
end
if string.find(options,"idx") ~= nil then
if string.find(options,"idx") ~= nil then

Revision as of 22:30, 28 October 2023

-- *** Version 1.1 (Alpha) ***
local p = {}

function p.main(frame)
    local raw_coords = frame.args[1]
    local title      = frame.args[2] or ""
    local options    = frame.args[3] or ""

    local has_seconds = 1
    local output = "", coords, sidx, eidx
    local lat_d, lat_m, lat_s, lat_NS, lon_d, lon_m, lon_s, lon_WE

    -- ** Display the raw coordinates obtained from {{wikidata}} **
    if string.find(options,"raw") ~= nil then
        output = output .. "raw_coords:" .. raw_coords
    end

    -- ** Extract the individual fields from the raw coordinates **
    -- ** See https://www.lua.org/manual/5.3/manual.html#6.4.1   **
    sidx, _, lat_d, lat_m, lat_s, lat_NS, lon_d, lon_m, lon_s, lon_WE =
        string.find(raw_coords, "(%d+)/(%d+)/(%d+%.?%d*)/(%a)/(%d+)/(%d+)/(%d+%.?%d*)/(%a)")

    if sidx == nil then -- extract without seconds
        sidx, eidx, lat_d, lat_m, lat_NS, lon_d, lon_m, lon_WE =
            string.find(raw_coords, "(%d+)/(%d+)/(%a)/(%d+)/(%d+)/(%a)")
        if sidx == nil then
            return output .. "<br/>Error: Failed to process raw_coords: " .. raw_coords
        end
        if string.find(options,"idx") ~= nil then
            output = output .. "<br/>start: " .. sidx .. " end: " .. eidx .. " lat_d: " .. lat_d
            return output
        end
        has_seconds = 0
    end

    if string.find(options,"debug") ~= nil then
        if has_seconds == 1 then
            output = output .. "<br/>raw_coords:" .. raw_coords .. "<br/>lat dms = " .. lat_d .. "|" .. lat_m .. "|" .. lat_s .. "|" .. lat_NS ..
                                      "<br/>lon dms = " .. lon_d .. "|" .. lon_m .. "|" .. lon_s .. "|" .. lon_WE
         else
            output = output .. "<br/>raw_coords:" .. raw_coords .. "<br/>lat dm = " .. lat_d .. "|" .. lat_m ..  "|" .. lat_NS ..
                                      "<br/>lon dms = " .. lon_d .. "|" .. lon_m .. "|" .. lon_WE
         end
    end

    -- ** URL encode spaces in the title with + **
    local enc_title = title:gsub(" ", "+")

    -- ** Call {{coord}} passing individual fields and setting the title **
    local type_title = "type:mountain&title=" .. enc_title
    if has_seconds == 1 then
        coords = frame:expandTemplate{title='coord', args= { lat_d, lat_m, lat_s, lat_NS, lon_d, lon_m, lon_s, lon_WE, type_title}}
    else
        coords = frame:expandTemplate{title='coord', args= { lat_d, lat_m, lat_NS, lon_d, lon_m, lon_WE, type_title}}
    -- ** Doesn't like me adding these args **
    --"type:mountain","format=dms","name=" .. name}}
    end

    if output ~= "" then
        return output .. "<br/>" .. coords
    end

    return coords
end

return p

--[[ Tried to invoke {{wikidata}} directly but not working:
    local raw_coords = frame:expandTemplate{title='wikidata', args={'property','page=' .. page,'raw','coord'}}
]]