Modul:ISO15924/commons: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
mo>PerfektesChaos (2019-11-12) |
K (1 Version importiert) |
Aktuelle Version vom 6. Februar 2020, 20:44 Uhr
local ISO15924 = { suite = "ISO15924",
sub = "commons", serial = "2019-11-12", item = 71679535, main = 71584769 }
--[=[ Create ISO 15924 mw.loadData() table from commons:Data: ]=] local Failsafe = ISO15924 local Fetch = { }
Fetch.data = function ( access, assume )
-- Retrieve one Data.tab element -- Precondition: -- access -- string, with sub tab, or false -- assume -- string, with expected structure type -- Returns: table local storage = ISO15924.suite local r = { } local data, lucky if access then storage = string.format( "%s/%s", storage, access ) end storage = storage .. ".tab" lucky, data = pcall( mw.ext.data.get, storage ) if type( data ) == "table" and type( data.data ) == "table" and type( Fetch[ assume ] ) == "function" then local entry, sign, value data = data.data for i = 1, #data do entry = data[ i ] if type( entry ) == "table" then sign, value = Fetch[ assume ]( entry ) if sign then r[ sign ] = value elseif value then table.insert( r, value ) end end end -- for i end return r
end -- Fetch.data()
Fetch.boolean = function ( achieved )
-- Convert ext.data entry into assignment to boolean local r1 = achieved[ 1 ] local r2 = achieved[ 2 ] if not r2 then r1 = false end return r1, r2
end -- Fetch.boolean()
Fetch.ranges = function ( achieved )
-- Convert ext.data entry into table of ranges or redirects local r = achieved[ 2 ] if r:sub( 1, 2 ) == "0x" then local ranges = mw.text.split( r, "%s*|%s*" ) local range r = { } for i = 1, #ranges do range = mw.text.split( ranges[ i ], "%s+" ) range = { tonumber( range[ 1 ] ), tonumber( range[ 2 ] ) } table.insert( r, range ) end -- for i else r = mw.text.split( r, "%s+" ) end return achieved[ 1 ], r
end -- Fetch.ranges()
Fetch.reverse = function ( achieved )
-- Convert ext.data entry into table item with range and string table local iBeg = tonumber( achieved[ 1 ], 16 ) local iEnd = tonumber( achieved[ 2 ], 16 ) local permit = mw.text.split( achieved[ 3 ], "%s+" ) return false, { iBeg, iEnd, permit }
end -- Fetch.reverse()
Fetch.string = function ( achieved )
-- Convert ext.data entry into assignment to string return achieved[ 1 ], achieved[ 2 ]
end -- Fetch.string()
Fetch.strings = function ( achieved )
-- Convert ext.data entry into assignment to table of strings return achieved[ 1 ], mw.text.split( achieved[ 2 ], "%s+" )
end -- Fetch.strings()
Fetch.run = function ()
-- Populate object with data -- Postcondition: -- ISO15924 expanded local tables = Fetch.data( false, "string" ) for k, v in pairs( tables ) do ISO15924[ k ] = Fetch.data( k, v ) end -- for k, v
end -- Fetch.run()
local fresh = function ()
-- Check for global update -- Returns: true, if matching global version; false, if not -- 2019-10-15 local r if type( Failsafe.item ) == "number" and Failsafe.item > 0 then local storage = string.format( "Q%d", Failsafe.item ) local entity = mw.wikibase.getEntity( storage ) if type( entity ) == "table" then local seek = Failsafe.serialProperty or "P348" local vsn = entity:formatPropertyValues( seek ) if type( vsn ) == "table" and vsn.value == Failsafe.serial then r = true end end end return r or false
end -- fresh()
Fetch.run() ISO15924.failsafe = ISO15924.serial if mw.title.getCurrentTitle().namespace > 0 then
ISO15924.last = fresh()
end
return ISO15924