Jewiki unterstützen. Jewiki, die größte Online-Enzy­klo­pädie zum Judentum.

Helfen Sie Jewiki mit einer kleinen oder auch größeren Spende. Einmalig oder regelmäßig, damit die Zukunft von Jewiki gesichert bleibt ...

Vielen Dank für Ihr Engagement! (→ Spendenkonten)

How to read Jewiki in your desired language · Comment lire Jewiki dans votre langue préférée · Cómo leer Jewiki en su idioma preferido · בשפה הרצויה Jewiki כיצד לקרוא · Как читать Jewiki на предпочитаемом вами языке · كيف تقرأ Jewiki باللغة التي تريدها · Como ler o Jewiki na sua língua preferida

Modul:Vorlage:Runeberg

Aus Jewiki
Version vom 25. April 2022, 01:46 Uhr von Michael Kühntopf (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „local Runeberg = { self = "Vorlage:Runeberg", suite = "Runeberg", serial = "2018-04-18" } --[=[ Support for templates…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

local Runeberg = { self = "Vorlage:Runeberg",

                  suite  = "Runeberg",
                  serial = "2018-04-18" }

--[=[ Support for templates referring to http://runeberg.org/ ]=]


local Data = { DBL = { },

              NF        = { },
              Salmonsen = { },
              project   = false,
              self      = Runeberg.self,
              serial    = Runeberg.serial,
              site      = "http://runeberg.org/",
              suite     = false,
              types     = { facet   = "function",
                            figures = "function",
                            pages   = "table",
                            ranges  = "table" } }


local function range()

   -- Retrieve volume title
   -- Returns title
   local iEdt, iVol = Data.project.figures( Data )
   local r
   if iVol then
       r = Data.project.ranges[ iEdt ][ iVol ]
   else
       r = Data.fault( 10 )
   end
   return r

end -- range()


local function wwwLink()

   -- Retrieve external link from invocation
   -- Returns bracketed URL
   local iEdt, iVol, iCP, err = Data.project.figures( Data )
   local r
   if err then
       r = Data.fault( err )
   else
       local show   = Data.params.text or ""
       local site   = Data.site .. Data.suite:lower()
       local sub    = Data.params.runeberg
       local s1, s2 = Data.project.facet( Data, iEdt, iVol, iCP )
       if sub then
           if sub:match( "^%l+%.%l+$" ) then
               s2 = sub
           elseif sub:match( "^%l+$" ) then
               s2 = sub .. ".html"
           end
       end
       if s1 then
           if s2 then
               site = string.format( "%s%s/%s", site, s1, s2 )
           else
               r    = s1
               site = false
           end
       end
       if site then
           if show == "" then
               show = string.format( "%d,%d,%d",
                                     iEdt or 1,  iVol or 1,  iCP or 0 )
           end
           r = string.format( "[%s %s]", site, show )
       end
   end
   return r

end -- wwwLink()


Data.fault = function ( alert )

   local cat    = Data.params.errCat   or ""
   local class  = Data.params.errClass or ""
   local style  = Data.params.errStyle or ""
   local show   = Data.params.errText  or ""
   local suffix = type( alert )
   local e      = mw.html.create( "span" )
                         :addClass( "error" )
   local r
   if class ~= "" then
       e:addClass( class )
   end
   if style ~= "" then
       e:cssText( style )
   end
   if show == "" then
       show = "Error"
   end
   if suffix == "string" then
       show = string.format( "%s: %s", show, alert )
   elseif suffix == "number" then
       show = string.format( "%s %d", show, alert )
   end
   e:wikitext( show )
   r = tostring( e )
   if cat ~= "" then
       r = string.format( "%s", r, cat )
   end
   return r

end -- Data.fault()


Data.fetch = function ( frame )

   -- Assign particular project
   -- Returns string with error message, or nil
   local r
   Data.frame  = frame
   Data.params = frame.args
   if Data.params.suite then
       Data.project = Data[ Data.params.suite ]
       if Data.project then
           local lucky, got, s, suite
           Data.suite = Data.params.suite
           suite = string.format( "Module:%s/%s",
                                  Data.self, Data.suite )
           lucky, got = pcall( require, suite )
           if type( got ) == "table" then
               for k, v in pairs( Data.types ) do
                   if type( got[ k ] ) == v then
                       Data.project[ k ] = got[ k ]
                   else
                       s = string.format( "%s %s '%s'",
                                          "Internal error:",
                                          "missing definition",
                                          "pages" )
                       r = Data.fault( s )
                       break -- for k, v
                   end
               end -- for k, v
           else
               s = string.format( "%s %s", "Internal error:", got )
               r = Data.fault( s )
           end
       else
           r = Data.fault( "Internal error: 'suite' unknown" )
       end
   else
       r = Data.fault( "Internal error: 'suite' is missing" )
   end
   return r

end -- Data.fetch()


Data.folio = function ( aEdt, aVol, aSub, aSplit )

   -- Retrieve web page number
   -- Returns sheet number
   local volume = Data.project.pages[ aEdt ]
   local r
   if type( volume ) == "table" then
       volume = volume[ aVol ]
       if type( volume ) == "table" then
           local k = aSub or 0
           local d
           for i = 1, #volume do
               d = volume[ i ]
               if k >= d[ 1 ]  and  k <= d[ 2 ] then
                   if d[ 4 ] then
                       if d[ 4 ] == "oddOnly" then
                           if k % 2 == 0 then
                               k = k - 1
                           end
                       end
                   elseif aSplit then
                       if k % 2 == 1 then
                           k = k + 1
                       end
                       k = k / 2
                   end
                   r = k + d[ 3 ]
                   break    -- for i
               end
           end -- i = 1, #volume
       end
   end
   return  r or 1

end -- Data.folio()


-- Export local p = { }

p.range = function ( frame )

   local r = Data.fetch( frame )
   if not r then
       r = range()
   end
   return r

end

p.wwwLink = function ( frame )

   local r = Data.fetch( frame )
   if not r then
       r = wwwLink()
   end
   return r

end

p.failsafe = function ()

   return Runeberg.serial

end

return p