Modul:Str

Aus Odysseetheater
Version vom 7. Juli 2023, 09:55 Uhr von Odyssee (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „ local Str = {} function Str.len(frame) return mw.ustring.len(frame.args[1]) end function Str.left(frame) local idx = tonumber(frame.args[2]) if (not idx) or idx < 1 then return "" end return mw.ustring.sub(frame.args[1],1,idx) end function Str.right(frame) local laenge = tonumber(frame.args[2]) if (not laenge) or laenge < 1 then return "" else laenge = - laenge…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Dieses Modul dient der Implementierung der Stringfunktionen in andere Vorlagen.

Exportierte Funktionen

len

Gibt die Länge eines Strings zurück

Parameter

  • frame: Frame, der die Argumente der Invoke-Funktion bereithält.

Argumente

  • 1: der String.

Rückgabewert

Die Länge des Strings.


left

Gibt die ersten N Zeichen eines Strings wieder.
Hier wird die Restlänge als Argument übergeben.
Eine Funktion mit der Anzahl der abzutrennenden Zeichen als Argument ist unter crop zu finden.

Parameter

  • frame: Frame, der die Argumente der Invoke-Funktion bereithält.

Argumente

  • 1: Der String.
  • 2: Anzahl der restlichen Zeichen

Rückgabewert

Entsprechend gekürzter String.


crop

Kürzt einen String rechts um eine bestimmte Anzahl Zeichen.
Hier wird die Länge des abzutrennenden Teilstrings als Argument übergeben.
Eine Funktion mit der Anzahl der übrigbleibenden Zeichen als Argument ist unter left zu finden.

Parameter

  • frame: Frame, der die Argumente der Invoke-Funktion bereithält.

Argumente

  • 1: Der String.
  • 2: Anzahl der abzutrennenden Zeichen

Rückgabewert

Der gekürzte String.


right

Gibt die letzten n Zeichen eines Strings wieder. Diese Funktion entspricht nicht der Vorlage:Str_right. Siehe dazu auch Funktion cropleft.

Parameter

  • frame: Frame, der die Argumente der Invoke-Funktion bereithält.

Argumente

  • 1: Der String.
  • 2: Anzahl der restlichen Zeichen

Rückgabewert

Entsprechend gekürzter String.


cropleft

Kürzt einen String links um eine bestimmte Anzahl Zeichen.
Hier wird die Länge des abzutrennenden Teilstrings als Argument übergeben.
Eine Funktion mit der Anzahl der übrigbleibenden Zeichen als Argument ist unter right zu finden.
Diese Funktion entspricht im Wesentlichen der Vorlage:Str_right.

Parameter

  • frame: Frame, der die Argumente der Invoke-Funktion bereithält.

Argumente

  • 1: Der String.
  • 2: Anzahl der abzutrennenden Zeichen

Rückgabewert

Entsprechend gekürzter String.


index

Gibt das Zeichen an einer bestimmten Position im String wieder.

Parameter

  • frame: Frame, der die Argumente der Invoke-Funktion bereithält.

Argumente

  • 1: Der String.
  • 2: Position des Zeichens

Rückgabewert

Das Zeichen an der gegebenen Position.


sub

Gibt einen Teil eines Strings wieder.
Das ist die allgemeine Teilstringfunktion

Parameter

  • frame: Frame, der die Argumente der Invoke-Funktion bereithält.

Argumente

  • 1: Der String.
  • 2: Position des ersten Zeichens des Teilstrings.
  • 3: Länge des Teilstrings.

Rückgabewert

Entsprechender Teilstring.


hex2dez

Wandelt eine als String übergebene Hexadezimalzahl in eine Dezimalzahl um. Im Fehlerfall wird Null zurückgegeben.

Parameter

  • frame: Frame, der die Argumente der Invoke-Funktion bereithält.

Argumente

  • 1: Der String.

Rückgabewert

Die Zahl

match

Filtert einen Teilstring aus einem übergebenen String mittels eines regulären Ausdrucks (Regex) heraus. Die unterstützten Sprachelemente des regulären Ausdrucks finden sich unter [1], erweitert unter die in [2] beschriebenen Unicode-Eigenschaften. Die wichtigste Einschränkung ist das Lua-Regexe keine Alternativen (|-Sprachelement) unterstützen.

Parameter

  • frame: Frame, der die Argumente der Invoke-Funktion bereithält.

Argumente

  • 1: Der Eingabestring.
  • 2: Der anzuwendende reguläre Ausdruck.
  • 3 (optional): wenn mittels Klammerung mehrere Gruppen definiert wurden, kann die zurückzugebende Gruppe hier angegeben werden. Falls nicht angegeben, wird 0 (= alle Teilstrings) angenommen.

Rückgabewert

Ein gemäß dem angegebenen Regex gefilterter Teilstring.

Beispiele:

Eingabe Ausgabe Erklärung
{{#invoke:Str|match|eine Zeichenkette als Test|%u%l+}} Zeichenkette erstes Wort, das mit einem Großbuchstaben beginnt
{{#invoke:Str|match|Russische Sprache (русский язык)|[Ѐ-ӿ]+}} русский erste Zeichenfolge aus dem Unicodeblock Kyrillisch
{{#invoke:Str|match|Beispieltext|(Bei).+(text)|2}} text zweite Gruppe zurückgeben
{{#invoke:Str|match|Beispieltext|(Bei).+(text)|0}} Beitext alle Gruppen zurückgeben

Vorlage:Wikipedia


  local Str = {} 

    function Str.len(frame)
      return mw.ustring.len(frame.args[1])
    end

    function Str.left(frame)
      local idx = tonumber(frame.args[2])
      if (not idx) or idx < 1 then
        return ""
      end
      return mw.ustring.sub(frame.args[1],1,idx)
    end

    function Str.right(frame)
      local laenge = tonumber(frame.args[2])
      if (not laenge) or laenge < 1 then
        return ""
      else
      laenge = - laenge
      end
      return mw.ustring.sub(frame.args[1],laenge,-1)
    end

    function Str.index(frame)
      local idx = tonumber(frame.args[2])
      if (not idx) or idx < 1 then
        return ""
      end
      return mw.ustring.sub(frame.args[1],idx,idx)
    end

    function Str.sub(frame)
      local von = tonumber(frame.args[2])
      local laenge = tonumber(frame.args[3])
      if (not von) or (not laenge) then
        return ""
      end
      if (von < 1) then
        von = 1
      end      
      local bis = von + laenge - 1
      if (bis < von) then
        return ""
      end
      return mw.ustring.sub(frame.args[1],von,bis)
    end

    function Str.crop(frame)
      local s = frame.args[1]
      local cut = tonumber(frame.args[2])
      local laenge =  mw.ustring.len(s)
      if (not cut) or (cut < 1) then
        return s
      end
      return mw.ustring.sub(s,1,laenge - cut)
    end

    function Str.cropleft(frame)
      local s = frame.args[1]
      local cut = tonumber(frame.args[2])
      local laenge =  mw.ustring.len(s)
      if (not cut) or (cut < 1) then
        return s
      end
      return mw.ustring.sub(s,cut+1,-1)
    end

    function Str.find(frame)
      if not frame.args[2] or frame.args[2] == "" then
        return 1
      end
      local  idx = mw.ustring.find(frame.args[1], frame.args[2],1, true)
      if idx then
          return idx
      else
          return -1
      end
    end

    function Str.hex2dez(frame)
      a = tonumber(frame.args[1],16)
      if a then
        return a
      else
        return 0
      end
    end

    function Str.match(frame)
        local text = frame.args[1] or ""
        local pattern = frame.args[2] or ""
        local index = tonumber(frame.args[3]) or 0
        if (text == "" or pattern == "") then return "" end
 
        -- return all captures (denoted by brackets in the pattern) if index is zero, otherwise return only the index-th capture
        if index <= 0 then
            return mw.ustring.match(text, pattern)
        else
            return ({mw.ustring.match(text, pattern)})[index]
        end
    end

function escape_lua_regex(str)
	return mw.ustring.gsub(str, ".", {
	    ["%"] = "%%";
	    ["^"] = "%^";
	    ["$"] = "%$";
	    ["."] = "%.";
	    ["("] = "%(";
	    [")"] = "%)";
	    ["["] = "%[";
	    ["]"] = "%]";
	    ["?"] = "%?";
	    ["*"] = "%*";
	    ["+"] = "%+";
	    ["-"] = "%-";
	    ["\0"] = "%z";
  	})
end
 
function Str.replace(frame)	
	local text = frame.args[1] or ""      -- Text, der bearbeitet werden soll
	local search = frame.args[2] or ""    -- Textstellen innerhalb von "text" die ersetzt werden sollen
	if text == "" or search == "" then return "" end 
 
	local replace = frame.args[3] or ""   -- Ersetzungstext
	local count = tonumber(frame.args[4]) -- Anzahl der Ersetzungen (optional)
	local regexsearch = frame.args[5]     -- beliebiger Wert um dafür zu sorgen, dass der Suchtext "search" als Lua-regulärer Ausdruck behandelt werden soll
 
	if not regexsearch or regexsearch == "" then
		search = escape_lua_regex(search)
		replace = mw.ustring.gsub(replace, "%%", "%%%%")
	end
 
	local result
	if count then
		result,_ = mw.ustring.gsub(text, search, replace, count)
	else
		result,_ = mw.ustring.gsub(text, search, replace)
	end
	return result
end
 return Str