Modul:Zeichen

Modul:Zeichen

Modul:Zeichen
verwendete Moduln:
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=&#x25CC;
		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=&#x25CC;
		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.

  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.