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

NAME

Quiq::Tag - Erzeuge Markup-Code gemäß XML-Regeln

BASE CLASS

Quiq::Hash

SYNOPSIS

Modul laden und Objekt instantiieren

  use Quiq::Tag;
  
  my $p = Quiq::Tag->new;

Tag ohne Content

  $code = $p->tag('person',
      firstname => 'Lieschen',
      lastname => 'Müller',
  );

liefert

  <person firstname="Lieschen" lastname="Müller" />

Tag mit Content

  $code = $p->tag('bold','sehr schön');

liefert

  <bold>sehr schön</bold>

Enthält der Content, wie hier, keine Zeilenumbrüche, werden Begin- und End-Tag unmittelbar um den Content gesetzt. Andernfalls wird der Content eingerückt mehrzeilig zwischen Begin- und End-Tag gesetzt. Siehe nächstes Beispiel.

Tag mit Unterstruktur

  $code = $p->tag('person','-',
      $p->tag('firstname','Lieschen'),
      $p->tag('lastname','Müller'),
  );

erzeugt

  <person>
    <firstname>Lieschen</firstname>
    <lastname>Müller</lastname>
  </person>

Das Bindestrich-Argument ('-') bewirkt, dass die nachfolgenden Argumente zum Content des Tag konkateniert werden. Die umständlichere Formulierung wäre:

  $code = $p->tag('person',$p->cat(
      $p->tag('firstname','Lieschen'),
      $p->tag('lastname','Müller'),
  ));

DESCRIPTION

Ein Objekt der Klasse erzeugt Markup-Code gemäß den Regeln von XML. Mit den beiden Methoden tag() und cat() kann Markup-Code beliebiger Komplexität erzeugt werden.

METHODS

Instantiierung

new() - Konstruktor

Synopsis

  $p = $class->new;

Returns

Objekt

Description

Instantiiere ein Objekt der Klasse und liefere eine Referenz auf dieses Objekt zurück.

Generierung

tag() - Erzeuge Tag-Code

Synopsis

  $code = $p->tag($elem,@opts,@attrs);
  $code = $p->tag($elem,@opts,@attrs,$content);
  $code = $p->tag($elem,@opts,@attrs,'-',@content);

Arguments

$elem

Name des Elements.

@opts

Optionen. Siehe unten.

@attrs

Element-Attribute und ihre Werte.

$content

Inhalt des Tag.

@contents

Sequenz von Inhalten.

Options

-defaults => \@keyVals (Default: undef)

Liste der Default-Attribute und ihrer Werte. Ein Attribut in @keyVals, das nicht unter den Attributen @attrs des Aufrufs vorkommt, wird auf den angegebenen Defaultwert gesetzt.

-elements => \%elements (Default: undef)

Hash, der die Default-Formatierung und Default-Attribute von Elementen definiert. Aufbau:

  %elements = (
      $elem => [$fmt,\@keyVals],
      ...
  )

Der Hash muss nicht jedes Element definieren. Nicht-vorkommende Elemente gemäß Default-Formatierung formatiert (siehe -fmt) besitzen keine Default-Attribute.

-fmt => 'c'|'e'|'E'|'i'|'m'|'p'|'P'|'v' (Default: gemäß $elem)

Art der Content-Formatierung.

'c' (cdata):

Wie 'm', nur dass der Content in CDATA eingefasst wird (in HTML: script):

  <TAG ...>
    // <![CDATA[
    CONTENT
    // ]]>
  </TAG>\n
'e' (empty):

Element hat keinen Content (in HTML: br, hr, ...):

  <TAG ... />\n
'E' (empty, kein Newline):

Wie 'e', nur ohne Newline am Ende (in HTML: img, input, ...):

  <TAG ... />
'i' (inline):

Der Content wird belassen wie er ist. Dies ist nützlich für Tags, die in Fließtext eingesetzt werden. Ein Newline wird nicht angehängt.

  Text Text <TAG ...>Text Text
  Text</TAG> Text Text

(in HTML: a, b, span, ...)

'm' (multiline):

Content wird auf eigene Zeile(n) zwischen Begin- und End-Tag gesetzt und um -ind=>$n Leerzeichen eingerückt:

  <TAG ...>
    CONTENT
  </TAG>\n

Ist der Content leer, wird nur ein End-Tag gesetzt:

  <TAG ... />\n
'M' (multiline, ohne Einrückung):

Wie 'm', nur ohne Einrückung (in HTML: html, ...):

  <TAG ...>
  CONTENT
  </TAG>\n
'p' (protect):

Der Content wird geschützt, indem dieser einzeilig gemacht (LF und CR werden durch &#10; und &#13; ersetzt) und unmittelbar zwischen Begin- und End-Tag gesetzt wird (in HTML: pre, textarea, ...):

  <TAG ...>CONTENT</TAG>\n
'P' (protect, Einrückung entfernen):

Wie 'p', nur dass die Einrückung des Content entfernt wird.

'v' (variable) = Default-Formatierung:

Ist der Content einzeilig, wird er unmittelbar zwischen Begin- und End-Tag gesetzt:

  <TAG ...>CONTENT</TAG>\n

Ist der Content mehrzeilig, wird er eingerückt:

  <TAG ...>
    CONTENT
  </TAG>\n

(in HTML: title, h1-h6, ...)

-nl => $n (Default: 1)

Anzahl Newlines am Ende.

-nl => 0 (kein Newline):

  <TAG>CONTENT</TAG>

-nl => 1 (ein Newline):

  <TAG>CONTENT</TAG>\n

-nl => 2 (zwei Newlines):

  <TAG>CONTENT</TAG>\n\n

usw.

-placeholders => \@keyVal (Default: undef)

Ersetze im erzeugten Code die angegebenen Platzhalter durch ihre Werte.

Description

Erzeuge den Code eines Tag und liefere diesen zurück.

cat() - Füge Sequenz zusammen

Synopsis

  $code = $p->cat(@opt,@args);

Arguments

@args

Sequenz von Werten.

Options

-placeholders => \@keyVal

Ersetze im generierten Code die angegebenen Platzhalter durch die angegebenen Werte.

Description

Füge die Arguments @args zusammen und liefere den resultierenden Code zurück.

VERSION

1.184

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2020 Frank Seitz

LICENSE

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