Modul:Zeichen
Modul:Zeichen
| 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
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.