Vorlagenprogrammierung Diskussionen Lua Unterseiten
Modul Deutsch

Modul: Dokumentation

Diese Seite enthält Code in der Programmiersprache Lua. Einbindungszahl Cirrus


--[=[ 2016-11-13
{{Infobox Physikalische Einheit}}
{{Infobox Physikalische Größe}}
{{Infobox Physikalische Konstante}}
{{Infobox Physikalische Kennzahl}}
]=]


local Config = {
   E = {
      Selbst = "Infobox Physikalische Einheit",
      Systeme = {
         GBUSM = { Art = "Angloamerikanisches Maßsystem",
                   Kat = "Angloamerikanische Masseneinheit"},
         GBUSV = { Art = "Angloamerikanisches Maßsystem",
                   Kat = "Angloamerikanische Volumeneinheit"},
         GBUSF = { Art = "Angloamerikanisches Maßsystem",
                   Kat = "Angloamerikanische Flächeneinheit"},
         GBUSL = { Art = "Angloamerikanisches Maßsystem",
                   Kat = "Angloamerikanische Längeneinheit"},
         GBUS  = { Art = "Angloamerikanisches Maßsystem",
                   Kat = "Angloamerikanische Einheit"},
         CGS   = { Art = "CGS-Einheitensystem",
                   Kat = "CGS-Einheit"},
         EME   = { Art = "Elektromagnetisches Einheitensystem",
                   Kat = "CGS-Einheit", 
                   Kat2= "Elektromagnetische Einheit"},
         ESE   = { Art = "Elektrostatisches Einheitensystem",
         	   Kat = "CGS-Einheit", 
                   Kat2= "Elektromagnetische Einheit"},
         Gauss = { Art = "Gaußsches Einheitensystem",
         	   Kat = "CGS-Einheit", 
                   Kat2= "Elektromagnetische Einheit"},
         HLE   = { Art = "Heaviside-Lorentz-Einheitensystem",
         	   Kat = "CGS-Einheit", 
                   Kat2= "Elektromagnetische Einheit"},
         mitSI = { Art = "Gebräuchliche Nicht-SI-Einheiten" ..
                       "#Zur Verwendung mit dem SI zugelassene Einheiten" ..
                       "|Zum Gebrauch mit dem SI zugelassen",
                   Kat = "Zum Gebrauch mit dem SI zugelassene Einheit" },
         SI    = { Art = "Internationales Einheitensystem",
                   Kat = "SI-Einheit" },
         SIB   = { Art = "Internationales Einheitensystem",
                   Kat = "SI-Basiseinheit" },
         MKfS  = { Art = "Technisches Maßsystem",
                   Kat = "Technische Maßeinheit" }
      }
   },
   G = {
      Selbst = "Infobox Physikalische Größe"
   },
   K = {
      Selbst = "Infobox Physikalische Konstante"
   },
   Z = {
      Selbst = "Infobox Physikalische Kennzahl"
   },
   Selbst    = "Infoboxen Physik",
   errCatTop = "Wikipedia:Vorlagenfehler"
}
local Fun = { }


local function fehler( alert )
    local err = mw.html.create( "span" )
                       :addClass( "error" )
                       :wikitext( mw.text.nowiki( alert ) )
    local r   = tostring( err )
    if mw.title.getCurrentTitle().namespace == 0 then
        local s = Config.errCatTop
        if Config.self then
            s = string.format( "%s/%s", s, Config.self )
        end
        r = string.format( "%s[[Kategorie:%s]]", r, s )
    end
    return r
end -- fehler()


Fun.eSystem = function ( args )
    -- Einheit|System=
    --     args  -- table, with parameters
    -- Returns appropriate string
    local system = args.System or ""
    local r
    if system:match( "^%[%[" ) then
        r = system
    else
        local cnf     = Config.E
        local einh    = { }
        local kats    = { }
        local unknown = { }
        local types   = cnf.Systeme
        local params, typ
        system = system:gsub( "%+", " " )    -- temp / Migration
        system = system:gsub( "-", "" )
        params = mw.text.split( system, "%s+" )
        for k, v in pairs( params ) do
            typ = types[ v ]
            if typ then
                if typ.Art then
                    table.insert( einh, typ.Art )
                end
                if typ.Kat then
                    table.insert( kats, typ.Kat )
                end
                if typ.Kat2 then
                    table.insert( kats, typ.Kat2 )
                end
            else
                table.insert( unknown, v )
            end
        end -- for k, v
        if next(unknown) then
            r = fehler( "System unbekannt: " ..
                         table.concat( unknown, " " ) )
        else
            for k, v in pairs( einh ) do
                if r then
                    r = r .. ", "
                else
                    r = ""
                end
                r = string.format( "%s[[%s]]", r, v )
            end
            if not r then    -- total mess outside
                r = fehler( "System=???????" )
            end
            for k, v in pairs( kats ) do
                r = string.format( "%s[[Kategorie:%s]]", r, v )
            end
        end
    end
	if not mw.title.getCurrentTitle().isContentPage then
		r = r:gsub("%[%[Kategorie:[^%]]+%]%]","")
	end
    return r
end -- Fun.eSystem()


Fun.zTable = function ( args )
	--[[ makes table for quantities 
	gets input as e.g. <math>v</math> = Velocity,  <math>c</math>=Speed of light 
	returns appropriate string]]
	local tablehead="\n{|class=\"wikitable\""
	local tablecontent=string.gsub(","..args["Größentabelle"], ",%s*(.-)=%s*","\n|-\n| %1 ||")
	local tableend="\n|}"
	return tablehead..tablecontent..tableend
end --Fun.zTable


-- Export
local p = { }

p.main = function ( about, at, args )
    -- Invocation
    --     about  -- string, "E", "G", "K"
    --     at     -- string, parameter name
    --     args   -- table, with template parameters
    -- Returns appropriate string
    local r = Config[ about ]
    if r then
        local s = at or "?"
        if r.Selbst then
            Config.self = string.format( "Vorlage:%s", r.Selbst )
        end
        s = about:lower() .. s
        if type( Fun[ s ] ) == "function" then
            r = Fun[ s ]( args or { } )
        else
            r = fehler( "Unbekannte Funktion: " .. s )
        end
    else
        r = about or "?"
        r = fehler( "Unbekannter Vorlagentyp: " .. r )
    end
    return r
end -- p.main()


p.f = function ( frame )
    local lucky, r
    Config.frame = frame
    lucky, r = pcall( p.main, frame.args[ 1 ], frame.args[ 2 ],
                              frame:getParent().args )
    if not lucky then
        r = fehler( r )
    end
    return r
end -- p.f()

return p