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

--[=[ USCGlink Version 5, 2021-10-25
	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) (= ''[[:en:List of Lights|List of Lights]]'') [[United States Coast Guard]] "

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=label]
function p.uscg(frame)
    local lang = "DE" -- for Germaan version only!
    local page, year, OK = 1, 1, 1
    local label, 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, 5,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)
            USCGlabel = "USCG:&nbsp;" .. USCGnr
        elseif key == "L" then -- Nummer mit Label
            label = OK
        elseif key  == "I" then -- Internationale Version
            lang = tu(val, 1)
        -- 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 label == 1 then
        label = USCGlabel
    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 label 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
    ---
    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 "") .. (USCGnr or "")
end -- function p.uscg(frame)
return p