The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Quiq::MediaWiki::Markup - MediaWiki Code Generator

BASE CLASS

Quiq::Hash

DESCRIPTION

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.

METHODS

Konstruktor

new() - Instantiiere Markup-Generator

Synopsis

    $gen = $class->new;

Description

Instantiiere einen MediaWiki Markup Generator und liefere eine Referenz auf dieses Objekt zurück.

Blöcke

Der Code von Blöcken wird mit einer Leerzeile am Ende erzeugt, so dass alle Blöcke einfach konkateniert werden können.

code() - Erzeuge Code-Abschnitt

Synopsis

    $code = $gen->code($text,$withFormatting);

Arguments

$text

Der Text des Code-Blocks

$withFormatting

Wenn wahr, erlaube Formatierung im Code-Abschnitt.

Returns

Markup-Code (String)

Description

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.

See Also

Examples

  • 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.
        ~);

    erzeugt

        |  Dies ist
        |  ein Test.

comment() - Erzeuge Kommentar

Synopsis

    $code = $gen->comment($text);

Arguments

$text

Der Text des Kommentars

Returns

Markup-Code (String)

Description

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:

    <!--
      TEXT
    -->

See Also

Examples

  • Einzeiliger Kommentar:

        $gen->comment('Dies ist ein Kommentar');

    erzeugt

        <!-- Dies ist ein Kommentar -->
  • Mehrzeiliger Kommentar:

        $gen->comment(q~
            Dies ist
            ein Kommentar
        ~);

    erzeugt

        <!--
          Dies ist
          ein Kommentar
        -->

horizontalRule() - Erzeuge horizontale Trennline

Synopsis

    $code = $gen->horizontalRule;

Returns

Markup-Code (String)

Description

Erzeuge den MediaWiki Markup-Code für eine horizontale Trennline und liefere diesen zurück.

See Also

Example

    $gen->horizontalRule;

erzeugt

    ----

image() - Erzeuge Bild

Synopsis

    $code = $gen->image(@keyVal);

Options

align => $align

Mögliche Werte: left, right, center, none.

alt => $str

Alternativer Text.

border => $bool

Umrandung.

caption => $str

Bildbeschriftung.

file => $file

(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.

format => $format

Mögliche Werte: frameless, frame, thumb.

height => $height

Höhe des Bildes.

Link, mit das Bild hinterlegt wird.

page => $n

Seitennumer im Falle eines PDF.

valign => $valign

Mögliche Werte: baseline, sub, super, top, text-top, middle, bottom, text-bottom.

width => $width

Breite des Bildes.

Returns

Markup-Code (String)

Description

Erzeuge den MediaWiki Markup-Code für ein Bild und liefere diesen zurück.

See Also

Example

    $gen->image(
        file => 'Ein_testbild.png',
        width => 1200,
        height => 900,
    );

erzeugt

    [[File:Ein_testbild.png|1200x900px]]

item() - Erzeuge Listenelement

Synopsis

    $code = $gen->item($type,$val);
    $code = $gen->item($type,$key,$val);

Arguments

$type

Typ der Liste. Mögliche Typen einer Liste:

Zeichen: *

Punktliste.

Zeichen: #

Nummerierungsliste.

Zeichen: ;

Definitionsliste.

Die Typangabe kann auch aus mehreren Typangaben zusammengesetzt sein, wie es bei geschachtelten Listen benötigt wird, z.B. "*#*".

$key

Definitionsterm (nur Definitionsliste).

$val

Wert des Elements (alle Listen).

Returns

Markup-Code (String)

Description

Erzeuge den MediaWiki Markup-Code für ein Listenelement des Typs $type und mit Wert $val. Im Falle einer Definitonsliste verwende den Definitionsterm $key.

See Also

Examples

  • Punktliste

        $gen->item('*','Apfel');

    produziert

        * Apfel
  • Nummerierungsliste

        $gen->item('#','Apfel');

    produziert

        # Apfel
  • Definitionsliste

        $gen->item(';',A=>'Apfel);

    produziert

        ; A : Apfel
  • Item einer untergeordneten Liste

        $gen->item('#*','Apfel');

    produziert

        *#* Apfel
  • Item mit einer untergeordneten Liste als Wert

        $gen->item('#',"* Apfel\n* Birne\n*Pflaume");

    produziert

        #* Apfel
        #* Birne
        #* Pflaume

list() - Erzeuge Liste

Synopsis

    $code = $gen->list($type,\@items);

Arguments

$type

Typ der Liste. Mögliche Werte:

Zeichen: *

Punktliste.

Zeichen: #

Numerierungsliste.

Zeichen: ;

Definitionsliste.

@items

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.

Returns

Markup-Code (String)

Description

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.

See Also

Examples

  • Punktliste

        $gen->list('*',['Apfel','Birne','Pflaume']);

    produziert

        * Apfel
        * Birne
        * Pflaume
  • Nummerierungsliste

        $gen->list('#',['Apfel','Birne','Pflaume']);

    produziert

        # Apfel
        # Birne
        # Pflaume
  • Definitionsliste

        $gen->list(';',[A=>'Apfel',B=>'Birne',C=>'Pflaume']);

    produziert

        ; 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

paragraph() - Erzeuge Paragraph

Synopsis

    $code = $gen->paragraph($text);

Arguments

$text

Der Text des Paragraphen

Returns

Markup-Code (String)

Description

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.

See Also

Examples

  • Text:

        $gen->paragraph("Dies ist\nein Test.");

    erzeugt

        Dies ist
        ein Test.
  • Eine Einrückung wird automatisch entfernt:

        $gen->paragraph(q~
            Dies ist
            ein Test.
        ~);

    erzeugt

        Dies ist
        ein Test.

section() - Erzeuge Abschnittsüberschrift

Synopsis

    $code = $gen->section($level,$title);

Arguments

$level

Die Nummer der Abschnittsebene. Wertebereich: 1-6.

$title

Der Abschnitts-Titel.

Returns

Markup-Code (String)

Description

Erzeuge den MediaWiki Markup-Code für einen Abschnitt der Tiefe $level und der Abschnittsüberschrift $title und liefere diesen zurück.

See Also

Example

    $gen->section(3,'Eine Überschrift');

produziert

    === Eine Überschrift ===

table() - Erzeuge Tabelle

Synopsis

    $code = $gen->table(@keyVal);

Arguments

Die Argumentliste @keyVal wird gebildet über folgenden Schlüssel/Wert-Paaren:

alignments => \@alignments (Default: [])

Liste der Kolumnen-Ausrichtungen. Mögliche Werte je Kolumne: 'left', 'right', 'center'.

bodyBackground => $color (Default: '#ffffff')

Hintergrundfarbe der Rumpfzeilen.

caption => $str

Unterschrift der Tabelle.

rows => \@rows (Default: [])

Liste der Tabellenzeilen.

titleBackground => $color (Default: '#e8e8e8')

Hintergrundfarbe der Titelzeile.

titles => \@titles (Default: [])

Liste der Kolumnentitel.

valueCallback => sub {...} (Default: keiner)

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);
    }

Returns

Markup-Code (String)

Description

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).

See Also

Example

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'],
        ],
    );

produziert

    {| 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

tableOfContents() - Setze oder unterdrücke Inhaltsverzeichnis

Synopsis

    $code = $gen->tableOfContents($bool);

Arguments

$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.

Returns

Markup-Code (String)

Description

Erzeuge den MediaWiki Markup-Code für das Setzen oder Unterdrücken des Inhaltsverzeichnisses und liefere diesen zurück.

See Also

Examples

  • Inhaltsverzeichnis setzen

        $gen->tableOfContents(1);

    erzeugt

        __TOC__
  • Inhaltsverzeichnis unterdrücken

        $gen->tableOfContents(0);

    erzeugt

        __NOTOC__

Inline Code

fmt() - Inline-Formatierung

Synopsis

    $str = $gen->fmt($type,$text);

Description

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:

comment

Der Text wird als einzeiliger Kommentar gesetzt. Erzeugt:

    <!-- TEXT -->
italic

Erzeugt:

    ''TEXT''
bold

Erzeugt:

    '''TEXT'''
boldItalic

Erzeugt:

    '''''TEXT'''''
code

Der Text wird nicht interpretiert. Erzeugt:

    <code><nowiki>TEXT</nowiki></code>
codeWithFormatting

Inline-Formatierungen wie bold und italic sind möglich. Erzeugt:

    <code>TEXT</code>
nowiki

Erzeugt:

    <nowiki>TEXT</nowiki>
nl

Erzeugt:

    <br />
quote

Erzeugt:

    <q>TEXT</q>

See Also

indent() - Erzeuge Einrückung

Synopsis

    $code = $gen->indent($n);

Returns

Markup-Code (String)

Description

Erzeuge den MediaWiki Markup-Code für eine Einrückung der Tiefe $n und liefere diesen zurück.

See Also

Example

    $gen->indent(2);

erzeugt

    ::

Synopsis

    $code = $gen->link($type,$destination,$text);

Arguments

$type

Art des Link. Mögliche Werte: 'internal', 'external'.

$destination

Link-Ziel.

$text

Link-Text.

Returns

Markup-Code (String)

Description

Erzeuge den MediaWiki Markup-Code für einen internen oder externen Link und liefere diesen zurück.

See Also

Examples

  • Interner Link

        $gen->link('internal','Transaktionssicherheit',
            'Abschnitt Transaktiossicherheit');

    erzeugt

        [[#Transaktionssicherheit|Abschnitt Transaktiossicherheit]]
  • Externer Link

        $gen->link('external','http::/fseitz.de','Homepage Frank Seitz');

    erzeugt

        [http::/fseitz.de/ Homepage Frank Seitz]

Sonstiges

protect() - Schütze Metazeichen

Synopsis

    $code = $gen->protect($text);

Description

Schütze alle Metazeichen in Text $text, so dass das Resultat als Inhalt in eine MediaWiki-Seite eingesetzt werden kann.

Testseite

testPage() - Erzeuge Test-Seite

Synopsis

    $code = $this->testPage;

Description

Erzeuge eine Seite mit MediaWiki-Markup. Diese Seite kann in ein MediaWiki übertragen und dort optisch begutachtet werden.

Example

    $ perl -MQuiq::MediaWiki::Markup -C -E 'print Quiq::MediaWiki::Markup->testPage'

VERSION

1.144

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2019 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.