Die Dokumentation für dieses Modul kann unter Modul:Benutzer:Kpfiwa/NGAlist/Doku erstellt werden

--[=[ NGAlink Version 6, 2021-11-01
	Ausgabe einen Links, Aufruf PDF-Liste 110 - 116, internationalisiert
	Ausgabe von qualifizierten Direktlinks, auch Seitenaufruf möglich möglich
--]=]

p = {}
local ngaen = {
    -- Originaltitel
    ["110"] = "List of Lights, Pub. 110, Greenland, The East Coasts of North and South America (Excluding Continental U.S.A. Except the East Coast of Florida) and the West Indies",
    ["111"] = "List of Lights, Pub. 111, The West Coasts of North and South America (Excluding Continental U.S.A. and Hawaii), Australia, Tasmania, New Zealand, and the Islands of the North and South Pacific Oceans",
    ["112"] = "List of Lights, Pub. 112, Western Pacific and Indian Oceans Including the Persian Gulf and Red Sea",
    ["113"] = "List of Lights, Pub. 113, The West Coasts of Europe and Africa, the Mediterranean Sea, Black Sea and Azovskoye More (Sea of Azov)",
    ["114"] = "List of Lights, Pub. 114, British Isles, English Channel and North Sea",
    ["115"] = "List of Lights, Pub. 115, Norway, Iceland and Arctic Ocean",
    ["116"] = "List of Lights, Pub. 116, Baltic Sea with Kattegat, Belts and Sound and Gulf of Bothnia"
}
local ngade = {
    -- deutsche Titel
    ["110"] = "110: Grönland, Ostküsten Nord-/Südamerikas (außer Kontinental-USA & Ostküste Floridas), Westindische Inseln",
    ["111"] = "111: Westküsten Nord-/Südamerikas (außer Kontinental-USA & Hawaii), Australien, Tasmanien, Neuseeland, Pazifikinseln",
    ["112"] = "112: Westpazifik, Indischer Ozean, Persischer Golf, Rotes Meer",
    ["113"] = "113: Westküsten Europas & Afrikas, Mittelmeer, Schwarzes Meer & Asowsches Meer",
    ["114"] = "114: Britische Inseln, Ärmelkanal, Nordsee",
    ["115"] = "115: Norwegen, Island, Arktischer Ozean",
    ["116"] = "116: Ostsee, Kattegat, Bottnischer Meerbusen"
}

local url = "[https://msi.nga.mil/queryResults?publications/ngalol/lights-buoys?volume="
local url1 = "[https://msi.nga.mil/api/publications/download?key=16694312/SFH00000/UpdatedPub"
local url2 = "bk.pdf&type=view"
local url3de = "]'' (PDF) [[National Geospatial-Intelligence Agency|NGA]] (englisch)" -- könnte man ggf. mit abruf ergänzen
local url3 =
    "]'' (PDF) (= ''[[:en:List of Lights|List of Lights]]'') [[National Geospatial-Intelligence Agency|United States National Geospatial-Intelligence Agency]] " -- Fehler (Rotlink) 1:1 übernommen

local function tu(a, z) -- Wandelt in Versialen und gibt z Anfangsbuchstabe/n zurück
    return string.sub(string.upper(a or ""), 1, z or 1)
end -- function tu(a, z)

function split(s) -- Teilt kombinierte Nummern wie 116-34567.9 auf
    local a, c
    local b = 0
    if #s > 3 then
        a, b = string.match(s .. "?", "(11[0-6])%D([%s%.0-9A-Z]*)")
    else
        a = s
    end
    return tonumber(a) or 0, (b or 0)
end -- function split(s)

-- Übergeben werden 1=list, [2|j|y=year], [3|p|s=page], [i=titel], [u=UHKOnr],[n=NGAnr],[l=label], [d=direct]
function p.nga(frame)
    local lang = "DE" -- for Germaan version only!
    local page, year, OK = 1, 1, 1
    local direct, label, NGAnr, UHKOnr, VOLnr, both
    local titel = ""
    -- Abfrage der Spracheintellung, falls  anders als DE
    frame = mw.getCurrentFrame()
    local lang = tu(mw.getContentLanguage():getCode(), 2)
    local frame = frame:getParent()
    -- Abfrage der Prameter
    for key, val in pairs(frame.args) do -- Parameter sammeln und  zuordnen
        if key == 1 then -- auch Kombis wie  wie 113-54564, 115/85646 möglich
            VOLnr, listnr = split(val)
            NGAnr = tonumber(listnr) or 0
            if NGAnr < 1 then
                NGAnr = nil
            end
        elseif key == 2 or tu(key) == "Y" or tu(key) == "J" then
            year = tonumber(val) or 0
        elseif key == 3 or tu(key) == "P" or tu(key) == "S" then
            page = tonumber(val) or 1
        elseif tu(key) == "U" then -- UKHO-Nummmer
            UHKOnr = val
            UHKOlabel = "UKHO:&nbsp;" .. UHKOnr
        elseif tu(key) == "B" then -- NGA-Nummmer
            both = true
        elseif tu(key) == "N" then -- NGA-Nummmer
            NGAnr = tonumber(val)
            NGAlabel = "NGA:&nbsp;" .. NGAnr
        elseif tu(key) == "L" then -- Nummer mit Label
            label = OK
        elseif tu(key) == "I" then -- Internationale Version
            lang = tu(val, 1)
        elseif tu(key) == "D" then -- Direktlink HTML, kann aber verschwinden, wenn diese Option rasiert wird
            NGAnr = tonumber(val) or 1
            if NGAnr > 1 then
                NGAlabel = "NGA:&nbsp;" .. NGAnr
            end
        end -- if key 1 2 3 ...
    end -- for key, val
    --[[ Div. Fehler und Logikkontrollen. Reihenfolge wichtig 
    	Hier, da übergebene Parameter keine nachvollziehbare Reihenfolge haben --]]
    if both and UHKOnr then
        if label == 1 then
            return url ..
                VOLnr ..
                    "&featureNumber=" ..
                        NGAnr .. "&includeRemovals=false&output=html " .. NGAlabel .. "</br />" .. UHKOlabel .. "]"
        else
            return url ..
                VOLnr ..
                    "&featureNumber=" ..
                        NGAnr .. "&includeRemovals=false&output=html " .. UHKOnr .. "</br /><u>" .. NGAnr .. "</u>]"
        end --  if label
    end
     -- if both
    if label == 1 then
        label = UHKOlabel or NGAlabel
    else
        label = UHKOnr or NGAnr
    end
    if NGAnr or direct then
        return url .. VOLnr .. "&featureNumber=" .. NGAnr .. "&includeRemovals=false&output=html " .. label .. "]"
    end
    if year < 2022 and year > 2002 then -- geht nicht vor Gründung und nicht für Zukunft
        year = ", " .. year
    else
        year = " "
    end -- if year
    ----
    if lang == "DE" then
        if tonumber(page) > 0 then
            pagenr = " S. " .. page .. " "
        end -- gibt  S. 123
        NGAtitel = ngade
        url3 = url3de
    else
        NGAtitel = ngaen
    end -- if lang == "DE"
    -- allgemeiner Link auf Auswahlseite
    if not VOLnr or tonumber(VOLnr) < 110 or tonumber(VOLnr) > 116 then
        if label then
            return "''[https://msi.nga.mil/Publications/NGALOL Maritimer&nbsp;Safety&nbsp;Information]'' (PDF) [[National Geospatial-Intelligence Agency|NGA]] (englisch)"
        else
            return "''[https://msi.nga.mil/Publications/NGALOL Maritimer&nbsp;Safety&nbsp;Information]'' [[National Geospatial-Intelligence Agency|NGA]]"
        end
    else
        titel = NGAtitel[tostring(VOLnr)]
    end --  if  not VOLnr
    ---
    if tonumber(page) > 0 then
        page = "#page=" .. page
    else
        page = "#page=1"
    end
    -- Reste raus und FINITO!
    return "''" .. url1 .. VOLnr .. url2 .. page .. " " .. titel .. url3 .. year .. (pagenr or "") .. (NGAnr or "")
end -- function p.nga(frame)
return p