Die Funktionen sind als Kommentare innerhalb des Sourcecodes beschrieben.Siehe dazu auch die Vorlagen-Doku



--[=[ USCGlink Version 1, 2021-10-27
	Ausgabe einen Links, Aufruf PDF-Liste I - VII, internationalisiert
--]=]

p = {}

local uscgen = {
    -- Originaltitel
    [1] = "Light List, Volume I, Atlantic Coast, St. Croix River, Maine to Shrewsbury River, New Jersey",
    [2] = "Light List, Volume II, Atlantic Coast, Shrewsbury River, New Jersey to Little River, South Carolina",
    [3] = "Light List, Volume III, Atlantic Coast, Little River, South Carolina to Econfina River, Florida",
    [4] = "Light List, Volume IV, Gulf of Mexico",
    [5] = "Light List, Volume V, Mississippi River System",
    [6] = "Light List, Volume VI, Pacific Coast and Pacific Islands",
    [7] = "Light List, Volume VII, Great Lakes"
}
local uscgde = {
    [1] = "US-Leuchtfeuerliste, Band I, Atlantikküste, St. Croix River, Maine bis Shrewsbury River, New Jersey",
    [2] = "US-Leuchtfeuerliste, Band II, Atlantikküste, Shrewsbury River, New Jersey bis Little River, South Carolina",
    [3] = "US-Leuchtfeuerliste, Band III, Atlantikküste, Little River, South Carolina bis Econfina River, Florida",
    [4] = "US-Leuchtfeuerliste, Band IV, Golf von Mexiko",
    [5] = "US-Leuchtfeuerliste, Band V, Mississippi-Fluss-System",
    [6] = "US-Leuchtfeuerliste, Band VI, Pazifikküste und Pazifikinseln",
    [7] = "US-Leuchtfeuerliste, Band VII, Große Seen"
}
-- https://www.navcen.uscg.gov/pdf/lightLists/LightList%20V5.pdf#page=
local url1 = "[https://www.navcen.uscg.gov/pdf/lightLists/LightList%20V"
local url2 = ".pdf#page="
local url3de = "]'' (PDF) [[United States Coast Guard|USCG]] (englisch)"
local url3 = "]'' (PDF) (= ''[[Leuchtfeuerliste der US-Küstenwache|Light List]]'') [[United States Coast Guard]] "

local function toroman(nr) -- wandelt arabische in römische Ziffern
    local ret = ""
    nr = tonumber(nr)
    if nr == 1 then
        ret = "I-"
    elseif nr == 2 then
        ret = "II–"
    elseif nr == 3 then
        ret = "III–"
    elseif nr == 4 then
        ret = "IV–"
    elseif nr == 5 then
        ret = "V–"
    elseif nr == 6 then
        ret = "VI–"
    elseif nr == 7 then
        ret = "VII–"
    else
        ret = ""
    end
    return ret
end

local function tu(a, z) -- wandelt 'a' 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 7-34567 oder sogar IV1234 auf
    s = tu(s, -1) or ""
    local a, c
    local b = 0
    if #s > 1 then
        a, b = string.match(s .. "?", "([1-7IV]+)[%s%D]*([%s%.%d]*)")
        if a == "I" then
            a = 1
        elseif a == "II" then
            a = 2
        elseif a == "III" then
            a = 3
        elseif a == "IV" then
            a = 4
        elseif a == "V" then
            a = 5
        elseif a == "VI" then
            a = 6
        elseif a == "VII" then
            a = 7
        end -- if a ==
    else -- if #s
        a = s
    end -- if #s
    return tonumber(a) or 0, (b or 0)
end -- function split(s)

-- Übergeben werden 1=volume, [2|j|y=year], [3|p|s=page], [i=titel],[n=nummer],[l=USCGlabel]
function p.uscg(frame)
    local lang = "DE" -- for Germaan version only!
    local page, year, OK = 1, 1, 1
    local USCGlabel, USCGnr, VOLnr
    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
        key = tu(key)
        if key == "1" or key == "V" then
            VOLnr, listnr = split(val) -- macht Kombis wie  wie 5-20985, 5/20985, V,20985 möglich
            USCGnr = tonumber(listnr) or 0
            if USCGnr < 1 then
                USCGnr = nil
            end
        elseif key == "2" or key == "Y" or key == "J" then
            year = tonumber(val) or 0
        elseif key == "3" or key == "P" or key == "S" then
            page = tonumber(val) or 1
        elseif key == "U" or key == "N" then -- USCG-Nummmer
            USCGnr = tonumber(val)
        elseif key == "L" then -- Nummer mit Label
            USCGlabel = "USCG:&nbsp;"
        elseif key == "I" then -- Internationale Version
            lang = tu(val, 1)
        elseif key == "P" then -- Seitennummer erforderlich
            page = val
        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 USCGlabel then
        USCGlabel = USCGlabel .. toroman(VOLnr) .. (USCGnr or "")
    else
        USCGlabel = toroman(VOLnr) .. (USCGnr or "")
    end
----
    if USCGnr or direct then
        return "[https://www.navcen.uscg.gov/pdf/lightLists/LightList%20V" ..
            (VOLnr or 0) .. ".pdf#page=" .. (page or 0) .. " " .. (USCGlabel or "?") .. "]"
    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
        USCGtitel = uscgde
        url3 = url3de
    else
        USCGtitel = uscgen
    end -- if lang == "DE"
    -- allgemeiner Link auf Auswahlseite
    if not VOLnr or tonumber(VOLnr) < 1 or tonumber(VOLnr) > 7 then
        if USCGlabel then
            return "''[https://www.navcen.uscg.gov/?pageName=lightLists Light&nbsp;List (Annual&nbsp;Publication)]'' (PDF) [[United States Coast Guard|USCG]] (englisch)"
        else
            return "''[https://www.navcen.uscg.gov/?pageName=lightLists Light&nbsp;List (Annual&nbsp;Publication)]'' [[United States Coast Guard|USCG]]"
        end
    else
        titel = USCGtitel[VOLnr]
    end --  if  not VOLnr
-- Reste raus und FINITO!
    return "''" .. url1 .. VOLnr .. url2 .. page .. " " .. titel .. url3 .. year .. (pagenr or "") .. (USCGnr or "")
end -- function p.uscg(frame)
return p