Modul:NGAlist

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Das Modul gibt eine Tabelle mit einem darstellbaren Beschreibungs- und Linktext aus, um die Einträge in den NGA-Handbüchern anzuzeigen.

Erkannt werden bis zu drei nummerierte Parameter und bis zu sechs benannte Parameter. Der Einsatz und Bedeutung sind in der Dokumentation beschrieben.

Alle benannten Parameter werden vom Modul nur mit dem ersten Buchstaben erkannt. Groß- oder Kleinschreibung sind irrelevant, der Paramtername kann somit selbsterklärend verwendet werden (Jahr, year. page, Seite, INT, international usw.), sollte jedoch bei einem Einsatz der Vorlage verständlich und nachvollziehbar bleiben.

Parameter
Position oder Nummer Benennung Wert
1 Handbuchnummer 110 bis 116
fehlt sie, wird auf die Auswahlseite verlinkt
2 yoderj anzuzeigedes Erscheinungs[j]ahr, nur aus Kompatibilitätsgründen, da stets die aktuellste Version aufgerufen wird
3 soderp Handbuch[s]eite mit dem Eintrag. Die PDF-Dokumentseite stimmt nicht mit der Seitennummer überein! Bei fehlender oder Falscheingabe erscheint die Titlseite
n NGA-Nummer, die angezeigt wird, wenn u nicht angegeben. Die UKHO-Nummer hat Anzeige-Priorität. Ist n angegeben, wird automatisch mit einem HTML-Auszug der Objektbeschreibung bei NGA statt mit der langen PDF-Liste verlinkt.
u UKHO-Nummer, die angezeigt wird. Ist leichzeitig n zusätzlich angegeben, wird mit dem HTML-Auszug der Objektbeschreibung bei NGA verlinkt.
i [I]nternationale Version mit Originaltiteln und Darstellung, wie bei Template:Cite ngall; (Vorlage:Cite ngall ist fehlerhaft)
l [L]abel,vor der Objektnummer wird NGA bzw. UKHO angezeigt (für Listen ohne Überschrift)
Funktionen
function Parameter return
tu(a, z) a= string; z= Anzahl (default=1) versale Anfangsbuchstabe(n) ermöglicht flexible Parameternamen
split(s) s= string Handbuchnummer, Objektnummer Teilt kombinierte Nummern wie 116-34567.9 auf
p.nga(frame) Parameter aus Vorlage Ausgabestring Haupteinstieg und Verarbeitungssteuerung
Achtung, die Reihenfolge der Verarbeitungsschritte ist festgelegt. Austausch kann zu Fehlern führen

--[=[ 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