Quiq::MediaWiki::Markup - MediaWiki Code Generator
Quiq::Hash
Ein Objekt der Klasse repräsentiert einen Generator für das MediaWiki-Markup. Die Methoden der Klasse erzeugen den Markup-Code, ohne dass man sich um die Details der Syntax kümmern muss. Die Implementierung ist nicht vollständig, sondern wird nach Bedarf erweitert.
Das lokale MediaWiki ist erreichbar unter: http://localhost/mediawiki/ (anmelden als Benutzer fs, ggf. apache2ctl start)
Homepage: https://www.mediawiki.org/
Handbuch: https://www.mediawiki.org/wiki/Help:Contents
Markup: https://www.mediawiki.org/wiki/Help:Formatting
CSS-Regeln: https://www.mediawiki.org/wiki/Manual:CSS
Globale Community Site für Wikimedia-Projekte: https://meta.wikimedia.org/
$gen = $class->new;
Instantiiere einen MediaWiki Markup Generator und liefere eine Referenz auf dieses Objekt zurück.
Der Code von Blöcken wird mit einer Leerzeile am Ende erzeugt, so dass alle Blöcke einfach konkateniert werden können.
$code = $gen->code($text,$withFormatting);
Der Text des Code-Blocks
Wenn wahr, erlaube Formatierung im Code-Abschnitt.
Markup-Code (String)
Erzeuge den MediaWiki Markup-Code für einen Code-Block mit dem Text $text und liefere diesen zurück. Ist $text undef oder ein Leerstring, wird ein Leerstring geliefert. Andernfalls wird $text per trim() von einer etwaigen Einrückung befreit, bevor er um zwei Leerzeichen eingerückt wird.
Syntax: https://www.mediawiki.org/wiki/Help:Formatting
Text:
$gen->code("Dies ist\nein Test.");
erzeugt
| Dies ist | ein Test.
Eine Einrückung der Quelle wird automatisch entfernt:
$gen->code(q~ Dies ist ein Test. ~);
$code = $gen->comment($text);
Der Text des Kommentars
Erzeuge den MediaWiki Markup-Code für einen Kommentar mit dem Text $text und liefere diesen zurück. Ist $text undef oder ein Leerstring, wird ein Leerstring geliefert. Andernfalls wird $text per trim() von einer etwaigen Einrückung befreit.
Ist der Kommentar einzeilig, wird die Kommentar-Klammer auf die gleiche Zeile gesetzt:
<!-- TEXT -->
Ist der Kommentar mehrzeilig, wird die Kommentar-Klammer auf separate Zeilen gesetzt und der Text um zwei Leerzeichen eingerückt:
Einzeiliger Kommentar:
$gen->comment('Dies ist ein Kommentar');
<!-- Dies ist ein Kommentar -->
Mehrzeiliger Kommentar:
$gen->comment(q~ Dies ist ein Kommentar ~);
$code = $gen->horizontalRule;
Erzeuge den MediaWiki Markup-Code für eine horizontale Trennline und liefere diesen zurück.
$gen->horizontalRule;
----
$code = $gen->image(@keyVal);
Mögliche Werte: left, right, center, none.
Alternativer Text.
Umrandung.
Bildbeschriftung.
(Pflichtangabe) Name der Datei. Hier wird nur der Dateiname, bestehend aus NAME.EXT benötigt. Ein etwaiger Pfad, sofern vorhanden, wird entfernt. Die Datei muss zuvor ins MediaWiki hochgeladen worden sein.
Mögliche Werte: frameless, frame, thumb.
Höhe des Bildes.
Link, mit das Bild hinterlegt wird.
Seitennumer im Falle eines PDF.
Mögliche Werte: baseline, sub, super, top, text-top, middle, bottom, text-bottom.
Breite des Bildes.
Erzeuge den MediaWiki Markup-Code für ein Bild und liefere diesen zurück.
Syntax: https://www.mediawiki.org/wiki/Help:Images
$gen->image( file => 'Ein_testbild.png', width => 1200, height => 900, );
[[File:Ein_testbild.png|1200x900px]]
$code = $gen->item($type,$val); $code = $gen->item($type,$key,$val);
Typ der Liste. Mögliche Typen einer Liste:
Punktliste.
Nummerierungsliste.
Definitionsliste.
Die Typangabe kann auch aus mehreren Typangaben zusammengesetzt sein, wie es bei geschachtelten Listen benötigt wird, z.B. "*#*".
Definitionsterm (nur Definitionsliste).
Wert des Elements (alle Listen).
Erzeuge den MediaWiki Markup-Code für ein Listenelement des Typs $type und mit Wert $val. Im Falle einer Definitonsliste verwende den Definitionsterm $key.
https://www.mediawiki.org/wiki/Help:Lists
Punktliste
$gen->item('*','Apfel');
produziert
* Apfel
Nummerierungsliste
$gen->item('#','Apfel');
# Apfel
Definitionsliste
$gen->item(';',A=>'Apfel);
; A : Apfel
Item einer untergeordneten Liste
$gen->item('#*','Apfel');
*#* Apfel
Item mit einer untergeordneten Liste als Wert
$gen->item('#',"* Apfel\n* Birne\n*Pflaume");
#* Apfel #* Birne #* Pflaume
$code = $gen->list($type,\@items);
Typ der Liste. Mögliche Werte:
Numerierungsliste.
Liste der List-Items. Im Falle einer Definitionsliste ist dies eine Liste von Schlüssel/Wert-Paaren. In allen anderen Fällen ist es eine Liste von skalaren Werten.
Erzeuge den MediaWiki Markup-Code für eine Liste des Typs $type mit den Elementen @items und liefere diesen zurück. Listen können auch geschachtelt werden. Siehe Examples.
$gen->list('*',['Apfel','Birne','Pflaume']);
* Apfel * Birne * Pflaume
$gen->list('#',['Apfel','Birne','Pflaume']);
# Apfel # Birne # Pflaume
$gen->list(';',[A=>'Apfel',B=>'Birne',C=>'Pflaume']);
; A : Apfel ; B : Birne ; C : Pflaume
* Geschachtelte Liste: $code .= $gen->list('#',[ 'Obst', $gen->list('*',[ 'Apfel', 'Birne', 'Pflaume', ]), 'Gemüse', $gen->list('*',[ 'Gurke', 'Spinat', 'Tomate', ]), ]); produziert # Obst #* Apfel #* Birne #* Pflaume # Gemüse #* Gurke #* Spinat #* Tomate
$code = $gen->paragraph($text);
Der Text des Paragraphen
Erzeuge den MediaWiki Markup-Code für einen Paragraphen mit dem Text $text und liefere diesen zurück. Ist $text undef oder ein Leerstring, wird ein Leerstring geliefert. Andernfalls wird $text per trim() von einer etwaigen Einrückung befreit.
$gen->paragraph("Dies ist\nein Test.");
Dies ist ein Test.
Eine Einrückung wird automatisch entfernt:
$gen->paragraph(q~ Dies ist ein Test. ~);
$code = $gen->section($level,$title);
Die Nummer der Abschnittsebene. Wertebereich: 1-6.
Der Abschnitts-Titel.
Erzeuge den MediaWiki Markup-Code für einen Abschnitt der Tiefe $level und der Abschnittsüberschrift $title und liefere diesen zurück.
$gen->section(3,'Eine Überschrift');
=== Eine Überschrift ===
$code = $gen->table(@keyVal);
Die Argumentliste @keyVal wird gebildet über folgenden Schlüssel/Wert-Paaren:
Liste der Kolumnen-Ausrichtungen. Mögliche Werte je Kolumne: 'left', 'right', 'center'.
Hintergrundfarbe der Rumpfzeilen.
Unterschrift der Tabelle.
Liste der Tabellenzeilen.
Hintergrundfarbe der Titelzeile.
Liste der Kolumnentitel.
Subroutine, die für jeden Wert (caption, title, row value) aufgerufen wird:
valueCallback => sub { my $val = shift; ... return $val; }
Die Subroutine wird z.B. von Sdoc verwendet, um Segmente zu expandieren:
valueCallback => sub { return $self->expandText($m,\shift); }
Erzeuge den MediaWiki Markup-Code für eine Tabelle und liefere diesen zurück.
Das Aussehen der MediaWiki-Tabelle wird durch CSS-Angaben bestimmt, die in den Wiki-Code eingestreut werden. Die Grundlage hierfür bietet die Standard-CSS-Klasse "wikitable" (siehe Link unten).
Syntax: https://www.mediawiki.org/wiki/Help:Tables
CSS der Klasse "wikitable": https://www.mediawiki.org/wiki/Manual:CSS
Der Code
$gen->table( alignments => ['left','right','center'], caption => 'Eine Tabelle', titles => ['L','R','Z'], rows => [ ['A',1,'ABCDEFG'], ['AB',12,'HIJKL'], ['ABC',123,'MNO'], ['ABCD',1234,'P'], ], );
{| class="wikitable" |+ style="caption-side: bottom; font-weight: normal"|Eine Tabelle |- ! style="background-color: #e8e8e8; text-align: left" |L ! style="background-color: #e8e8e8; text-align: right" |R ! style="background-color: #e8e8e8" |Z |- | style="background-color: #ffffff" |A | style="background-color: #ffffff; text-align: right" |1 | style="background-color: #ffffff; text-align: center" |ABCDEFG |- | style="background-color: #ffffff" |AB | style="background-color: #ffffff; text-align: right" |12 | style="background-color: #ffffff; text-align: center" |HIJKL |- | style="background-color: #ffffff" |ABC | style="background-color: #ffffff; text-align: right" |123 | style="background-color: #ffffff; text-align: center" |MNO |- | style="background-color: #ffffff" |ABCD | style="background-color: #ffffff; text-align: right" |1234 | style="background-color: #ffffff; text-align: center" |P |}
was in der Darstellung so aussieht
+-------+--------------------+ | L | R | Z | +----------------------------+ | A | 1 | ABCDEFG | +----------------------------+ | AB | 12 | HIJKL | +----------------------------+ | ABC | 123 | MNO | +----------------------------+ | ABCD | 1234 | P | +----------------------------+ Eine Tabelle
$code = $gen->tableOfContents($bool);
Wenn wahr, wird an der aktuellen Position das Inhaltsverzeichnis der Seite gesetzt. Wenn falsch, wird kein Inhaltsverzeichnis für die Seite gesetzt, auch nicht automatisch.
Erzeuge den MediaWiki Markup-Code für das Setzen oder Unterdrücken des Inhaltsverzeichnisses und liefere diesen zurück.
Syntax: https://www.mediawiki.org/wiki/Manual:Table_of_contents
Inhaltsverzeichnis setzen
$gen->tableOfContents(1);
__TOC__
Inhaltsverzeichnis unterdrücken
$gen->tableOfContents(0);
__NOTOC__
$str = $gen->fmt($type,$text);
Erzeuge Inline-Segment für Text $text und liefere den resultierenden Wiki-Code zurück. Ist $text undef oder ein Leerstring, wird ein Leerstring geliefert. Andernfalls wird $text per trim() von einer etwaigen Einrückung befreit und einzeilig gemacht, d.h. Zeilenumbrüche in $text werden entfernt.
Es existieren die Formatierungen:
Der Text wird als einzeiliger Kommentar gesetzt. Erzeugt:
Erzeugt:
''TEXT''
'''TEXT'''
'''''TEXT'''''
Der Text wird nicht interpretiert. Erzeugt:
<code><nowiki>TEXT</nowiki></code>
Inline-Formatierungen wie bold und italic sind möglich. Erzeugt:
<code>TEXT</code>
<nowiki>TEXT</nowiki>
<br />
<q>TEXT</q>
$code = $gen->indent($n);
Erzeuge den MediaWiki Markup-Code für eine Einrückung der Tiefe $n und liefere diesen zurück.
$gen->indent(2);
::
$code = $gen->link($type,$destination,$text);
Art des Link. Mögliche Werte: 'internal', 'external'.
Link-Ziel.
Link-Text.
Erzeuge den MediaWiki Markup-Code für einen internen oder externen Link und liefere diesen zurück.
Interner Link
$gen->link('internal','Transaktionssicherheit', 'Abschnitt Transaktiossicherheit');
[[#Transaktionssicherheit|Abschnitt Transaktiossicherheit]]
Externer Link
$gen->link('external','http::/fseitz.de','Homepage Frank Seitz');
[http::/fseitz.de/ Homepage Frank Seitz]
$code = $gen->protect($text);
Schütze alle Metazeichen in Text $text, so dass das Resultat als Inhalt in eine MediaWiki-Seite eingesetzt werden kann.
$code = $this->testPage;
Erzeuge eine Seite mit MediaWiki-Markup. Diese Seite kann in ein MediaWiki übertragen und dort optisch begutachtet werden.
$ perl -MQuiq::MediaWiki::Markup -C -E 'print Quiq::MediaWiki::Markup->testPage'
1.184
Frank Seitz, http://fseitz.de/
Copyright (C) 2020 Frank Seitz
This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install Quiq, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Quiq
CPAN shell
perl -MCPAN -e shell install Quiq
For more information on module installation, please visit the detailed CPAN module installation guide.