Modul:Zeichen
Zur Navigation springen
Zur Suche springen
SimpleStruct |
SimpleDataAccess |
Zeichenfolge |
Vorlagenprogrammierung | Diskussionen | Lua | Unterseiten | |||
Modul | Deutsch | English
|
Modul: | Dokumentation |
Diese Seite enthält Code in der Programmiersprache Lua. Einbindungszahl Cirrus
--[=[ Zeichen 2022-06-12
Data Management Module for Access from Within Templates and Other Modules
providing infos for signs usually using unicode for display
Author: Vollbracht
* data() Wikidata information for current sign in table form
* byQ() data for a list of signs (not unicode representations!) given by
Wikidata qualifiers
]=]
--Module globals
local p = {service = {}}
local _, Parser = pcall(require, "Modul:SimpleStruct")
local _, Limited = pcall(require, "Modul:SimpleDataAccess")
local _, SequenceMod = pcall(require, "Modul:Zeichenfolge")
local Sequence = SequenceMod.service
--[[
data() / service.data()
returns wikidata information for current page containing unicode information
if available
]]
p.service.data = function()
local result = {}
result.label = mw.wikibase.getLabel()
result.description = mw.wikibase.getDescription()
local character = mw.wikibase.getEntity()
if character == nil then
return {
label="Fehler",
description="Bitte nur auf Seiten zur Zeichenbeschreibung mit Wikidata einsetzen! [[Kategorie:Wikipedia:Qualitätssicherung Vorlageneinbindung fehlerhaft]]",
code = "",
block = ""
}
end
local uniQraw = character["claims"]["P1299"]
if uniQraw == nil then
result.code = ""
result.block = ""
else
local unicodeQ = uniQraw[1]["mainsnak"]["datavalue"]["value"]["id"]
result.block = Limited.MainSnackValue(unicodeQ, "P5522")
result.name = Limited.MainSnackValue(unicodeQ, "P9382")
result.code = Limited.MainSnackValue(unicodeQ, "P4213")
end
return result
end
--[[
language specific function returning table with German headers
description in German:
Zeichen|data|<Parameter>
gibt in eine Tabelle wikidata-Informationen zur aktuellen Seite zurück
Parameter:
tableStyles=<string>
Zeichenkette nach dem Schema 'class="<Liste>" style="<styles>"'
optional
thStyles=<string>
Zeichenkette nach dem Schema 'class="<Liste>" style="<styles>"'
optional
charStyles=<string>
Zeichenkette nach dem Schema 'class="<Liste>" style="<styles>"'
optional, default: 'style="font-size:250%;"'
charPrefix=<string>
Zeichenkette, die jedem Zeichen vorangestellt werden soll
optional, default: ''
Bsp (für Akzente): charPrefix=◌
addRows=<Liste>
eine Liste von zusätzlichen Zeilen nach dem Schema
'Name{<Wert>}'
die Elemente können durch Leerzeichen, Zeilenumbrüche, etc.
separiert sein. Werte dürfen keine geschweiften Klammern
enthalten.
rvStyles=<string>
Zeichenkette nach dem Schema 'class="<Liste>" style="<styles>"'
für die Werte der addRows
optional
]]
p.data = function(frame)
local source = p.service.data()
local result = '<table '
local charStyles = 'style="font-size:250%;"'
if frame.args.charStyles then
charStyles = frame.args.charStyles
end
local charPref = ''
if frame.args.charPrefix then
charPref = frame.args.charPrefix
end
local list = Sequence.listOfShortListsCore(
frame.args.addList, frame.args.thStyles, charStyles)
if frame.args.tableStyles then
result = result .. frame.args.tableStyles
else
result = result .. 'class="float-right infobox toptextcells toccolours"'
result = result .. ' cellspacing="5"'
--mw.log('284f: list')
--mw.logObject(list)
if list == "" then
result = result .. ' style="width:240px;"'
else
result = result .. ' style="width:300px;"'
end
end
result = result .. '><tr><th colspan="2"'
if frame.args.thStyles ~= nil then
result = result .. frame.args.thStyles
end
result = result .. '>' .. source.label .. ':<br />' .. source.description
result = result .. '</th></tr><tr>'
if source.code == "" then
result = result .. '<td colspan="2">(kein unicode Zeichen)'
else
result = result .. '<td style="vertical-align: middle;">Zeichen:</td>'
result = result .. '<td><span ' .. charStyles .. '>'
result = result .. charPref .. '&#x' .. source.code
result = result .. ';</span></td></tr><tr><td>Codepunkt:</td>'
result = result .. '<td>U+' .. source.code
result = result .. '</td></tr><tr><td>Unicode-Name:</td><td>'
result = result .. source.name
result = result .. '</td></tr><tr><td>Codeblock:</td><td>'
result = result .. frame:preprocess('[[' .. source.block .. ']]')
end
result = result .. '</td></tr>'
if frame.args.addRows then
local rows = Parser.altParse(frame.args.addRows)
if rows ~= nil then
for _, v in ipairs(rows) do
result = result .. '<tr><td style="vertical-align: middle;">'
result = result .. v[1]
result = result .. '</td><td ' .. frame.args.rvStyles .. '>'
result = result .. v[2] .. '</td></tr>'
end
end
end
if list ~= "" then
if frame.args.addListTitle then
result = result .. '<tr><th colspan="2" '
if frame.args.thStyles ~= nil then
result = result .. frame.args.thStyles
end
result = result .. '>' .. frame.args.addListTitle .. '</th></tr>'
end
result = result .. list
end
result = result .. '</table>'
return result
end
p.service.unicode = function(Qualifier)
local qual = Qualifier:match('[qQ]%d+')
local result = {}
if qual then
result.label = mw.wikibase.getSitelink(qual)
if result.label == nil then
result.label = mw.wikibase.getLabel(qual)
end
result.description = mw.wikibase.getDescription(qual)
local uniQraw = mw.wikibase.getBestStatements(qual, "P1299")
if uniQraw[1] then
local unicodeQ = uniQraw[1]["mainsnak"]["datavalue"]["value"]["id"]
result.block = Limited.MainSnackValue(unicodeQ, "P5522")
result.name = Limited.MainSnackValue(unicodeQ, "P9382")
result.code = Limited.MainSnackValue(unicodeQ, "P4213")
else
result.block = ""
result.name = ""
result.code = ""
end
return result
else
return nil
end
end
--[[
byQ(QualifierList) / service.byQ(QualifierList)
returns a struct (table) containing signs with some of their wikidata infos,
especially their unicode representations if available
QualifierList list of qualifiers with remarks in the form 'Q1234{remark}'
all entries may be separated by white spaces (even line
breaks) and remarks can be structs themselves, however if a
remark is more than a simple string p.byQ() won't be able to
format this correctly.
]]
p.service.byQ = function(QualifierList)
local qualifiers = Parser.altParse(QualifierList)
local result = {}
for _, tupel in ipairs(qualifiers) do
local q="Fehler"
local r="Bitte nur mit Listenelementen im Format Q1234{Bemerkung} einsetzen! [[Kategorie:Wikipedia:Qualitätssicherung Vorlageneinbindung fehlerhaft]]"
if type(tupel) ~= "table" then return {{q, r}} end
if tupel[2] == nil then return {{q, r}} end
if type(tupel[2]) == "table" then
mw.logObject(tupel[2], 'r')
return {{q, r}}
end
q=tupel[1]
local resultElm = p.service.unicode(q)
if resultElm then
resultElm.remark = tupel[2]
table.insert(result, resultElm)
end
end
return result
end
--[[
language specific function returning table with German headers
description in German:
Zeichen|byQ|<Parameter>
gibt eine Tabelle aller in den Parametern angegebenen Zeichen zurück
Parameter:
QualifierList=<Liste>
eine Liste von Elementen nach dem Schema 'Q1234{<Anmerkung>}'
die Elemente können durch Leerzeichen, Zeilenumbrüche, etc.
separiert sein. Anmerkungen dürfen keine geschweiften Klammern
enthalten.
tableStyles=<string>
Zeichenkette nach dem Schema 'class="<Liste>" style="<styles>"'
optional
thStyles=<string>
Zeichenkette nach dem Schema 'class="<Liste>" style="<styles>"'
optional
charStyles=<string>
Zeichenkette nach dem Schema 'class="<Liste>" style="<styles>"'
optional, default: 'style="font-size:250%;"'
charPrefix=<string>
Zeichenkette, die jedem Zeichen vorangestellt werden soll
optional, default: ''
Bsp (für Akzente): charPrefix=◌
remarkLabel=<string>
Bezeichner als Spaltenkopf für die Anmerkungen
]]
p.byQ = function(frame)
local list = frame.args.QualifierList
if list == nil then return "" end
if list == "" then return "" end
local source = p.service.byQ(list)
if source == {} then return "" end
local result = "<table"
if frame.args.tableStyles ~= nil then
result = result .. ' ' .. frame.args.tableStyles
end
result = result .. '><tr>'
local charPref = ''
if frame.args.charPrefix then
charPref = frame.args.charPrefix
end
mw.log(charPref)
local thTag = "<th"
if frame.args.thStyles ~= nil then
thTag = thTag .. ' ' .. frame.args.thStyles .. '>'
else
thTag = thTag .. '>'
end
result = result .. thTag .. 'Name</th>' .. thTag .. 'Beschreibung</th>'
result = result .. thTag .. 'Zeichen</th>' .. thTag .. 'Codepunkt</th>'
result = result .. thTag .. 'Unicode-Name</th>'
result = result .. thTag .. 'Codeblock</th>' .. thTag
if frame.args.remarkLabel then
result = result .. frame.args.remarkLabel .. '</th></tr>'
else
result = result .. 'Anmerkung</th></tr>'
end
for ign1, row in ipairs(source) do
result = result .. '<tr><td>'
result = result .. frame:preprocess('[[' .. row.label .. ']]')
result = result .. '</td><td>' .. row.description .. '</td><td '
if row.code == "" then
result = result .. 'colspan="4">(kein unicode Zeichen)</td><td>'
else
if frame.args.charStyles then
result = result .. frame.args.charStyles .. '>'
else
result = result .. 'style="font-size:250%;">'
end
mw.log(charPref .. '&#x' .. row.code .. ';')
result = result .. charPref .. '&#x' .. row.code .. ';</td><td>U+'
result = result .. row.code .. '</td><td>'
result = result .. row.name .. '</td><td>'
result = result .. frame:preprocess('[[' .. row.block .. ']]')
result = result .. '</td><td>'
end
result = result .. frame:preprocess(row.remark) .. '</td></tr>'
end
result = result .. '</table>'
return result
end
return p