Modul:TemplUtl/01
| Vorlagenprogrammierung | Diskussionen | Lua | Test | Unterseiten | |||
| Modul | Deutsch | English
|
Modul: | Dokumentation | |||
Diese Seite enthält Code in der Programmiersprache Lua. Einbindungszahl Cirrus
local TemplUtl = { suite = "TemplUtl",
serial = "2019-12-03",
sub = "01",
commons = "i18n/01",
main = 52364930 }
--[=[
Auxilary table generation,
showing strings for boolean values in all known languages.
]=]
local Failsafe = TemplUtl
local fetch = function ()
-- Retrieve specifications from commons:Data:****.tab
-- Postcondition:
-- Returns
-- 1. table, sequence, with data
-- 2. table, with maximum colspan, as number
local storage = string.format( "%s.tab", TemplUtl.commons )
local lucky, data = pcall( mw.ext.data.get, storage, "_" )
local r1 = { }
local r2 = { [false] = 0,
[true] = 0 }
if type( data ) == "table" and
type( data.data ) == "table" then
local o = { }
local t = { }
local e, l, s, w
data = data.data
for i = 1, #data do
e = data[ i ]
if type( e ) == "table" and
type( e[ 1 ] ) == "boolean" and
type( e[ 2 ] ) == "table" then
l = e[ 1 ]
e = e[ 2 ]
for k, v in pairs( e ) do
if type( k ) == "string" and
type( v ) == "string" then
w = mw.text.split( v, "|" )
if #w > r2[ l ] then
r2[ l ] = #w
end
table.insert( o, k )
if not t[ k ] then
t[ k ] = { }
end
t[ k ][ l ] = w
end
end -- for k, v
else
break -- for i
end
end -- for i
table.sort( o )
for i = 1, #o do
s = o[ i ]
e = t[ s ]
if e then
w = { s = s }
if type( e[ false ] ) == "table" then
w[ false ] = e[ false ]
end
if type( e[ true ] ) == "table" then
w[ true ] = e[ true ]
end
table.insert( r1, w )
t[ s ] = false
end
end -- for i
end
return r1, r2
end -- fetch()
local fiat = function ( apply, align, at, around )
-- Create table row
-- Precondition:
-- apply -- table, with data
-- align -- table, with maximum colspan
-- at -- string, with project language code
-- around -- string, with wrapping scripting direction
-- Postcondition:
-- Returns mw.html.TR object
local r = mw.html.create( "tr" )
local e = mw.html.create( "code" )
:attr( "lang", "zxx" )
:wikitext( apply.s )
local scripting
local fk = function ( a, attr )
local td = mw.html.create( "td" )
:attr( "lang", a )
if attr and attr ~= around then
td:attr( "dir", attr )
end
td:wikitext( mw.language.fetchLanguageName( apply.s,
a ) )
return td
end -- fk()
local fv = function ( a )
local v = apply[ a ]
r:newline()
if v then
local k = align[ a ] - #v
for i = 1, #v do
e = mw.html.create( "td" )
:attr( "lang", apply.s )
:wikitext( v[ i ] )
if scripting ~= around then
e:attr( "dir", scripting )
end
r:node( e )
end -- for i
if k > 0 then
e = mw.html.create( "td" )
if k > 1 then
e:attr( "colspan", tostring( k ) )
end
r:node( e )
end
else
r:node( mw.html.create( "td" )
:attr( "colspan",
tostring( align[ a ] ) ) )
end
end -- fv()
if mw.language.new( apply.s ):isRTL() then
scripting = "rtl"
else
scripting = "ltr"
end
if around == "rtl" then
e:attr( "dir", "ltr" )
end
r:newline()
:node( mw.html.create( "td" )
:node( e ) )
:newline()
:node( fk( "en", "ltr" ) )
:newline()
:node( fk( apply.s, scripting ) )
if at ~= "en" then
r:newline()
:node( fk( at ) )
end
fv( false )
fv( true )
return r
end -- fiat()
TemplUtl.f = function ( alien )
-- Create table
-- Precondition:
-- alien -- string, with language code, or not
-- Postcondition:
-- Returns string with entire HTML table
local tbl = mw.html.create( "table" )
:addClass( "wikitable sortable" )
:addClass( "TemplUtl-table-01" )
local tr = mw.html.create( "tr" )
local rows, cols = fetch()
local scripting, slang, speak
if type( alien ) == "string" and
mw.language.isSupportedLanguage( alien ) then
slang = mw.text.trim( alien )
else
local sub = mw.title.getCurrentTitle().subpageText
if sub:find( "%l%l%l?%-?%a?%a?%a?%a?$" ) and
mw.language.isSupportedLanguage( sub ) then
slang = sub
end
if not slang then
slang = mw.language.getContentLanguage():getCode()
end
end
slang = slang:lower()
speak = mw.language.fetchLanguageName( slang )
tbl:attr( "lang", slang )
if mw.language.new( slang ):isRTL() then
scripting = "rtl"
else
scripting = "ltr"
end
tbl:attr( "dir", scripting )
tr:newline()
:node( mw.html.create( "th" )
:wikitext( "ISO 639 / BCP47" ) )
:newline()
:node( mw.html.create( "th" )
:wikitext( "English" ) )
:newline()
:node( mw.html.create( "th" )
:wikitext( "*" ) )
:newline()
if slang ~="en" then
tr:node( mw.html.create( "th" )
:attr( "lang", slang )
:wikitext( speak ) )
:newline()
end
tr:node( mw.html.create( "th" )
:attr( "colspan", tostring( cols[ false ] ) )
:wikitext( "0" ) )
:newline()
:node( mw.html.create( "th" )
:attr( "colspan", tostring( cols[ true ] ) )
:wikitext( "1" ) )
tbl:newline()
-- :node( mw.html.create( "thead" )
:node( tr )
-- )
for i = 1, #rows do
tbl:newline()
:node( fiat( rows[ i ], cols, slang, scripting ) )
end -- for i
return tostring( tbl:newline() )
end -- TemplUtl.f()
-- Export
local p = { }
function p.f( frame )
return TemplUtl.f( frame.args.lang )
end -- p.f
return p
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.