.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "Locale::Po4a::Xml 3pm" .TH Locale::Po4a::Xml 3pm "2023-01-03" "Po4a-Werkzeuge" "Po4a-Werkzeuge" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Locale::Po4a::Xml \- konvertiert XML\-Dokumente und \-Derivate von/in PO\-Dateien .SH "BESCHREIBUNG" .IX Header "BESCHREIBUNG" Das Projektziel von Po4a (\s-1PO\s0 für alles) ist es, die Übersetzung (und interessanter, die Wartung der Übersetzung) zu vereinfachen, indem die Gettext-Werkzeuge auch für Gebiete verwendet werden, wo diese nicht erwartet werden, wie Dokumentation. .PP Locale::Po4a::Xml ist ein Modul, um bei der Übersetzung von XML-Dokumenten in andere [natürliche] Sprachen zu helfen. Es kann auch als Basis verwandt werden, um Module für XML-basierte Dokumente zu erstellen. .SH "ÜBERSETZEN MIT PO4A::XML" .IX Header "ÜBERSETZEN MIT PO4A::XML" Dieses Modul kann direkt zum Umgang mit generischen XML-Dokumenten verwandt werden. Dabei werden die Inhalte aller Markierungen (»Tags«) aber keiner Attribute ausgelesen, da sich dort in den meisten XML-basierten Dokumenten der geschriebene Text befindet. .PP Es gibt einige Optionen (die im nächsten Abschnitt beschrieben werden), die dieses Verhalten anpassen lassen. Falls dies nicht auf Ihr Dokumentenformat passt, ermutigen wir Sie, Ihr eigenes, von diesem Modul abgeleitetes Modul zu schreiben, um die Details Ihres Formats zu beschreiben. Lesen Sie den Abschnitt \fB\s-1SCHREIBEN ABGELEITETER MODULE\s0\fR weiter unten für die Beschreibung des Prozesses. .SH "VON DIESEM MODUL AKZEPTIERTE OPTIONEN" .IX Header "VON DIESEM MODUL AKZEPTIERTE OPTIONEN" Die globale Option »debug« führt dazu, dass das Module ausgeschlossene Zeichenketten anzeigt, um zu erkennen, ob etwas Wichtiges übersprungen wird. .PP Dies sind die Modul-spezifischen Optionen: .IP "\fBnostrip\fR" 4 .IX Item "nostrip" verhindert, dass es Leerzeichen um herausgelöste Zeichenketten entfernt .IP "\fBwrap\fR" 4 .IX Item "wrap" Erstellt eine kanonische Form der zu übersetzenden Zeichenketten, berücksichtigt dabei, dass Leerzeichen nicht wichtig sind, und bricht das übersetzte Dokument um. Diese Option kann mit angepassten »tag«\-Optionen überschrieben werden. Lesen Sie dazu über die Option \fBtranslated\fR weiter unten. .IP "\fBunwrap_attributes\fR" 4 .IX Item "unwrap_attributes" Attribute werden standardmäßig zeilenumgebrochen. Diese Option unterbindet Zeilenumbrüche. .IP "\fBcaseinsensitive\fR" 4 .IX Item "caseinsensitive" Damit funktioniert die Suche nach Markierungen und Attributen unabhängig von der Groß\-/Kleinschreibung. Falls es definiert ist, wird es laNG und <\s-1BOOK\s0>Lang als lang behandeln. .IP "\fBescapequotes\fR" 4 .IX Item "escapequotes" Maskiert Anführungszeichen in Ausgabezeichenketten. Dies ist zum Beispiel für die Erstellung von Zeichenkettenressourcen zur Verwendung mit den Android-Bauwerkzeugen notwendig. .Sp Siehe auche: https://developer.android.com/guide/topics/resources/string\-resource.html .IP "\fBincludeexternal\fR" 4 .IX Item "includeexternal" Wenn definiert, werden externe Entitäten in das erstellte (übersetzte) Dokument und für die Herauslösung der Zeichenketten aufgenommen. Falls es nicht definiert ist, müssen Sie externe Entitäten separat als unabhängige Dokumente übersetzen. .IP "\fBontagerror\fR" 4 .IX Item "ontagerror" Diese Option defniert das Verhalten des Moduls, wenn es auf eine ungültige XML-Syntax trifft (eine schließende Markierung (»Tag«), die nicht zur letzten öffnenden Markierung passt). Sie kann die folgenden Werte annehmen: .RS 4 .IP "\fIfail\fR" 4 .IX Item "fail" Dies ist der Standardwert. Das Modul wird sich mit einem Fehler beenden. .IP "\fIwarn\fR" 4 .IX Item "warn" Das Modul wird fortfahren und eine Warnung ausgeben. .IP "\fIsilent\fR" 4 .IX Item "silent" Das Modul wird ohne Warnungen fortfahren. .RE .RS 4 .Sp Seien Sie vorsichtig, wenn Sie diese Option verwenden. Im Allgemeinen wird empfohlen, die Eingabedatei zu reparieren. .RE .IP "\fBtagsonly\fR" 4 .IX Item "tagsonly" Hinweis: Diese Option wurde missbilligt. .Sp extrahiert nur die angegebenen Markierungen in der Option \fBtags\fR. Andernfalls wird es nur die Markierungen extrahieren mit Ausnahme derjenigen, die angegeben wurden. .IP "\fBdoctype\fR" 4 .IX Item "doctype" Zeichenkette, bei der ausprobiert wird, ob sie zu der ersten Zeile des Dokumenttyps passt (falls definiert). Falls nicht, wird eine Warnung angezeigt, dass das Dokument vom falschen Typ ist. .IP "\fBaddlang\fR" 4 .IX Item "addlang" Zeichenkette, die den Pfad einer Markierung (z.B. ) angibt, zu dem ein Attribut lang=\*(L"…\*(R" hinzugefügt werden soll. Die Sprache wird als Basisname der PO-Datei ohne irgendeine .po\-Erweiterung definiert sein. .IP "\fBoptionalclosingtag\fR" 4 .IX Item "optionalclosingtag" Logischer Wert, der angibt, ob schließende Markierungen optional sind (wie in \s-1HTML\s0). Standardmäßig lösen fehlende schließende Markierungen einen Fehler aus, der entsprechend \fBontagerror\fR behandelt wird. .IP "\fBtags\fR" 4 .IX Item "tags" Hinweis: Diese Option wurde missbilligt. Sie sollten stattdessen die Optionen \fBtranslated\fR und \fBuntranslated\fR verwenden. .Sp leerzeichengetrennte Liste der Markierungen, die Sie übersetzen oder überspringen möchten. Standardmäßig werden die angegebenen Markierungen ausgenommen, falls Sie aber die Option »tagsonly« verwenden, werden nur die angegebenen Markierungen einbezogen. Die Markierungen müssen die Form haben, Sie können aber einige verbinden (), um anzugeben, dass der Inhalt der Markierung nur übersetzt wird, wenn er in einer \-Markierung liegt. .Sp Sie können außerdem einige Markierungsoptionen angeben, indem Sie ein paar Zeichen an den Anfang der Markierungshierarchie stellen. Sie können zum Beispiel \fIw\fR (Zeilenumbruch) oder \fIW\fR (kein Zeilenumbruch) setzen, um das Standardverhalten, das durch die globale Option \fBwrap\fR angegeben wurde, außer Kraft zu setzen. .Sp Beispiel: W .IP "\fBattributes\fR" 4 .IX Item "attributes" leerzeichengetrennte Liste der Markierungsattribute, die Sie übersetzen wollen. Sie können die Attribute mittels ihres Namens angeben (zum Beispiel »lang«), aber Sie können ihnen eine Markierung voranstellen, um anzugeben, dass das Attribut nur übersetzt wird, wenn es sich in der angegebenen Markierung befindet. Zum Beispiel: lang gibt an, dass das Attribut lang nur übersetzt wird, falls es in einer und einer \-Markierung steht. .IP "\fBfoldattributes\fR" 4 .IX Item "foldattributes" Attribute in innenliegenden Markierungen nicht übersetzen; stattdessen alle Attribute einer Markierung durch po4a\-id= ersetzen .Sp Dies ist nützlich, wenn Attribute nicht übersetzt werden sollen, da dies die Zeichenketten für Übersetzer vereinfacht und Tippfehler vermeidet. .IP "\fBcustomtag\fR" 4 .IX Item "customtag" leerzeichengetrennte Liste der Markierungen, die nicht als Markierungen betrachtet werden. Diese Markierungen werden als innenliegend angesehen und müssen nicht geschlossen werden. .IP "\fBbreak\fR" 4 .IX Item "break" leerzeichengetrennte Liste der Markierungen, die die Abfolge unterbrechen sollen. Standardmäßig unterbrechen alle Markierungen die Abfolge. .Sp Die Markierungen müssen in der Form vorliegen, Sie können aber einige verbinden (), falls eine Markierung nur berücksichtigt werden soll, wenn sie innerhalb einer anderen Markierung liegt (). .Sp Bitte beachten Sie, dass eine Markierung nur in einer der Einstellungszeichenketten \fBbreak\fR, \fBinline\fR \fBplaceholder\fR oder \fBcustomtag\fR aufgeführt sein soll. .IP "\fBinline\fR" 4 .IX Item "inline" leerzeichengetrennte Liste der Markierungen, die als innenliegend betrachtet werden sollen. Standardmäßig unterbrechen alle Markierungen die Abfolge. .Sp Die Markierungen müssen in der Form vorliegen, Sie können aber einige verbinden (), falls eine Markierung nur berücksichtigt werden soll, wenn sie innerhalb einer anderen Markierung liegt (). .IP "\fBplaceholder\fR" 4 .IX Item "placeholder" leerzeichengetrennte Liste der Markierungen, die als Platzhalter betrachtet werden sollen. Platzhalter unterbrechen die Abfolge nicht, der Inhalt der Platzhalter wird aber separat übersetzt. .Sp Die Lage des Platzhalters in seinem Block wird mit einer Zeichenkette ähnlich der Folgenden markiert: .Sp .Vb 1 \& .Ve .Sp Die Markierungen müssen in der Form vorliegen, Sie können aber einige verbinden (), falls eine Markierung nur berücksichtigt werden soll, wenn sie innerhalb einer anderen Markierung liegt (). .IP "\fBbreak-pi\fR" 4 .IX Item "break-pi" Standardmäßig werden Verarbeitungsanweisungen (d.h. \f(CW\*(C`\*(C'\fR\-Markierungen) als innenliegende Markierungen behandelt. Übergeben Sie diese Option, wenn Sie möchten, dass die Verarbeitungshinweise als unterbrechende Markierungen behandelt werden sollen. Beachten Sie, dass unkomprimierte PHP-Markierungen durch das Auswertprogramm als Verarbeitungsanweisungen gehandhabt werden. .IP "\fBnodefault\fR" 4 .IX Item "nodefault" leerzeichengetrennte Liste der Markierungen, die das Modul nicht standardmäßig in jeder Kategorie zu setzen versuchen sollte. .Sp Falls Sie eine Markierung einsetzen, deren Vorgabeeinstellung in einer Unterklasse dieses Moduls ist, Sie aber eine alternative Einstellung wählen möchten, müssen Sie diese Markierung als Teil der Einstellungszeichenkette \fBnodefault\fR aufführen. .IP "\fBcpp\fR" 4 .IX Item "cpp" C\-Präprozessordirektiven unterstützen. Wenn diese Option gesetzt ist, wird Po4a Präprozessordirektiven als Absatztrenner betrachten. Dies ist wichtig, falls die XML-Datei vorher bearbeitet werden muss, weil die Direktiven andernfalls in die Mitte der Zeilen eingefügt werden könnten, falls Po4a sie zum aktuellen Absatz gehörig ansieht und sie nicht durch den Präprozessor erkannt würden. Hinweis: Die Präprozessordirektiven dürfen nur zwischen Markierungen erscheinen (sie dürfen keine Markierung unterbrechen). .IP "\fBtranslated\fR" 4 .IX Item "translated" leerzeichengetrennte Liste der Markierungen, die Sie übersetzen möchten .Sp Die Markierungen müssen in der Form vorliegen, Sie können aber einige verbinden (), falls eine Markierung nur berücksichtigt werden soll, wenn sie innerhalb einer anderen Markierung liegt (). .Sp Sie können außerdem einige Markierungsoptionen angeben, indem Sie ein paar Zeichen an den Anfang der Markierungshierarchie stellen. Dies setzt das durch die globalen Optionen \fBwrap\fR und \fBdefaulttranslateoption\fR festgelegte Vorgabeverhalten außer Kraft. .RS 4 .IP "\fIw\fR" 4 .IX Item "w" Markierungen sollten übersetzt werden und Inhalt kann neu umgebrochen werden .IP "\fIW\fR" 4 .IX Item "W" Markierungen sollten übersetzt werden und Inhalt sollte nicht neu umgebrochen werden .IP "\fIi\fR" 4 .IX Item "i" Markierungen sollten innenliegend übersetzt werden .IP "\fIp\fR" 4 .IX Item "p" Markierungen sollten als Platzhalter übersetzt werden .RE .RS 4 .Sp Intern kümmert sich der XML-Parser nur um diese vier Optionen: \fIw\fR \fIW\fR \fIi\fR \fIp\fR. .Sp * In \fBbreak\fR aufgeführte Markierungen werden abhängig von der Option \fBwrap\fR auf \fIw\fR oder \fIW\fR gesetzt. .Sp * In \fBinline\fR aufgeführte Markierungen werden auf \fIi\fR gesetzt. .Sp * In \fBplaceholder\fR aufgeführte Markierungen werden auf \fIp\fR gesetzt. .Sp * In \fBuntranslated\fR aufgeführte Markierungen sind ohne eine dieser gesetzten Optionen. .Sp Das tatsächliche interne Parameterverhalten können Sie durch Aufruf von \fBpo4a\fR mit der Option \fB\-\-debug\fR überprüfen. .Sp Beispiel: W .Sp Bitte beachten Sie, dass eine Markeirung entweder in der Einstellungszeichenkette \fBtranslated\fR oder \fBuntranslated\fR aufgeführt sein sollte. .RE .IP "\fBuntranslated\fR" 4 .IX Item "untranslated" leerzeichengetrennte Liste der Markierungen, die Sie nicht übersetzen möchten .Sp Die Markierungen müssen in der Form vorliegen, Sie können aber einige verbinden (), falls eine Markierung nur berücksichtigt werden soll, wenn sie innerhalb einer anderen Markierung liegt (). .Sp Bitte beachten Sie, dass eine übersetzbare innenliegende Markierung in einer unübersetzbaren Markierung als eine übersetzbare unterbrechende Markierung behandelt wird, die Einstellung \fIi\fR entfällt und \fIw\fR oder \fIW\fR werden abhängig von der Option \fBwrap\fR gesetzt. .IP "\fBdefaulttranslateoption\fR" 4 .IX Item "defaulttranslateoption" die Standardkategorie für Markierungen, die sich nicht in »translated«, »untranslated«, »break«, »inline« oder »placeholder« befinden .Sp Dies ist eine Gruppe von in \fBtranslated\fR definierten Buchstaben und diese Einstellung ist nur für übersetzbare Markierungen gültig. .SH "SCHREIBEN ABGELEITETER MODULE" .IX Header "SCHREIBEN ABGELEITETER MODULE" .SS "\s-1DEFINIERT, WELCHE MARKIERUNGEN UND ATTRIBUTE ZU\s0 ÜBERSETZEN \s-1SIND\s0" .IX Subsection "DEFINIERT, WELCHE MARKIERUNGEN UND ATTRIBUTE ZU ÜBERSETZEN SIND" Die einfachste Anpassung ist, zu definieren, welche Markierungen und Attribute der Parser übersetzen soll. Dies sollte in der Funktion »initialize« erledigt werden. Zuerst sollten Sie die Haupt\-»initialize«\-Funktion aufrufen, um die Befehlszeilenoptionen zu erhalten und dann Ihre angepassten Definitionen an den Options-Hash anhängen. Falls Sie einige neue Optionen von der Befehlszeile bearbeiten möchten, sollten Sie sie vor dem Aufruf der Haupt\-»initialize«\-Funktion definieren: .PP .Vb 6 \& $self\->{options}{\*(Aqnew_option\*(Aq}=\*(Aq\*(Aq; \& $self\->SUPER::initialize(%options); \& $self\->{options}{\*(Aq_default_translated\*(Aq}.=\*(Aq

\*(Aq; \& $self\->{options}{\*(Aqattributes\*(Aq}.=\*(Aq <p>lang id\*(Aq; \& $self\->{options}{\*(Aq_default_inline\*(Aq}.=\*(Aq <br>\*(Aq; \& $self\->treat_options; .Ve .PP Sie sollten in abgeleiteten Modulen die Optionen \fB_default_inline\fR, \fB_default_break\fR, \fB_default_placeholder\fR, \fB_default_translated\fR, \fB_default_untranslated\fR und \fB_default_attributes\fR benutzen. Dies ermöglicht Anwendern, das in Ihrem Modul definierte Verhalten mit Befehlszeilenoptionen außer Kraft zu setzen. .SS "\s-1AUSSERKRAFTSETZEN DES VORGABEVERHALTENS MIT BEFEHLSZEILENOPTIONEN\s0" .IX Subsection "AUSSERKRAFTSETZEN DES VORGABEVERHALTENS MIT BEFEHLSZEILENOPTIONEN" Falls Sie das Vorgabeverhalten dieses XML-Moduls und seiner abgeleiteten Module nicht mögen, können Sie Befehlszeilenoptionen zur Änderung ihres Verhaltens bereitstellen. .PP Siehe \fBLocale::Po4a::Docbook\fR\|(3pm), .SS "\s-1DIE FUNKTION\s0 found_string AUßER \s-1KRAFT SETZEN\s0" .IX Subsection "DIE FUNKTION found_string AUßER KRAFT SETZEN" Ein weiterer einfacher Schritt ist es, die Funktion »found_string« außer Kraft zu setzen, die die extrahierten Zeichenketten vom Parser erhält, um sie zu übersetzen. Dort können Sie steuern, welche Zeichenketten Sie übersetzen möchten und Umwandlungen in diese vor oder nach der Übersetzung selbst durchführen. .PP Sie erhält den extrahierten Text, die Referenz, von wo sie stammt und einen Hash, der zusätzliche Informationen enthält, um zu steuern, welche Zeichenketten zu übersetzen sind, wie sie zu übersetzen sind und um den Kommentar zu erzeugen. .PP Der Inhalt dieser Optionen hängt von der Art der Zeichenkette ab (angegeben in einem Eintrag dieses Hashs): .ie n .IP "type=""Markierung""" 4 .el .IP "type=``Markierung''" 4 .IX Item "type=Markierung" Die gefundene Zeichenkette ist der Inhalt einer übersetzbaren Markierung. Der Eintrag »tag_options« enthält die Optionszeichen am Anfang der Markierungshierarchie in der Moduloption »tags«. .ie n .IP "type=""Attribut""" 4 .el .IP "type=``Attribut''" 4 .IX Item "type=Attribut" bedeutet, dass die gefundene Zeichenkette der Wert eines übersetzbaren Attributs ist. Der Eintrag »Attribut« erhält den Namen des Attributs. .PP Sie muss den Text zurückgeben, der das Original im übersetzten Dokument ersetzt. Hier ein grundlegendes Beispiel dieser Funktion: .PP .Vb 6 \& sub found_string { \& my ($self,$text,$ref,$options)=@_; \& $text = $self\->translate($text,$ref,"type ".$options\->{\*(Aqtype\*(Aq}, \& \*(Aqwrap\*(Aq=>$self\->{options}{\*(Aqwrap\*(Aq}); \& return $text; \& } .Ve .PP Im neuen Modul Dia ist ein weiteres einfaches Beispiel, das nur einige Zeichenketten filtert. .SS "ÄNDERN \s-1VON KENNZEICHENTYPEN\s0 (\s-1ZU ERLEDIGEN\s0)" .IX Subsection "ÄNDERN VON KENNZEICHENTYPEN (ZU ERLEDIGEN)" Dies ist ein komplexeres Modul, das aber eine (fast) vollständige Anpassung ermöglicht. Es basiert auf einer Liste von Hashes, von denen jeder das Verhalten eines Markierungstyps definiert. Die Liste sollte sortiert sein, so dass die allgemeinsten Markierungen hinter den konkretesten stehen (zuerst nach den beginnenden und dann nach den endenden Schlüsseln sortiert). Um eine Markierung zu definieren, müssen Sie einen Hash mit den folgenden Schlüsseln erstellen: .IP "\fBbeginning\fR" 4 .IX Item "beginning" gibt den Anfang der Markierung an, nach dem »<« .IP "\fBend\fR" 4 .IX Item "end" gibt das Ende der Markierung an, vor dem »>« .IP "\fBbreaking\fR" 4 .IX Item "breaking" teilt mit, ob dies eine unterbrechende Markierungsklasse ist. Eine nicht unterbrechende (innenliegende) Markierung ist eine, die nicht als Teil des Inhalts einer anderen Markierung genommen werden kann. Sie kann die Werte false (0), true (1) oder undefiniert annehmen. Falls Sie dies undefiniert lassen, müssen Sie die Funktion f_breaking definieren, die aussagt, ob eine bestimmte Markierung dieser Klasse eine unterbrechende Markierung ist oder nicht. .IP "\fBf_breaking\fR" 4 .IX Item "f_breaking" Es ist eine Funktion, die mitteilen wird, ob die nächste Markierung unterbrechend ist oder nicht. Sie sollte definiert sein, wenn die Option \fBbreaking\fR nicht definiert ist. .IP "\fBf_extract\fR" 4 .IX Item "f_extract" Falls Sie diesen Schlüssel undefiniert lassen, muss die generische Extrahierfunktion die Markierung selbst extrahieren. Das ist nützlich für Markierungen, die andere Markierungen oder besondere Strukturen beinhalten können, so dass der Haupt-Parser nicht durchdreht. Diese Funktion bekommt einen logischen Wert, der aussagt, ob die Markierung aus dem Eingabedatenstrom entfernt werden soll oder nicht. .IP "\fBf_translate\fR" 4 .IX Item "f_translate" Diese Funktion erhält die Markierung (im Format \fBget_string_until()\fR) und gibt die übersetzte Markierung (übersetzte Attribute oder alle nötigen Umbildungen) als eine einzelne Zeichenkette zurück. .SH "INTERNE FUNKTIONEN, die zum Schreiben abgeleiteter Parser verwendet werden" .IX Header "INTERNE FUNKTIONEN, die zum Schreiben abgeleiteter Parser verwendet werden" .SS "\s-1ARBEITEN MIT KENNZEICHEN\s0" .IX Subsection "ARBEITEN MIT KENNZEICHEN" .IP "\fBget_path()\fR" 4 .IX Item "get_path()" Diese Funktion gibt den Pfad zur aktuellen Markierung von der Wurzel des Dokuments in der Form <html><body><p> zurück. .Sp Ein zusätzliches Feld von Markierungen (ohne Klammern) kann als Argument übergeben werden. Diese Pfadelemente werden am Ende des aktuellen Pfades hinzugefügt. .IP "\fBtag_type()\fR" 4 .IX Item "tag_type()" Diese Funktion gibt den Index der Liste tag_types zurück, die zur nächsten Markierung des Eingabedatenstroms passt oder \-1, falls es am Ende der Eingabedatei liegt. .Sp Hier hat die Markierung eine Struktur, die mit < beginnt und > endet und mehrere Zeilen enthalten kann. .Sp Dies funktioniert auf dem Feld \f(CW\*(C`@{$self\->{TT}{doc_in}}\*(C'\fR, das Eingabedokumentdaten und indirekt mittels \f(CW\*(C`$self\->shiftline()\*(C'\fR und \f(CW\*(C`$self\->unshiftline($$)\*(C'\fR Referenzen enthält. .IP "extract_tag($$)" 4 .IX Item "extract_tag($$)" Diese Funktion gibt die nächste Markierung des Eingabedatenstroms ohne Anfang und Ende in Form eines Feldes zurück, um die Referenzen der Eingabedatei zu verwalten. Sie hat zwei Parameter: den Typ der Markierung (wie er von tag_type zurückgegeben wird) und einen logischen Wert, der angibt, ob die Markierung aus dem Eingabedatenstrom entfernt werden soll. .Sp Dies funktioniert auf dem Feld \f(CW\*(C`@{$self\->{TT}{doc_in}}\*(C'\fR, das Eingabedokumentdaten und indirekt mittels \f(CW\*(C`$self\->shiftline()\*(C'\fR und \f(CW\*(C`$self\->unshiftline($$)\*(C'\fR Referenzen enthält. .IP "get_tag_name(@)" 4 .IX Item "get_tag_name(@)" Diese Funktion gibt den Namen der als Argument übergebenen Markierung in der Form eines durch extract_tag zurückgegebenen Feldes zurück. .IP "\fBbreaking_tag()\fR" 4 .IX Item "breaking_tag()" Diese Funktion gibt einen logischen Wert zurück, der angibt, ob die nächste Markierung im Eingabedatenstrom eine unterbrechende Markierung ist oder nicht (innenliegende Markierung). Sie läßt den Eingabedatenstrom intakt. .IP "\fBtreat_tag()\fR" 4 .IX Item "treat_tag()" Diese Funktion übersetzt die nächste Markierung des Eingabedatenstroms. Dabei benutzt sie die angepassten Übersetzungsfunktionen jedes Markierungstyps. .Sp Dies funktioniert auf dem Feld \f(CW\*(C`@{$self\->{TT}{doc_in}}\*(C'\fR, das Eingabedokumentdaten und indirekt mittels \f(CW\*(C`$self\->shiftline()\*(C'\fR und \f(CW\*(C`$self\->unshiftline($$)\*(C'\fR Referenzen enthält. .IP "tag_in_list($@)" 4 .IX Item "tag_in_list($@)" Diese Funktion gibt eine Zeichenkette zurück, die angibt, ob das erste Argument (eine Markierungshierarchie) zu einem der Markierungen des zweiten Arguments passt (eine Liste von Markierungen oder Markierungshierarchien). Falls es nicht passt, gibt sie 0 zurück. Ansonsten gibt sie die Optionen der passenden Markierung zurück (die Zeichen an Anfang der Markierung) oder 1 (falls die Markierung keine Optionen hat). .SS "\s-1MIT ATTRIBUTEN ARBEITEN\s0" .IX Subsection "MIT ATTRIBUTEN ARBEITEN" .IP "treat_attributes(@)" 4 .IX Item "treat_attributes(@)" Diese Funktion handhabt die Übersetzung der Attribute von Markierungen. Sie erhält die Markierung ohne die Anfangs\-/Endmarkierungen, sucht dann die Attribute und übersetzt die, die übersetzbar sind (angegeben durch die Moduloption \fBattributes\fR). Dies gibt eine einfache Zeichenkette mit der übersetzten Markierung zurück. .SS "\s-1ARBEITEN MIT MARKIERTEN INHALTEN\s0" .IX Subsection "ARBEITEN MIT MARKIERTEN INHALTEN" .IP "\fBtreat_content()\fR" 4 .IX Item "treat_content()" Diese Funktion erhält Text aus dem Eingabedatenstrom bis zur nächsten unterbrechenden Markierung (nicht innenliegende). Übersetzen Sie ihn mittels der angepassten Übersetzungsfunktionen jedes Markierungstyps. .Sp Dies funktioniert auf dem Feld \f(CW\*(C`@{$self\->{TT}{doc_in}}\*(C'\fR, das Eingabedokumentdaten und indirekt mittels \f(CW\*(C`$self\->shiftline()\*(C'\fR und \f(CW\*(C`$self\->unshiftline($$)\*(C'\fR Referenzen enthält. .SS "\s-1MIT DEN MODULOPTIONEN ARBEITEN\s0" .IX Subsection "MIT DEN MODULOPTIONEN ARBEITEN" .IP "\fBtreat_options()\fR" 4 .IX Item "treat_options()" Diese Funktion füllt die internen Strukturen, die die Markierung, Attribute und innenliegenden Daten enthalten, mit den Optionen des Moduls (angegeben auf der Befehlszeile oder in der Initialisierungsfunktion). .SS "\s-1TEXT AUS DEM EINGABEDOKUMENT ERHALTEN\s0" .IX Subsection "TEXT AUS DEM EINGABEDOKUMENT ERHALTEN" .IP "get_string_until($%)" 4 .IX Item "get_string_until($%)" Diese Funktion gibt ein Feld mit den Zeilen (und Referenzen) vom Eingabedokument zurück, bis es das erste Argument findet. Das zweite Argument ist ein Options-Hash. Der Wert 0 bedeutet »deaktiviert« (die Vorgabe) und 1 »aktiviert«. .Sp Die gültigen Optionen sind: .RS 4 .IP "\fBinclude\fR" 4 .IX Item "include" Dies sorgt dafür, dass das zurückgegebene Feld den gesuchten Text erhält. .IP "\fBremove\fR" 4 .IX Item "remove" Dies entfernt den zurückgegebenen Datenstrom aus der Eingabe. .IP "\fBunquoted\fR" 4 .IX Item "unquoted" Dies stellt sicher, dass der gesuchte Text außerhalb irgendwelcher Anführungszeichen steht. .IP "\fBRegAus\fR" 4 .IX Item "RegAus" Dies zeigt an, dass das erste Argument ein regulärer Ausdruck statt einer einfachen Zeichenkette ist. .RE .RS 4 .RE .IP "skip_spaces(\e@)" 4 .IX Item "skip_spaces(@)" Diese Funktion erhält als Argument die Referenz eines Absatzes (im Format, das von get_string_until zurückgegeben wird), überspringt dessen führende Leerzeichen und gibt sie als einfache Zeichenkette zurück. .IP "join_lines(@)" 4 .IX Item "join_lines(@)" Diese Funktion liefert eine einfache Zeichenkette mit dem Text aus dem Argument-Feld (die Referenzen werden weggelassen). .SH "STATUS DIESES MODULS" .IX Header "STATUS DIESES MODULS" Dieses Modul kann Markierungen und Attribute übersetzen. .SH "TODO-LISTE" .IX Header "TODO-LISTE" \&\s-1DOKUMENTENART\s0 (ENTITÄTEN) .PP Es gibt dort eine minimale Unterstützung für die Übersetzung vom Instanzen. Sie werden als Ganzes übersetzt und Markierungen werden nicht berücksichtigt. Mehrzeilige Entitäten werden nicht unterstützt und Entitäten werden während der Übersetzung immer neu umgebrochen. .PP \&\s-1KENNZEICHENTYPEN VON GEERBTEN MODULEN\s0 (die Struktur tag_types innerhalb des Hashs \f(CW$self\fR verschieben?) .SH "SIEHE AUCH" .IX Header "SIEHE AUCH" \&\fBLocale::Po4a::TransTractor\fR\|(3pm), \fBpo4a\fR\|(7) .SH "AUTOREN" .IX Header "AUTOREN" .Vb 2 \& Jordi Vilalta <jvprat@gmail.com> \& Nicolas François <nicolas.francois@centraliens.net> .Ve .SH "URHEBERRECHT UND LIZENZ" .IX Header "URHEBERRECHT UND LIZENZ" .Vb 2 \& Copyright © 2004 Jordi Vilalta <jvprat@gmail.com> \& Copyright © 2008\-2009 Nicolas François <nicolas.francois@centraliens.net> .Ve .PP Dieses Programm ist freie Software; Sie können es unter den Bedingungen der \s-1GPL\s0 (siehe die Datei \s-1COPYING\s0) vertreiben und/oder verändern.