Modul:ISO15924/commons

Modul:ISO15924 commons

Modul:ISO15924/commons
Vorlagenprogrammierung Diskussionen Lua Test Unterseiten
Modul Deutsch English

Modul: Dokumentation

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

Dies ist die (produktive) Mutterversion eines global benutzten Lua-Moduls.
Wenn die serial-Information nicht übereinstimmt, müsste eine Kopie hiervon in das lokale Wiki geschrieben werden.
Versionsbezeichnung auf WikiData: 2019-11-12

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

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.

  1. 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:
  2. 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.
  3. 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.
  4. 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.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.