Zum Inhalt springen

Modul:AufEinWort Wortbildung

aus AufEinWort, der freien Forschung
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 4. September 2025 um 10:41 Uhr durch Nikolaos (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „-- Modul:AufEinWortWortbildung local p = {} local function trim(s) return (tostring(s or ""):gsub("^%s+", ""):gsub("%s+$", "")) end -- Entfernt nur führende/abschließende Bindestriche für Sortierschlüssel local function sortkey(token) token = trim(token) token = token:gsub("^%-+", ""):gsub("%-+$", "") return token end -- Für Property-Werte: führende/abschließende Bindestriche entfernen local function cleanValue(token) return sortkey(to…“). Sie kann sich erheblich von der aktuellen Version unterscheiden.
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Die Dokumentation für dieses Modul kann unter Modul:AufEinWort Wortbildung/Doku erstellt werden

-- Modul:AufEinWortWortbildung
local p = {}

local function trim(s)
  return (tostring(s or ""):gsub("^%s+", ""):gsub("%s+$", ""))
end

-- Entfernt nur führende/abschließende Bindestriche für Sortierschlüssel
local function sortkey(token)
  token = trim(token)
  token = token:gsub("^%-+", ""):gsub("%-+$", "")
  return token
end

-- Für Property-Werte: führende/abschließende Bindestriche entfernen
local function cleanValue(token)
  return sortkey(token)
end

-- Abkürzungen ↔ Langform
local mapWortartToAbbr = {
  ["Dingwort"] = "Dgw.",
  ["Dingname"] = "Dgn."
}
local mapGeschlechtToAbbr = {
  ["weiblich"] = "wl.",
  ["männlich"] = "ml.",
  ["sachlich"] = "sl."
}
local mapSprachToAbbr = {
  ["Deutsch"] = "deu.",
  ["deutsch"] = "deu."
}

-- Sichtbare Abkürzung ermitteln (Param > Mapping > Fallback)
local function abbrOr(paramAbbr, long, tableMap)
  local a = trim(paramAbbr)
  if a ~= "" then return a end
  local longN = trim(long)
  return tableMap[longN] or longN
end

-- Baut sichtbare Linkfolge der Tokens (ohne Trennzeichen, die Bindestriche stehen im Token)
local function visibleTokens(args)
  local parts = {}
  for i=1,3 do
    local t = trim(args[i .. "Wortglied"])
    if t ~= "" then
      table.insert(parts, "[[:Kategorie:" .. t .. "]]")
    end
  end
  return table.concat(parts, "")
end

-- Unsichtbare Kategorisierung inkl. Sortierschlüssel
local function hiddenCategories(args)
  local cats = {}
  for i=1,3 do
    local t = trim(args[i .. "Wortglied"])
    if t ~= "" then
      local sort = trim(args[i .. "Sort"])
      if sort == "" then sort = sortkey(t) end
      table.insert(cats, "[[Kategorie:" .. t .. "|" .. sort .. "]]")
    end
  end
  -- Klassifikations-Kategorien
  local wa = trim(args["Wortart"])
  if wa ~= "" then table.insert(cats, "[[Kategorie:Wortart " .. wa .. "]]") end
  local g  = trim(args["Wortgeschlecht"])
  if g ~= "" then table.insert(cats, "[[Kategorie:Wortgeschlecht " .. g .. "]]") end
  local sAbk = abbrOr(args["SprachstufeAbk"], args["Sprachstufe"], mapSprachToAbbr)
  if trim(sAbk) ~= "" then table.insert(cats, "[[Kategorie:Sprachstufe " .. sAbk .. "]]") end
  return table.concat(cats)
end

-- SMW #set Blöcke
local function smwSets(args, pageName)
  local sets = {}

  -- Oberbegriff
  table.insert(sets, "{{#set: ist Wortbildung::" .. pageName .. "}}")

  -- Klassifikation (Langform)
  local wa = trim(args["Wortart"])
  if wa ~= "" then table.insert(sets, "{{#set: ist Wortart::" .. wa .. "}}") end

  local g = trim(args["Wortgeschlecht"])
  if g ~= "" then table.insert(sets, "{{#set: ist Wortgeschlecht::" .. g .. "}}") end

  local sLong = trim(args["Sprachstufe"])
  if sLong ~= "" then table.insert(sets, "{{#set: ist Sprachstufe::" .. sLong .. "}}") end

  -- Teile nach Art → Property
  local art2prop = {
    ["Wortbildung"]  = "hat Wortbildung",
    ["Wortandglied"] = "hat Wortandglied",
    ["Wortendglied"] = "hat Wortendglied",
    ["Wortfuge"]     = "hat Wortfuge"
  }
  for i=1,3 do
    local t = trim(args[i .. "Wortglied"])
    local a = trim(args[i .. "Wortgliedart"])
    if t ~= "" and a ~= "" and art2prop[a] then
      local prop = art2prop[a]
      table.insert(sets, "{{#set: " .. prop .. "::" .. cleanValue(t) .. "}}")
    end
  end

  return table.concat(sets)
end

function p.render(frame)
  local args = frame:getParent() and frame:getParent().args or frame.args
  local pageName = mw.title.getCurrentTitle().text

  local vis = visibleTokens(args)

  -- Abkürzungen für Anzeige
  local waAbk = abbrOr(args["WortartAbk"], args["Wortart"], mapWortartToAbbr)
  local gAbk  = abbrOr(args["WortgeschlechtAbk"], args["Wortgeschlecht"], mapGeschlechtToAbbr)
  local sAbk  = abbrOr(args["SprachstufeAbk"], args["Sprachstufe"], mapSprachToAbbr)

  local displayTail = {}
  if trim(waAbk) ~= "" then table.insert(displayTail, waAbk) end
  if trim(gAbk)  ~= "" then table.insert(displayTail, gAbk)  end
  if trim(sAbk)  ~= "" then table.insert(displayTail, sAbk)  end

  local visible = vis
  if #displayTail > 0 then
    visible = visible .. " " .. table.concat(displayTail, " ")
  end

  local cats = hiddenCategories(args)
  local sets = smwSets(args, pageName)

  -- Keine erzwungenen Zeilenumbrüche
  return visible .. cats .. sets
end

return p