Dies ist der Befehl mp4h, der im kostenlosen OnWorks-Hosting-Provider über eine unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, Windows-Online-Emulator oder MAC OS-Online-Emulator ausgeführt werden kann
PROGRAMM:
NAME/FUNKTION
mp4h - Makroprozessor für HTML-Dokumente
VERSION
Diese Dokumentation beschreibt die mp4h-Version 1.3.1.
EINFÜHRUNG
Die mp4h Software ist ein Makroprozessor, der speziell für den Umgang mit HTML-Dokumenten entwickelt wurde.
Es ermöglicht leistungsstarke Programmierkonstrukte mit einer Syntax, die HTML-Autoren vertraut ist.
Diese Software basiert auf Meta-HTML "http://www.metahtml.org/>", geschrieben von Brian J.
Fox, Auch wenn beide Syntaxen ähnlich aussehen, ist der Quellcode völlig unterschiedlich. In der Tat, a
Teilmenge von Meta-HTML als Teil eines komplexeren Programms verwendet wurde, WML (Website-Meta
Sprache "http://www.thewml.org/>") geschrieben von Ralf S. Engelschall und die ich
Pflege seit Januar 1999. Aus lizenzrechtlichen Gründen schwer zu hacken Meta-HTML und so
Ich beschloss, meinen eigenen Makroprozessor zu schreiben.
Anstatt es von Grund auf neu zu schreiben, habe ich es vorgezogen, eine andere Makroprozessor-Engine zu verwenden. ich
wählte GNU m4 "http://www.gnu.org/software/m4/>", geschrieben von Rene Seindal, wegen
seine zahlreichen Vorteile: Diese Software ist stabil, robust und sehr gut dokumentiert. Dies
Version von mp4h ist abgeleitet von GNU m4 Version 1.4n, eine Entwicklungsversion.
Die mp4h Software ist kein HTML-Editor; Sein einzigartiges Ziel ist es, eine einfache Möglichkeit zu bieten,
eigene Makros in HTML-Dokumenten definieren. Es ist nicht geplant, Funktionen hinzuzufügen
automatisch gültige HTML-Dokumente erstellen, wenn Sie Ihren Code bereinigen oder validieren möchten
verwenden Sie einfach einen Postprozessor wie ordentlich "http://www.w3.org/People/Raggett/tidy/>".
COMMAND LINE OPTIONAL
Optionale Argumente werden in eckige Klammern eingeschlossen. Alle Optionssynonyme haben a
ähnliche Syntax, also wenn eine lange Option ein Argument akzeptiert, tut dies auch die kurze Option.
Syntaxaufruf ist
mp4h [Optionen] [Dateiname [Dateiname] ...]
Die Optionen werden unten beschrieben. Wenn kein Dateiname angegeben ist oder sein Name "-" ist, dann
Zeichen werden bei der Standardeingabe gelesen.
Produktion Modi
--help eine Hilfemeldung anzeigen und beenden
--Version Möglichkeiten für das Ausgangssignal: mp4h Versionsinformationen und Beenden
-E --tödliche-Warnungen Ausführung nach erster Warnung stoppen
-Q --ruhig --Leise einige Warnungen für Builtins unterdrücken
-S --safety-level="NUMMER" riskante Funktionen deaktivieren; 0 bedeutet keine Filterung, 1 deaktiviert
"execute" und 2 deaktivieren auch dieses plus alle dateisystembezogenen Funktionen: "file-exists",
"real-path", "get-file-properties", "directory-contents" und "include".
Präprozessor Funktionen
-I --include="VERZEICHNIS" Dieses Verzeichnis nach Includes und Paketen durchsuchen
-D --define="NAME"[=WERT]"" setze die Variable NAME auf VALUE oder leer
-U --undefine="BEFEHL" eingebauten BEFEHL löschen
-s --synclines `#line NO "FILE"' Zeilen generieren
Parser Funktionen
-c --caseless="NUMMER" Stellen Sie die Groß-/Kleinschreibung entsprechend den Bits von "NUMBER" ein. Eine Null
bit bedeutet, dass beim Symbol die Groß-/Kleinschreibung beachtet wird und die Bits wie folgt definiert sind: 0 für Tags, 1 für
Variablen und 2 für Entitäten. Der Standardwert ist 3, dh nur Entitäten berücksichtigen die Groß-/Kleinschreibung.
-e --encoding="NAME" Dokumentcodierung angeben. Gültige Optionen sind `8bit' (Standard) oder
`utf8'.
-X --expansion="NUMMER" setze das Parser-Verhalten entsprechend den Bits von "NUMBER"
NUMBER ist eine Kombination aus
1 Analysieren Sie keine unbekannten Tags
2 Unbekannte Tags werden als einfach angenommen
4 nachgestellter Stern im Tag-Namen macht dieses Tag nicht einfach
8 Ein nicht übereinstimmendes End-Tag schließt alle vorherigen nicht übereinstimmenden Anfangs-Tags
16 interpretiere Backslashes als printf
32 Entfernen Sie den abschließenden Schrägstrich in den Tag-Attributen
64 Entfernen Sie keinen nachgestellten Stern im Tag-Namen
128 führenden Stern im Tag-Namen nicht entfernen
256 Fügen Sie kein Leerzeichen vor dem abschließenden Schrägstrich in Tag-Attributen hinzu
1024 Warnungen über fehlerhafte verschachtelte Tags unterdrücken
2048 Warnungen über fehlenden abschließenden Schrägstrich unterdrücken
In Version 1.3.1 ist der Standardwert 3114=2+8+32+1024+2048.
Limits Smartgeräte App
-H --hashsize="PRIME" Hash-Tabellengröße für die Symbolsuche festlegen (Standard 509)
-L -nesting-limit="NUMMER" künstliches Verschachtelungslimit ändern (Standard 250)
Fehlerbeseitigung
-d --debug="FLAGS" Debug-Level setzen (keine FLAGS impliziert 'aeq')
-t --trace="NAME" Trace NAME, wenn es definiert wird
-l --arglength="NUMMER" Beschränken Sie die Makro-Tracing-Größe
-o --error-output="DATEI" Debug- und Trace-Ausgabe umleiten
Flaggen sind:
t Trace für alle Makroaufrufe, nicht nur Debugging-on'ed
a zeige tatsächliche Argumente
e Erweiterung anzeigen
c vor Abholung, nach Abholung und nach Anruf anzeigen
x Fügen Sie eine eindeutige Makroaufruf-ID hinzu, die mit dem c-Flag nützlich ist
f aktuellen Eingabedateinamen sagen
l Sagen Sie die aktuelle Eingabezeilennummer
p Ergebnisse der Pfadsuche anzeigen
m Ergebnisse der Moduloperationen anzeigen
i Änderungen in Eingabedateien anzeigen
V Abkürzung für alle oben genannten Flaggen
BESCHREIBUNG
Die mp4h Software ist ein Makroprozessor, was bedeutet, dass Schlüsselwörter durch andere ersetzt werden
Text. Dieses Kapitel beschreibt alle Primitive. Wie mp4h wurde speziell entwickelt für
HTML-Dokumente, ihre Syntax ist HTML sehr ähnlich, mit Tags und Attributen. Eins
wichtige Funktion hat in HTML keine Entsprechung: Kommentare bis zum Zeilenende. Alle Texte
folgenden drei Doppelpunkten wird bis zum Zeilenende verworfen, wie
;;; Dies ist ein Kommentar
Funktion Makros
Hinweis: Alle Beispiele in dieser Dokumentation sind verarbeitet durch mp4h mit Erweiterungsfahnen
auf Null gesetzt (siehe eine Beschreibung möglicher Erweiterungsflags am Ende des Dokuments), ist es
warum einfache Tags einen nachgestellten Schrägstrich enthalten. Aber mp4h kann einfache HTML-Dateien mit anderen ausgeben
Erweiterungsfahnen.
Die Definition neuer Tags ist die häufigste Aufgabe von mp4h. Wie bei HTML, Makro
Bei Namen wird die Groß-/Kleinschreibung nicht beachtet, es sei denn, die Option "-c" wird verwendet, um dieses Standardverhalten zu ändern.
In dieser Dokumentation werden nur Kleinbuchstaben verwendet. Es gibt zwei Arten von Tags:
einfach und komplex. Ein einfaches Tag hat die folgende Form:
in der Erwägung, dass ein komplexes Tag wie folgt aussieht:
Körper
Seit Version 0.9.1, mp4h kennt auch die XHTML-Syntax, sodass Ihre Eingabedatei möglicherweise HTML-konform ist
oder XHTML-Syntax. In diesem Handbuch übernehmen wir letzteres, weshalb einfache Tags eine
nachgestellter Schrägstrich in Attributen. Wenn Sie mit dieser Eingabedatei HTML-Dateien erzeugen möchten, müssen Sie
kann entweder ein geeignetes "--expansion"-Flag wählen oder einen Postprozessor wie ordentlich verwenden
"http://www.w3.org/People/Raggett/tidy/>".
Wenn ein einfaches Tag definiert ist durch mp4h, kann es auch geparst werden, wenn der nachgestellte Schrägstrich ist
weggelassen, weil mp4h weiß, dass dieses Tag einfach ist. Aber es ist eine gute Übung, immer
Hängen Sie einen nachgestellten Schrägstrich an einfache Tags an.
In den Makrobeschreibungen unten steht ein Schrägstrich für ein einfaches Tag und ein V-Buchstabe, der
Attribute werden wörtlich (ohne Erweiterung) gelesen (siehe Kapitel zur Makroerweiterung für
weitere Details).
· Definiere-Tag
"Name" „[attributes=wörtlich]“ „[endtag=erforderlich]“ „[whitespace=delete]“
Mit dieser Funktion können Sie Ihre eigenen Tags definieren. Das erste Argument ist der Befehlsname.
Ersetzungstext ist der Funktionsrumpf.
Quelle:
Bar
Ausgang:
Bar
Auch wenn Leerzeichen normalerweise wenig Einfluss auf die HTML-Syntax haben, ist es wichtig zu beachten, dass
Bar
und
Bar
nicht äquivalent sind, enthält die letztere Form zwei Zeilenumbrüche, die im nicht vorhanden waren
ehemalige.
"whitespace=löschen"
Einige Leerzeichen werden im Ersetzungstext unterdrückt, insbesondere alle führenden oder nachgestellten
Leerzeichen und Zeilenumbrüche, die nicht in spitze Klammern eingeschlossen sind.
"endtag=erforderlich"
Definiere ein komplexes Tag
Quelle:
Bar
Ausgang:
Bar
Quelle:
;;;
Körper ist: % Körper
Hier ist es
Ausgang:
Körper ist: Hier ist er
"Attribute=wörtlich"
Standardmäßig werden Attribute erweitert, bevor Text ersetzt wird. Wenn dieses Attribut verwendet wird,
Attribute werden ohne Erweiterung in den Ersetzungstext eingefügt.
Quelle:
quux
Körper: %Ubody
Attribute: %Uattributes
"> Auf geht's
Ausgang:
Körper: Los geht's
Attribute: txt=
· Tag bereitstellen
"Name" „[attributes=wörtlich]“ „[endtag=erforderlich]“ „[whitespace=delete]“
Dieser Befehl ist dem vorherigen ähnlich, außer dass keine Operation ausgeführt wird, wenn dies
Befehl wurde bereits definiert.
· Lasst uns"
"neu=alt"
Kopieren Sie eine Funktion. Dieser Befehl ist nützlich, um eine Makrodefinition zu speichern, bevor Sie sie neu definieren.
Quelle:
eins
zwei
Ausgang:
zwei eins
· undef "S"
"Name"
Löschen Sie eine Befehlsdefinition.
Quelle:
eins
Ausgang:
· Set-Haken
"Name" "[position=vorher|nachher]" "[action=insert|append|replace]"
Text zu einem vordefinierten Makro hinzufügen. Dieser Mechanismus ermöglicht Änderungen an bestehenden Makros
ohne sich um seinen Typ kümmern zu müssen, egal ob er komplex ist oder nicht.
Quelle:
Vor
Nach
Ausgang:
Vorher10
Nach
· Haken "S"
"Name" "[Position=vorher|nachher]"
Aktuelle Hooks eines Makros ausgeben.
Quelle:
Text eingefügt mit position=before: !
Text eingefügt mit position=after: !
Ausgang:
Text eingefügt mit position=before:
Vor!
Text eingefügt mit position=after:
Nach!
· Attribute-Zitat "S"
"%attribute"
Wie %attributes, außer dass "attr=value"-Paare mit doppelten Anführungszeichen gedruckt werden
umgebende Attributwerte, und ein führendes Leerzeichen wird hinzugefügt, wenn Text gedruckt wird.
Quelle:
;;;
%Attribute
/>
Ausgang:
id=Logo src=logo.gif name=Logo alt=Unser Logo
· Attribute-Auszug "S"
"Name1" "[,name2[,name3...]]" "%attribute"
Extrahieren Sie aus %attributes die "attr=value"-Paare für Namen, die mit einem von übereinstimmen name1, name2....
Quelle:
/>
Ausgang:
· Attribute-entferne "S"
"Name1" "[,name2[,name3...]]" "%attribute"
Entfernen Sie aus %attributen die "attr=value"-Paare für Namen, die mit einem von übereinstimmen name1, name2....
Quelle:
/> />
Ausgang:
Hinweis: Die beiden vorherigen Funktionen sind etwas Besonderes, denn im Gegensatz zu allen anderen Makros sind ihre
Expansion keine Gruppe bilden. Dies ist notwendig, um die resultierende Liste von zu analysieren
Attribute.
In diesen beiden Funktionen können Namen von Attributen reguläre Ausdrücke sein. Hauptziel von
Diese Primitive sollen helfen, Makros zu schreiben, die jede Art von Attributen akzeptieren, ohne dass
sie zu deklarieren. Ein kanonisches Beispiel ist
Quelle:
/>
/>
href="/ ">
<href class=web url="http://www.foo.com" name="Willkommen" />
Ausgang:
<a class="web"
href="/http://www.foo.com"> Willkommen
Aber wir wollen jetzt ein Bildattribut hinzufügen. Also dürfen wir schreiben
Quelle:
/>
/>
href="/ ">
/>
src="/ "alt=" " border=0 />
/>
<href class=web url="http://www.foo.com" name="Willkommen" image="foo.png"/>
Ausgang:
<a class="web"
href="/http://www.foo.com">
src="/foo.png" loading="faul" alt="Willkommen" border=0 />
Wir brauchen einen Mechanismus, um es zu sagen mp4h dass sich einige Attribute auf bestimmte HTML-Tags beziehen. EIN
Lösung besteht darin, dem Attribut einen Tag-Namen voranzustellen, zB
Quelle:
/>
/>
href="/ ">
/>
src="/ "alt=" " />
/>
<href a:class=web img:id=logo img:border=1
url="http://www.foo.com" name="Willkommen" image="foo.png" loading="faul" />
Ausgang:
<a a:class="web"
href="/http://www.foo.com">
src="/foo.png" loading="faul" alt="Willkommen" />
Dieses Beispiel zeigt, dass reguläre Ausdrücke innerhalb von Attributnamen verwendet werden können, aber es ist
noch unvollständig, da wir Präfixe aus Attributen entfernen wollen. Eine Lösung ist mit
"subst-in-string", aber es gibt ein eleganteres:
Quelle:
/>
/>
href="/ ">
/>
src="/ "alt=" " />
/>
<href :a:class=web :img:id=logo :img:border=1
url="http://www.foo.com" name="Willkommen" image="foo.png" loading="faul" />
Ausgang:
<a class="web"
href="/http://www.foo.com">
src="/foo.png" loading="faul" alt="Willkommen" />
Wenn Unterausdrücke in regulären Ausdrücken vorkommen, werden diese anstelle des
ganzen Ausdruck. Beachten Sie auch, dass ich einen Doppelpunkt vor das Präfix setze, um sie nicht zu vermischen
mit XML-Namespaces.
Entities
Entitäten sind Makros wie Tags, aber sie nehmen keine Argumente an. Wohingegen
Tags werden normalerweise verwendet, um Text zu markieren, Entitäten enthalten bereits markierten Text. Ebenfalls
Beachten Sie, dass Entitäten im Gegensatz zu Tags standardmäßig zwischen Groß- und Kleinschreibung unterscheiden.
Eine Entität hat die folgende Form:
&Entität;
· Definieren-Entität
"Name"
Mit dieser Funktion können Sie Ihre eigenen Entitäten definieren. Das erste Argument ist der Entitätsname.
Ersetzungstext ist der Funktionsrumpf.
Quelle:
Bar
&foo;
Ausgang:
Bar
Variablen
Variablen sind ein Sonderfall einfacher Tags, da sie keine Attribute akzeptieren. In
Tatsache ist, dass ihre Verwendung unterschiedlich ist, da Variablen Text enthalten, während Makros sich wie
Betreiber. Ein nettes Feature bezüglich Variablen ist ihre Manipulation als Arrays. In der Tat
Variablen können wie durch Zeilenumbrüche getrennte Listen betrachtet werden, was mächtige
Manipulationsfunktionen, wie wir weiter unten sehen werden.
· set-var "S"
"Name[=Wert]" "[Name[=Wert]] ... "
Dieser Befehl setzt Variablen.
· set-var-wörtlich "S""V"
"Name[=Wert]" "[Name[=Wert]] ... "
Wie oben, aber Attribute werden wörtlich gelesen.
· set-var-x
"name=Variablennamen"
Dieser Befehl weist einer Variablen den Wert des Hauptteils des Befehls zu. Das ist besonders
nützlich, wenn Variablenwerte Zeilenumbrüche und/oder Anführungszeichen enthalten.
Beachten Sie, dass die Variable mit diesem Befehl nicht indiziert werden kann. Beachten Sie auch, dass dieser Befehl
verhält sich wie set-var-wörtlich: Der Rumpf wird erst erweitert, wenn die Variable mit angezeigt wird
get-var.
· get-var "S"
"Name" "[Name] ... "
Variableninhalte anzeigen. Wenn ein numerischer Wert in eckigen Klammern an a . angehängt wird
Variablenname, repräsentiert den Index eines Arrays. Der erste Index von Arrays ist 0 mal
Konvention.
Quelle:
Dies ist die Version
Betriebssystem ist
" "
Ausgang:
Dies ist Version 0.10.1
Betriebssystem ist
"Linux
"
Quelle:
<set-var foo="0
1
2
3 "/>
Ausgang:
200
1
2
3
· get-var-once "S""V"
"Name" "[Name] ... "
Wie oben, aber Attribute werden nicht erweitert.
Quelle:
0.10.1
" /> ;;;
Hier ist die Version
" /> ;;;
Hier ist die Version
" /> ;;;
Hier ist die Version
Ausgang:
Hier ist Version 0.10.1
Hier ist Version 0.10.1
Hier ist die Version
· "S" bewahren
"Name" "[Name] ... "
Alle Variablen sind global, es gibt keinen Variablen- oder Makrobereich. Aus diesem Grund ist ein Stapel
verwendet, um Variablen zu erhalten. Wenn dieser Befehl aufgerufen wird, sind Argumente Namen von
Variablen, deren Werte ganz oben auf dem Stack abgelegt und Variablen auf an . zurückgesetzt werden
leerer String.
· "S" wiederherstellen
"Name" "[Name] ... "
Das Gegenteil ist der Fall: Argumente sind Namen von Variablen, die auf den gefundenen Wert gesetzt werden
an der Spitze des Stapels, und der Stapel wird heruntergeklappt.
Hinweis: Das "preserve"-Tag schiebt zuerst sein letztes Argument, während "restore" zuerst sein
erstes Argument.
Quelle:
Innen: src= name= text=
Vorher: src= name= text=
Nachher: src= name= text=
Ausgang:
Vorher: src=foo.png name= text=Hallo Welt!
Innen: src=bar name=quux text=
Nachher: src=foo.png name= text=Hallo Welt!
· unset-var "S"
"Name" "[Name] ... "
Undefiniere Variablen.
· var-existiert "S"
"Name"
Gibt "true" zurück, wenn diese Variable vorhanden ist.
· Schritte"
"Name" "[von=Wert]"
Erhöhen Sie die Variable, deren Name das erste Argument ist. Das Standardinkrement ist eins.
"von=Wert"
Erhöhungsbetrag ändern.
Quelle:
Ausgang:
10
11
8
· "S" dekrementieren
"Name" "[von=Wert]"
Dekrementieren Sie die Variable, deren Name das erste Argument ist. Standarddekrement ist eins.
"von=Wert"
Dekrementbetrag ändern.
Quelle:
Ausgang:
10
9
6
· Kopiervariable "S"
"src" "Ziel"
Kopieren Sie eine Variable in eine andere.
Quelle:
Ausgang:
10
· Defvar "S"
"Name" "Wert"
Wenn diese Variable nicht definiert ist oder als leerer String definiert ist, wird sie auf den . gesetzt
zweite Argumentation.
Quelle:
Ausgang:
Titel
Titel
· Symbol-Info "S"
"Name"
Informationen zu Symbolen anzeigen. Wenn es sich um einen Variablennamen handelt, wird das Wort "STRING" gedruckt als
sowie die Anzahl der Zeilen, die in dieser Variablen enthalten sind.
Handelt es sich um einen Makronamen, wird eine der folgenden Meldungen ausgegeben: "PRIM COMPLEX", "PRIM
TAG", "USER COMPLEX" oder "USER TAG"
Quelle:
<set-var x="0\n1\n2\n3\n4" />
Bar
quux
Ausgang:
STRING
5
PRIM-TAG
PRIM-KOMPLEX
BENUTZERTAG
BENUTZERKOMPLEX
Schnur Funktionen
· Saitenlänge "S"
"Schnur"
Gibt die Länge des Strings aus.
Quelle:
<set-var foo="0
1
2
3" />;;;
/>
;;;
/> />;;;
Ausgang:
7
7
· Koffer "S"
"Schnur"
In Kleinbuchstaben umwandeln.
Quelle:
Ausgang:
funktioniert es?
· Großbuchstaben "S"
"Schnur"
In Großbuchstaben umwandeln.
Quelle:
Ausgang:
FUNKTIONIERT ES?
· "S" groß schreiben
"Schnur"
In einen Titel umwandeln, mit einem Großbuchstaben am Anfang jedes Wortes.
Quelle:
Ausgang:
Funktioniert es?
· Teilzeichenfolge "S"
"Schnur" "[Anfang [Ende]]"
Extrahiert eine Teilzeichenfolge aus einer Zeichenfolge. Erstes Argument ist Originalstring, zweites und drittes
sind jeweils Start- und Endindizes. Konventionsgemäß hat das erste Zeichen einen Nullindex.
Quelle:
4 />
4 6 />
Ausgang:
efghijk
ef
· String-Eq "S"
"Zeichenfolge1" "Zeichenfolge2" "[caseless=true]"
Gibt "true" zurück, wenn die ersten beiden Argumente gleich sind.
Quelle:
1:
2:
Ausgang:
1:
2: wahr
"caseless=true"
Beim Vergleich wird die Groß-/Kleinschreibung nicht beachtet.
Quelle:
1:
2:
Ausgang:
1: wahr
2: wahr
· String-Neq "S"
"Zeichenfolge1" "Zeichenfolge2" "[caseless=true]"
Gibt "true" zurück, wenn die ersten beiden Argumente nicht gleich sind.
Quelle:
1:
2:
Ausgang:
1: wahr
2:
"caseless=true"
Beim Vergleich wird die Groß-/Kleinschreibung nicht beachtet.
Quelle:
1:
2:
Ausgang:
1:
2:
· String-Vergleich "S"
"Zeichenfolge1" "Zeichenfolge2" "[caseless=true]"
Vergleicht zwei Strings und gibt einen der Werte kleiner, größer oder gleich zurück, je nachdem
dieser Vergleich.
Quelle:
1:
2:
Ausgang:
1: weniger
2: gleich
"caseless=true"
Beim Vergleich wird die Groß-/Kleinschreibung nicht beachtet.
Quelle:
1:
Ausgang:
1: gleich
· Zeichen-Offsets "S"
"Schnur" "Charakter" "[caseless=true]"
Gibt ein Array aus, das Indizes enthält, in denen das Zeichen in der Zeichenfolge erscheint.
"caseless=true"
Beim Vergleich wird die Groß-/Kleinschreibung nicht beachtet.
Quelle:
1:
2:
Ausgang:
1:0
8
2:0
4
8
· druckf "S"
"Format" "Schnur" "[Schnur ...]"
Druckt in einem bestimmten Format. Derzeit wird nur das Flag-Zeichen %s erkannt,
und die Erweiterung "$" wird unterstützt, um die Reihenfolge der Argumente zu ändern.
Quelle:
1:
2:
Ausgang:
1: foo baz bar 10
2:foo 10 bar baz
Normale Ausdrücke
Unterstützung für reguläre Ausdrücke wird durch die PCRE (Perl Compatible Regular Expressions) bereitgestellt.
Bibliothekspaket, bei dem es sich um Open-Source-Software handelt, das Copyright liegt bei der University of Cambridge.
Dies ist eine sehr schöne Software, die neuesten Versionen sind verfügbar unter
"ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/>".
Vor Version 1.0.6 wurden reguläre POSIX-Ausdrücke implementiert. Aus diesem Grund ist die
Die folgenden Makros erkennen zwei Attribute, "caseless=true" und "singleline=true|false".
Aber Perl erlaubt eine viel bessere Kontrolle über reguläre Ausdrücke mit sogenannten Modifikatoren,
die dem neuen Attribut "reflags" zugeordnet werden. Es kann einen oder mehrere Modifikatoren enthalten:
i Beim Abgleich wird die Groß-/Kleinschreibung nicht beachtet
m Behandeln Sie die Zeichenfolge als mehrere Zeilen. Wenn festgelegt, entspricht ein "^" jedem Zeilenanfang und "$"
jedes Zeilenende. Standardmäßig stimmen sie mit Beginn und Ende einer Zeichenfolge überein.
s Behandeln Sie die Zeichenfolge als einzelne Zeile. Ein Punkt (".") kann auch mit einem Zeilenumbruch übereinstimmen, während dies nicht der Fall ist
standardmäßig.
x Erlaube formatierten regulären Ausdruck, d.h. Leerzeichen, Zeilenumbrüche und Kommentare sind
vor der Verarbeitung aus dem regulären Ausdruck entfernt.
Hinweis: Das Attribut "singleline=true" ist ein Synonym für den Modifikator "s", während
"singleline=false" ist ein Synonym für den Modifikator "m". Dieses Verhalten war anders bis
mp4h 1.0.6
· Subst-in-String "S"
"Schnur" "regexp" "[Ersatz]" "[caseless=true]" "[singleline=true|false]"
"[reflags=[imsx]]"
Ersetzen Sie einen regulären Ausdruck in einem String durch einen Ersetzungstext.
Quelle:
"[ce]" />
"([ce])" "\\1 " />
Ausgang:
abfghijk
abc de fghijk
Quelle:
".$" "" />
".$" "" singleline=false />
"
([ac]) | [0-9]
" ":\\1:" reflags=x />
Ausgang:
abcdefghijk
abcdefghijk
abcdefghij
abcdefghij
abcdefghij
abcdefghij
:a::b::c:defghijk
:a::b::c:defghijk
:a::b::c:defghijk
· subst-in-var "S"
"Name" "regexp" "[Ersatz]" "[caseless=true]" "[singleline=true|false]"
"[reflags=[imsx]]"
Führt Ersetzungen innerhalb von variablen Inhalten durch.
· Übereinstimmung mit "S"
"Schnur" "regexp" "[caseless=true]" "[singleline=true|false]" "[reflags=[imsx]]"
"[action=report|extract|delete|startpos|endpos|length]"
"Aktion=Bericht"
Gibt "true" aus, wenn der String regexp enthält.
"Aktion=Auszug"
Gibt den Ausdruck aus, der dem regulären Ausdruck in einer Zeichenfolge entspricht.
"Aktion=Löschen"
Gibt die Zeichenfolge ohne den Ausdruck aus, der mit regexp in string übereinstimmt.
"action=startpos"
Gibt das erste Zeichen des Ausdrucks aus, der dem Regexp in string entspricht. Wenn es keine gibt
übereinstimmen, gibt "-1" zurück.
"action=endpos"
Gibt das letzte Zeichen des Ausdrucks aus, der dem Regexp in string entspricht. Wenn es keine gibt
übereinstimmen, gibt "-1" zurück.
"Aktion=Länge"
Gibt die Länge des Ausdrucks aus, der dem Regexp in string entspricht.
Quelle:
1:
2:
3:
4:
5:
6:
Ausgang:
1: wahr
2:cde
3:abfghijk
4:2
5:5
6:3
Arrays
Mit mp4h man kann leicht mit String-Arrays umgehen. Variablen können als eine einzelne behandelt werden
value oder als durch Zeilenumbrüche getrennte Liste von Strings. Also nach der Definition
<set-var digits="0
1
2
3 "/>
man kann seinen Inhalt oder einen dieser Werte anzeigen:
Quelle:
Ausgang:
0
1
2
3
2
· Array-Größe "S"
"Name"
Gibt eine Array-Größe zurück, die der Anzahl der Zeilen in der Variablen entspricht.
Quelle:
Ausgang:
4
· Array-Push "S"
"Name" "Wert"
Fügen Sie am Ende eines Arrays einen Wert (oder mehr, wenn dieser Wert Zeilenumbrüche enthält) hinzu.
Quelle:
Ausgang:
0
1
2
3
10
11
12
· Array-Pop "S"
"Name"
Entfernt den Toplevel-Wert eines Arrays und gibt diesen String zurück.
· Array-Spitzenwert "S"
"Name"
Gibt den letzten Eintrag eines Arrays aus.
Quelle:
Ausgang:
12
· Array-Add-Unique "S"
"Name" "Wert" "[caseless=true]"
Fügen Sie am Ende eines Arrays einen Wert hinzu, wenn dieser Wert nicht bereits in dieser Variablen vorhanden ist.
Quelle:
Ausgang:
0
1
2
3
10
11
12
"caseless=true"
Beim Vergleich wird die Groß-/Kleinschreibung nicht beachtet.
· Array-Konkat "S"
"Name1" "[Name2] ... "
Verkettet alle Arrays in das erste.
Quelle:
Ausgang:
foo
Bar
· Array-Mitglied "S"
"Name" "Wert" "[caseless=true]"
Wenn der Wert im Array enthalten ist, wird dessen Index zurückgegeben, ansonsten -1.
Quelle:
Ausgang:
5
"caseless=true"
Beim Vergleich wird die Groß-/Kleinschreibung nicht beachtet.
· Array-Shift "S"
"Name" "Versatz" "[start=Anfang]"
Verschiebt ein Array. Wenn Offset negativ ist, gehen Indizes unter 0 verloren. Wenn Offset positiv ist,
erste Indizes werden mit leeren Strings gefüllt.
Quelle:
Jetzt:
Und:
Ausgang:
Jetzt:
0
1
2
3
10
11
12
Und 2
3
10
11
12
"start=Anfang"
Ändern Sie den Ursprung der Schichten (Standard ist 0).
Quelle:
Ausgang:
2
3
12
· Sortierung "S"
"Name" "[caseless=true]" "[numeric=true]" "[sortorder=reverse]"
Sortieren Sie Zeilen eines Arrays an Ort und Stelle. Standardmäßig werden Zeilen alphabetisch sortiert.
Quelle:
Ausgang:
12
2
3
"caseless=true"
Beim Vergleich wird die Groß-/Kleinschreibung nicht beachtet.
"numerisch=wahr"
Zeilen numerisch sortieren
Quelle:
Ausgang:
2
3
12
"sortieren=umkehren"
Sortierreihenfolge umkehren
Quelle:
;;;
Ausgang:
12
3
2
numerisch durch
Diese Operatoren führen grundlegende arithmetische Operationen durch. Wenn alle Operanden ganze Zahlen sind
result ist ebenfalls eine Ganzzahl, ansonsten ist es ein Float. Diese Operatoren sind selbsterklärend.
· fügt hinzu"
"Nummer 1" "Nummer 2" "[Nummer 3] ... "
· "S" abziehen
"Nummer 1" "Nummer 2" "[Nummer 3] ... "
· "S" multiplizieren
"Nummer 1" "Nummer 2" "[Nummer 3] ... "
· "S" teilen
"Nummer 1" "Nummer 2" "[Nummer 3] ... "
· min "S"
"Nummer 1" "Nummer 2" "[Nummer 3] ... "
· max "S"
"Nummer 1" "Nummer 2" "[Nummer 3] ... "
Quelle:
Ausgang:
21
21.000000
Quelle:
/>" /> />
Ausgang:
720
· Modul "S"
"Nummer 1" "Nummer 2"
Im Gegensatz zu den oben aufgeführten Funktionen kann die Modulo-Funktion nicht mehr als 2 Argumente verarbeiten, und
diese Argumente müssen ganze Zahlen sein.
Quelle:
Ausgang:
2
Diese Funktionen vergleichen zwei Zahlen und geben "true" zurück, wenn dieser Vergleich wahr ist. Wenn
Ein Argument ist keine Zahl, der Vergleich ist falsch.
· gt "S"
"Nummer 1" "Nummer 2"
Gibt "true" zurück, wenn das erste Argument größer als das zweite ist.
· lt "S"
"Nummer 1" "Nummer 2"
Gibt "true" zurück, wenn das erste Argument kleiner als das zweite ist.
· Gl. "S"
"Nummer 1" "Nummer 2"
Gibt "true" zurück, wenn die Argumente gleich sind.
· neq "S"
"Nummer 1" "Nummer 2"
Gibt "true" zurück, wenn die Argumente nicht gleich sind.
Relational durch
· nicht "S"
"Schnur"
Gibt "true" zurück, wenn string leer ist, andernfalls wird ein leerer String zurückgegeben.
· und "S"
"Schnur" "[Zeichenfolge] ... "
Gibt das letzte Argument zurück, wenn alle Argumente nicht leer sind.
· oder "S"
"Schnur" "[Zeichenfolge] ... "
Gibt das erste nicht leere Argument zurück.
Flow Funktionen
· Gruppe "S""V"
"Ausdruck" "[Ausdruck] ... " "[trennzeichen=Zeichenfolge]"
Diese Funktion gruppiert mehrere Anweisungen zu einer einzigen. Einige Beispiele werden zu sehen sein
unten mit bedingten Operationen.
Eine weniger intuitive, aber sehr hilfreiche Verwendung dieses Makros besteht darin, Zeilenumbrüche beizubehalten, wenn
"whitespace=delete" ist angegeben.
Quelle:
Text an
3 Zeilen ohne
whitespace=löschen
Text an
3 Zeilen mit
whitespace=löschen
<group "Text on
3 Zeilen mit
whitespace=löschen" />
Ausgang:
Text an
3 Zeilen ohne
whitespace=löschen
Text auf3 Zeilen withwhitespace=delete
Text an
3 Zeilen mit
whitespace=löschen
Beachten Sie, dass Zeilenumbrüche in "text2" unterdrückt werden und das Ergebnis sicherlich unerwünscht ist.
· Verbindung
"Ausdruck" "[Ausdruck] ... " "[trennzeichen=Zeichenfolge]"
Wie "group", aber dieses Tag ist komplex.
"trenner=Schnur"
Standardmäßig werden Argumente beiseite gelegt. Dieses Attribut definiert ein eingefügtes Trennzeichen
zwischen Argumenten.
· "S" trennen
"Ausdruck"
Hat die entgegengesetzte Aufgabe zu "group", wird sein Argument nicht mehr als einzelnes Objekt behandelt, wenn
von einem anderen Befehl verarbeitet.
· noexpand "S""V"
"Befehl" "[Befehl] ... "
Gibt seine Argumente ohne Erweiterung aus. Sie werden niemals erweitert, es sei denn, das "Erweitern"
-Tag wird verwendet, um dieses "noexpand"-Tag aufzuheben.
· "S" erweitern
"Befehl" "[Befehl] ... "
Hebt das "noexpand"-Tag auf.
Quelle:
bar=LT=/define-tag>" "=LT=" "<" />
quux=LT=/define-tag>" "=LT="
" " />
Ausgang:
Bar
quux
Bar
· wenn "S""V"
"Schnur" "dann-Klausel" "[Sonst-Klausel]"
Wenn string nicht leer ist, wird das zweite Argument ausgewertet, andernfalls ist das dritte Argument
bewertet.
Quelle:
Ausgang:
ja
nicht
· ifeq "S""V"
"Zeichenfolge1" "Zeichenfolge2" "dann-Klausel" "[Sonst-Klausel]"
Wenn die ersten beiden Argumente identische Strings sind, wird das dritte Argument ausgewertet, ansonsten das vierte
Argument ausgewertet wird.
· ifneq "S""V"
"Zeichenfolge1" "Zeichenfolge2" "dann-Klausel" "[Sonst-Klausel]"
Wenn die ersten beiden Argumente nicht identische Strings sind, wird das dritte Argument anders ausgewertet
viertes Argument wird ausgewertet.
· Wenn
"Schnur"
Wenn das Argument nicht leer ist, wird sein Hauptteil ausgewertet.
· während "V"
"Bedingung"
Während die Bedingung wahr ist, wird die Körperfunktion ausgewertet.
Quelle:
0 />>;;;
;;;
Ausgang:
10 9 8 7 6 5 4 3 2 1
· für jede
"Variable" "Array" "[start=Anfang]" "[Ende=Ende]" "[Schritt=pass]"
Dieses Makro ähnelt dem "foreach"-Perl-Makro: eine Variable durchläuft eine Schleife über Array-Werte
und Funktionsrumpf wird für jeden Wert ausgewertet.
Das erste Argument ist ein generischer Variablenname und das zweite der Name eines Arrays.
Quelle:
<set-var x="1\n2\n3\n4\n5\n6" />
Ausgang:
1 2 3 4 5 6
"start=Anfang"
Überspringt die ersten Indizes.
Quelle:
<set-var x="1\n2\n3\n4\n5\n6" />
Ausgang:
4 5 6
"ende=Ende"
Stoppt, nachdem der Index diesen Wert erreicht hat.
Quelle:
<set-var x="1\n2\n3\n4\n5\n6" />
Ausgang:
1 2 3
"Schritt=Schritt"
Indexinkrement ändern (Standardwert ist 1). Wenn Schritt negativ ist, wird Array behandelt in
umgekehrte Reihenfolge.
Quelle:
<set-var x="1\n2\n3\n4\n5\n6" />
Ausgang:
1 3 5
6 4 2
· var-case "S""V"
"var1=wert1 Aktion1" "[var2=wert2 Aktion2 ... "
Dieser Befehl führt mehrere Bedingungen mit einer einzigen Anweisung aus.
Quelle:
<var-case
x=1 x />
x=2 x />
y=1 ja />
y=2 ja />
/>
Ausgang:
x1y0
y-1
· geht kaputt"
Unterbricht die innerste "While"-Schleife.
Quelle:
0 />>;;;
;;;
5 />;;;
Ausgang:
+10 9 8 7 6
· kehrt zurück"
"[up=Nummer]" "Schnur"
Dieser Befehl verlässt sofort das innerste Makro. Es kann auch eine Nachricht eingefügt werden.
Aber dieses Makro ändert das Token-Parsing, sodass seine Verwendung in einigen Fällen sehr gefährlich werden kann
Situationen.
"up=Nummer"
Dieses Attribut bestimmt, wie viele Ebenen verlassen werden müssen. Standardmäßig nur einer
Ebene wird übersprungen. Bei einem Nullwert werden alle aktuellen Makros verlassen. Ein Negativ
value tun Sie dasselbe und beenden Sie die Verarbeitung der aktuellen Datei.
· Warnung "S"
"Schnur"
Druckt eine Warnung bei Standardfehlern.
· Ausfahrt "S"
"[status=rc]" "[Nachricht=Zeichenfolge]"
Beendet das Programm sofort.
"Nachricht=Schnur"
Druckt eine Meldung zum Standardfehler.
"status=rc"
Wählt den vom Programm zurückgegebenen Code aus (standardmäßig -1).
· am Ende der Datei
Dies ist ein spezieller Befehl: Sein Inhalt wird gespeichert und nach Eingabeende erweitert.
Reichen Sie das Funktionen
· Verzeichnis-Inhalt "S"
"Dirname" "[matching=regexp]"
Gibt eine durch Zeilenumbrüche getrennte Liste von Dateien zurück, die in einem bestimmten Verzeichnis enthalten sind.
Quelle:
Ausgang:
mp4h.mp4h
· Real-Pfad "S"
"patname=Pfadname"
Löst alle symbolischen Links, zusätzliche ``/''-Zeichen und Verweise auf . auf /./ und /../ in
Pfadname und wird in den resultierenden absoluten Pfadnamen erweitert. Alle außer der letzten Komponente von
pathname muss vorhanden sein, wenn real-path aufgerufen wird.
Dieses Tag ist besonders nützlich, wenn Sie vergleichen, ob Datei- oder Verzeichnisnamen identisch sind.
Quelle:
/>
Ausgang:
/build/mp4h-b0pRnc/mp4h-1.3.1/doc/mp4h.mp4h
· Datei-existiert "S"
"Dateiname"
Gibt "true" zurück, wenn die Datei vorhanden ist.
· Get-Datei-Eigenschaften "S"
"Dateiname"
Gibt ein Array mit Informationen zu dieser Datei zurück. Diese Informationen sind: Größe, Typ, Uhrzeit,
mtime, atime, Eigentümer und Gruppe.
Quelle:
/>
Ausgang:
68603
FILE
1450038844
1450038844
1450038844
Wurzel
Wurzel
· "S" einschließen
"Datei=Dateinamen | Befehl=Befehlszeile" "[alt=Aktion]" "[wörtlich=wahr]"
Fügen Sie den Inhalt einer Datei in das Dateisystem ein - wenn das Attribut "Datei" angegeben ist -, oder
die Ausgabe bei der Ausführung eines Systembefehls - wenn das Attribut "command" angegeben ist - in
den Eingangsstrom. Aus Gründen der Abwärtskompatibilität, wenn weder die "Datei" noch der "Befehl"
Attribute angegeben werden, wird das erste Argument als einzuschließende Datei verwendet.
"Datei=Dateiname"
Die angegebene Datei wird gelesen und in den Eingabestream eingefügt. Dieses Attribut kann nicht sein
kombiniert mit dem Befehlsattribut.
Dateien werden zuerst im aktuellen Verzeichnis gesucht, dann in Verzeichnissen, die auf . angegeben sind
Befehlszeile mit der Option "-I", als nächstes in Verzeichnissen, die in der "MP4HLIB" aufgeführt sind
Umgebungsvariable (früher "MP4HPATH" für Versionen vor 1.3) und letzte
unter dem Ort der Kompilierung ("/usr/local/lib/mp4h/1.3.1:/usr/local/share/mp4h" von
Standard).
"Befehl=Befehlszeile"
Die angegebene Befehlszeile wird auf dem Betriebssystem ausgeführt und die Ausgabe ist
in den Eingabestream eingefügt. Dieses Attribut kann nicht mit der Datei kombiniert werden
Attribut.
Die angegebene Befehlszeile wird ausgeführt mit dem Popen(3) Standard-C-Bibliotheksroutine. Der
Befehl wird mit der Standard-System-Shell ausgeführt, die auf Posix-kompatiblen Systemen
is sh(1).
"alt=Aktion"
Wenn die Datei nicht gefunden wird, wird diese alternative Aktion ausgeführt. Wenn dieses Attribut nicht gesetzt ist
und die Datei nicht gefunden wird, wird ein Fehler ausgegeben. Dieses Attribut hat keine Auswirkung, wenn die
Befehlsattribut ist angegeben.
"wörtlich = wahr"
Der Dateiinhalt ist ohne Erweiterung enthalten. Dies ist vergleichbar mit der Verwendung von m4 nicht ablenken
Makro mit einem Dateinamen als Argument.
Quelle:
Ausgang:
Linux
· Verwendet"
"name=Paket"
Definitionen aus einer Paketdatei laden.
· Kommentar
Dieses Tag tut nichts, sein Körper wird einfach verworfen.
· set-eol-Kommentar "S"
"[Zeichenfolge]"
Kommentarzeichen ändern.
· set-quotes "S"
"[Schnur Zeichenfolge]" "[display=sichtbar]"
Standardmäßig werden alle Zeichen zwischen den Paaren "<@[" und "]@"> ohne Parsing gelesen. Wann
Wird ohne Argument aufgerufen, deaktiviert dieses Makro diese Funktion. Bei Anruf zu zweit
-Argumente definiert es Anfangs- und Endbegrenzer neu. Das Starttrennzeichen muss mit einem Links beginnen.
spitze Klammer und Endbegrenzer müssen mit einer rechtwinkligen Klammer enden.
"anzeigen=sichtbar"
Trennzeichen werden auch in die Ausgabe geschrieben.
Verlegung Funktionen
Umleitungen sind eine Möglichkeit, die Ausgabe vorübergehend zu speichern. Die Ausgabe von mp4h kann jederzeit sein
in eine temporäre Datei umgeleitet und wieder unumgeleitet in den Ausgabestream eingefügt
zu einem späteren Zeitpunkt.
Nummerierte Umleitungen werden von 0 aufwärts gezählt, Umleitungsnummer 0 ist die normale Ausgabe
Strom. Die Anzahl der gleichzeitigen Umleitungen wird hauptsächlich durch den verwendeten Speicher begrenzt
beschreibe sie, denn mp4h versucht, Ablenkungen im Gedächtnis zu behalten. Es gibt jedoch eine Grenze
auf den Gesamtspeicher, der von allen Umleitungen insgesamt verwendet werden kann. Wenn dieses Maximum ist
kurz vor der Überschreitung wird eine temporäre Datei geöffnet, um den Inhalt der größten zu empfangen
Umleitung noch im Speicher, wodurch dieser Speicher für andere Umleitungen freigegeben wird. So ist es
theoretisch möglich, dass die Anzahl der Umleitungen durch die Anzahl der verfügbaren begrenzt wird
Dateideskriptoren.
· Umleitung "S"
"[ divnum=Umleitungsnummer ]"
Die Ausgabe wird mit diesem Tag umgeleitet, wobei Umleitungsnummer die zu verwendende Umleitung ist. Wenn
das Attribut divnum wird weggelassen, umleitungsnummer wird als null angenommen. Wenn die Ausgabe ist
auf eine nicht vorhandene Umleitung umgeleitet, wird sie einfach verworfen. Dies kann verwendet werden, um
unerwünschte Ausgabe unterdrücken. Siehe das Beispiel unten.
Wenn alles mp4h Eingaben werden verarbeitet, alle bestehenden Umleitungen werden automatisch
unumgelenkt, in numerischer Reihenfolge.
Mehrere Rufe von umgeleitet mit dem gleichen Argument überschreiben nicht die vorherigen umgeleiteten
Text, aber an ihn anhängen.
Quelle:
Das wird nirgendwo hingeschickt...
Dies wird ausgegeben.
Ausgang:
Das wird nirgendwo hingeschickt...
Dies wird ausgegeben.
· "S" nicht umlenken
"[ divnum=Umleitungsnummer ]"
Dieses Tag hebt umgeleiteten Text, der in der Umleitung gespeichert wurde, explizit mit dem angegebenen . auf
Nummer. Wenn das Attribut divnum nicht angegeben ist, werden alle Umleitungen nicht umgeleitet, in numerischer Form
Ordnung.
Wenn umgeleiteter Text nicht umgeleitet wird, wird er nicht erneut gelesen von mp4h, sondern direkt kopiert nach
die aktuelle Ausgabe. Es ist daher kein Fehler, auf eine Umleitung umzuleiten.
Im Gegensatz zu m4den mp4h Undivert-Tag lässt keinen Dateinamen als Argument zu. Das gleiche kann sein
wird mit dem Include-Tag mit dem Attribut verbatim="true" erreicht.
Quelle:
Dieser Text wird umgeleitet.
Dieser Text wird nicht umgeleitet.
Ausgang:
Dieser Text wird umgeleitet.
Dieser Text wird nicht umgeleitet.
· divnum "S"
Dieses Tag wird auf die Nummer der aktuellen Umleitung erweitert.
Quelle:
Initial
Umleitung eins:
Umleitung zwei:
Ausgang:
Anfänglich 0
Umleitung eins: 1
Umleitung zwei: 2
Fehlerbeseitigung Funktionen
Wenn Konstrukte komplex werden, kann es schwierig sein, sie zu debuggen. Die unten aufgeführten Funktionen sind
sehr nützlich, wenn Sie nicht herausfinden konnten, was falsch ist. Diese Funktionen sind noch nicht perfekt
und muss in zukünftigen Versionen verbessert werden.
· Funktionsdef. "S"
"Name"
Druckt den Ersetzungstext eines benutzerdefinierten Makros. Zum Beispiel das Makro, das verwendet wurde, um
Alle Beispiele dieser Dokumentation generieren ist
Quelle:
Ausgang:
" ">" /> [^;\n]*\n[ \t]*" "" /> $" "" reflags=m />
Ausgang:
"/>
· Debugmodus "S"
"Schnur"
Dieser Befehl verhält sich wie das Flag "-d", kann aber dynamisch geändert werden.
· Debug-Datei "S"
"Dateiname"
Wählt eine Datei aus, in die Debugging-Nachrichten umgeleitet werden. Wenn dieser Dateiname leer ist,
Debug-Meldungen werden auf Standardfehler zurückgesendet, und wenn es auf "-" gesetzt ist, werden diese Meldungen
werden verworfen.
Hinweis: Es gibt keine Möglichkeit, diese Debugging-Meldungen in das verarbeitete Dokument zu drucken.
· Debugging auf "S"
"Name" "[Name] ... "
Deklarieren Sie diese Makros als verfolgt, dh es werden Informationen zu diesen Makros ausgegeben, wenn "-d"
Flag oder "debugmode" Makro verwendet werden.
· Debugging-off "S"
"Name" "[Name] ... "
Diese Makros werden nicht mehr verfolgt.
Weitere Anwendungsbereiche
· __Datei__ "S"
"[Name]"
Ohne Argument gibt dieses Makro den aktuellen Eingabedateinamen aus. Mit einem Argument, dieses Makro
legt die Zeichenfolge fest, die von einem zukünftigen Aufruf dieses Makros zurückgegeben wird.
· __Linien"
"[Nummer]"
Ohne Argument druckt dieses Makro die aktuelle Zahlenzeile in der Eingabedatei. Mit einem Argument,
Dieses Makro legt die Zahl fest, die von zukünftigen Aufrufen dieses Makros zurückgegeben wird.
Quelle:
Dies ist <__file__/>, Zeile <__line__/>.
Ausgang:
Dies ist ./mp4h.mp4h, Zeile 2201.
Wenn Sie sich den Quellcode genauer ansehen, werden Sie feststellen, dass diese Nummer falsch ist. In der Tat
Nummernzeile ist das Ende des gesamten Blocks, der diese Anweisung enthält.
· __Version__ "S"
Druckt die Version von mp4h.
· dnl "S"
Verwerfen Sie alle Zeichen, bis Newline erreicht ist. Dieses Makro stellt sicher, dass folgende Zeichenfolge
ist ein Kommentar und hängt nicht vom Wert der Kommentarzeichen ab.
Quelle:
Dies ist ein Kommentar
foo
Dies ist ein Kommentar
Bar
Ausgang:
foo
Bar
· Termine"
"[Epoche]"
Gibt die Ortszeit gemäß der übergebenen Epoche aus. Wenn es kein Argument gibt,
die aktuelle Ortszeit wird gedruckt.
"Zeit"
Eine Epochen-Zeitangabe.
"Format"
Eine Formatspezifikation, wie sie mit dem verwendet wird strftime(3) C-Bibliotheksroutine.
Quelle:
/> />
/>
" format="%Y-%m-%d %H:%M:%S" />
Ausgang:
So 13. Dez. 20:34:04 2015
So 13. Dez. 20:34:04 2015
2015-12-13 20:34:04
· Zeitschaltuhr "S"
Gibt die Zeit aus, die seit dem letzten Aufruf dieses Makros vergangen ist. Der gedruckte Wert ist die Anzahl von
Uhr tickt und ist daher von Ihrer CPU abhängig.
Quelle:
Die Anzahl der Takt-Ticks seit Beginn des Parsens von
dieses Beispiel von &mp4h; ist:
Ausgang:
Benutzer 9
System 0
Die Anzahl der Takt-Ticks seit Beginn des Parsens von
dieses Beispiel von mp4h ist:
Benutzer 9
System 0
· mp4h-l10n "S"
"Name=Wert"
Legen Sie gebietsschemaspezifische Variablen fest. Standardmäßig ist das portable Gebietsschema "C" ausgewählt. Wie
Gebietsschemas haben auf verschiedenen Plattformen unterschiedliche Namen, Sie müssen sich auf Ihr System beziehen
Dokumentation, um herauszufinden, welche Werte an Ihr System angepasst sind.
· mp4h-Ausgabe-Radix "S"
"Nummer"
Ändern Sie das Ausgabeformat von Floats, indem Sie die Anzahl der Nachkommastellen festlegen
Punkt. Standardmäßig werden Zahlen im Format "%6.f" gedruckt.
Quelle:
Ausgang:
4.600000
4.60
EXTERNAL PAKETE
Das Einbinden externer Dateien ist mit dem Befehl "include" möglich. Dateien sind zuerst
im aktuellen Verzeichnis gesucht, dann in Verzeichnissen, die auf der Befehlszeile mit dem "-I" angegeben sind
Option, als nächstes in Verzeichnissen, die in der Umgebungsvariablen "MP4HLIB" aufgeführt sind (früher war es
"MP4HPATH" für Versionen vor 1.3) und zuletzt unter dem Ort zur Kompilierzeit
("/usr/local/lib/mp4h/1.3.1:/usr/local/share/mp4h" standardmäßig).
Eine andere Möglichkeit, Pakete einzubinden, ist der Befehl "use". Es gibt zwei Unterschiede
zwischen "use" und "include": Erstens hat der Paketname kein Suffix; und noch wichtiger, a
Paket kann nicht mehr als einmal geladen werden.
MAKRO ERWEITERUNG
Dieser Teil beschreibt den internen Mechanismus der Makroexpansion. Es muss so genau sein und
so erschöpfend wie möglich, also kontaktiere mich "mailto:[E-Mail geschützt] >" falls du welche hast
Vorschlag.
Basics
Beginnen wir mit einigen Beispielen:
Quelle:
Dies ist ein einfaches Tag
Dies ist ein komplexes Tag
Körperfunktion
Ausgang:
Dies ist ein einfaches Tag
Dies ist ein komplexes Tag
Benutzerdefinierte Makros können Attribute wie HTML-Tags haben. Um diese Attribute in zu handhaben
Ersatztext, folgende Konventionen wurden übernommen (meist abgeleitet von Meta-HTML):
· Sequenz %name wird durch den Befehlsnamen ersetzt.
· Attribute werden ab 0 nummeriert. Im Ersetzungstext wird %0 durch das erste Argument ersetzt,
%1 durch das 2. usw. Da die Anzahl der Argumente nicht begrenzt ist, ist %20 das
21. Argument und nicht das dritte, gefolgt vom Buchstaben 0.
Quelle:
%0
<href http://www.gimp.org "Der Gimp" />
Ausgang:
<a href="/http://www.gimp.org">Der Gimp
· Sequenz "%#" druckt Anzahl von Attributen.
· Sequenz "%%" wird durch "%" ersetzt, was bei verschachtelten Definitionen nützlich ist.
Quelle:
;;;
außen, # Attribute: %#
;;;
inner1, # Attribute: %#;;;
;;;
;;;
inner2, # Attribute: %%#;;;
;;;
Ausgang:
außen, # Attribute: 2
inner1, # Attribute: 2
inner2, # Attribute: 5
· Sequenz %attributes wird durch die durch Leerzeichen getrennte Liste von Attributen ersetzt.
Quelle:
<mail1 name="Dr. Foo" mail="[E-Mail geschützt] "/>
Ausgang:
Foo
[E-Mail geschützt]
· Sequenz %body wird durch den Body eines komplexen Makros ersetzt.
Quelle:
">%Karosserie
<mail2 mail="[E-Mail geschützt] ">
Ausgang:
<a href="/mailto:[E-Mail geschützt] ">
· Die beiden obigen Formen akzeptieren Modifikatoren. Wenn %Aattributes oder %Abody verwendet wird, wird ein Zeilenumbruch
getrennte Liste von Attributen wird gedruckt.
Quelle:
: " />
<show-attributes name="Dr. Foo" mail="[E-Mail geschützt] "/>
Ausgang:
%0: Name=Dr. Foo%1: mail=[E-Mail geschützt]
· Eine andere alternative Form erhält man, indem man "A" durch "U" ersetzt, in diesem Fall ist Text
ersetzt, aber nicht erweitert. Dies ist nur sinnvoll, wenn Makros erstellt wurden
mit "attributes=verbatim" definiert, sonst werden Attribute vorher erweitert
Ersatz.
Quelle:
Vor der Erweiterung: %Uattributes
Nach der Erweiterung: %attribute
Vor der Erweiterung: %Uattributes
Nach der Erweiterung: %attribute
und hier %attribute
/>
/>
Ausgang:
Vor dem Ausbau: und los geht's
Nach dem Ausbau: und los geht's
Vor dem Ausbau:
Nach dem Ausbau: und los geht's
· Modifikatoren "A" und "U" können kombiniert werden.
Hinweis: Die Eingabeerweiterung ist völlig anders in Meta-HTML und im mp4h. Mit Meta-HTML it
ist manchmal notwendig, um andere Konstrukte wie %xbody und %qbody zu verwenden. Um zu
Verbessern Sie die Kompatibilität mit Meta-HTML, diese Konstrukte werden erkannt und interpretiert
wie %body. Ein weiteres Feature aus Kompatibilitätsgründen ist die Tatsache, dass für einfache
Tags %body und %attributes sind gleichwertig. Diese Funktionen sind im aktuellen mp4h Version
kann aber in zukünftigen Versionen verschwinden.
Attribute
Attribute werden durch Leerzeichen, Tabulatoren oder Zeilenumbrüche getrennt, und jedes Attribut muss a
gültig mp4h Entität. Zum Beispiel mit den obigen Definitionen: " "kann nicht ein sein
Attribut, da es mit " ". Aber es gilt:
/>
oder
/>
In diesen Beispielen hat das Tag "foo" nur ein Argument.
Unter Umständen ist es notwendig, mehrere Aussagen zu einer einzigen zusammenzufassen
eins. Dies kann mit doppelten Anführungszeichen oder mit dem Primitiv "Gruppe" erfolgen, zB
<foo "This is the 1st attribute"
/>
Hinweis: Im Gegensatz zu HTML können einfache Anführungszeichen für diesen Zweck keine doppelten Anführungszeichen ersetzen.
Wenn in einem Argument doppelte Anführungszeichen vorkommen, müssen sie durch einen umgekehrten Schrägstrich "\" maskiert werden.
Quelle:
Ausgang:
Text mit doppelten Anführungszeichen " innen
Makro Auswertung
Makros zeichnen sich aus durch
· Name
· Containerstatus (einfach oder komplex)
· ob Attribute erweitert sind oder nicht
· Funktionstyp (primitives oder benutzerdefiniertes Makro)
· für Primitive die Adresse des entsprechenden Codes im Speicher und für benutzerdefinierte Makros die
Ersatztext
Zeichen werden bei der Eingabe gelesen, bis eine linke spitze Klammer gefunden wird. Dann ist der Makroname
lesen. Danach werden Attribute gelesen, wörtlich oder nicht, je nachdem, wie dieses Makro war
definiert. Und wenn dieses Makro komplex ist, wird sein Körper wörtlich gelesen. Wenn das fertig ist,
einige spezielle Sequenzen im Ersetzungstext werden ersetzt (wie %body, %attributes, %0, %1,
usw.) und der resultierende Text wird auf den Eingabestapel gelegt, um erneut gescannt zu werden.
Hinweis: Standardmäßig werden Attribute vor jeder Ersetzung ausgewertet.
Betrachten Sie das folgende Beispiel, um Text in der Schreibmaschinenschriftart zu ändern:
%Karosserie
Diese Definition hat einen großen Nachteil:
Quelle:
Das ist ein Beispiel
Ausgang:
Dies ist ein Beispiel
Wir möchten, dass die inneren Tags entfernt werden.
Die erste Idee besteht darin, eine Hilfsvariable zu verwenden, um zu wissen, ob wir uns noch in einem solchen befinden
Umgebung:
1" " />
%Karosserie
1" " />
(Das Vorhandensein von Sternchen in HTML-Tags wird im nächsten Abschnitt erklärt).
Quelle:
Das ist ein Beispiel
Ausgang:
Dies ist ein Beispiel
Aber wenn wir einfache Tags verwenden, wie im Beispiel unten, scheint unsere Definition nicht zu funktionieren.
Dies liegt daran, dass Attribute erweitert werden, bevor sie in den Ersatztext eingefügt werden.
Quelle:
%Attribute
" />
Ausgang:
Dies ist ein Beispiel
Wenn wir dieses Problem verhindern wollen, müssen wir die Erweiterung von Attributen mit verbieten
Quelle:
;;;
%Attribute ;;;
" />
Ausgang:
Dies ist ein Beispiel
Expansion Fahnen
Wenn Sie eine serverseitige Skriptsprache in Ihre Seiten einbetten möchten, stehen Sie vor einigen
seltsame Probleme, wie in
>Hallo
Die Frage ist, wie mp4h Wissen Sie, dass diese Eingabe einige zusätzliche Trennzeichen hat? Die Antwort ist
zur Abwicklung, Integrierung, Speicherung und mp4h sollte nicht versuchen, einige spezielle Trennzeichen zu verarbeiten, da es nicht alle verarbeiten kann
von ihnen (es gibt ASP, ePerl, PHP, ... und einige von ihnen sind anpassbar). Jetzt erinnern Sie sich
zur Abwicklung, Integrierung, Speicherung und mp4h ist ein Makroprozessor, kein XML-Parser. Wir müssen uns also auf Makros und Formate konzentrieren
unsere Eingabedatei, damit sie problemlos geparst werden kann. Vorheriges Beispiel kann sein
geschrieben
">Hallo
weil Anführungszeichen verhindern, dass die innere rechte eckige Klammer das "a"-Tag schließt.
Ein weiteres häufiges Problem ist, wenn wir nur ein Start- oder nur ein End-Tag drucken müssen. Für
Beispielsweise ist es sehr wünschenswert, eigene Kopf- und Fußzeilen mit zu definieren
... geben Sie hier einige Informationen ein ....
Sternchen kennzeichnen diese Tags als pseudo-einfache Tags, was bedeutet, dass es sich um komplexes HTML handelt
Tags, sondern als einfache Tags innerhalb verwendet mp4h weil Tags sonst nicht gut verschachtelt wären.
Dieses Sternchen wird ``Trailing Star'' genannt, es erscheint am Ende des Tag-Namens.
Manchmal sind HTML-Tags nicht parsbar, wie in diesem Javascript-Code:
...
document.write('<*img src="/foo.gif"');
if (text) document.write(' alt="'+text+'"');
document.write('>');
...
Der „führende Stern“ ist ein Stern zwischen der linken spitzen Klammer und dem Tag-Namen, der
verhindert, dass dieses Tag geparst wird.
Das heißt, wir können jetzt verstehen, wofür das Flag "--expansion" steht. Es steuert wie
Die Erweiterung erfolgt durch mp4h. Es folgt eine Ganzzahl, die eine Bitsumme von ist
folgende Werte
1 analysieren Sie keine unbekannten Tags.
Wenn gesetzt, werden HTML-Tags nicht geparst. Wenn nicht gesetzt, werden HTML-Tags geparst, dh das
Attribute und/oder Körper erhoben werden.
2 Unbekannte Tags werden als einfach angenommen.
Wenn festgelegt, sind HTML-Tags standardmäßig einfach. Wenn nicht gesetzt, sind HTML-Tags komplex von
Standard, es sei denn, ihr Attribut enthält einen nachgestellten Schrägstrich oder einen nachgestellten Stern
nach dem Tag-Namen (siehe unten).
4 ein nachgestellter Stern im Tag-Namen macht dieses Tag nicht einfach.
Wenn festgelegt, hat der nachgestellte Stern im Tag-Namen keine besondere Wirkung. Wenn es nicht gesetzt ist, verursacht es ein
HTML-Tag, um einfach zu sein.
8 ein nicht übereinstimmendes End-Tag schließt alle vorherigen nicht übereinstimmenden Anfangs-Tags.
Wenn gesetzt, werden alle fehlenden schließenden Tags automatisch eingefügt. Wenn nicht gesetzt, ein
Ein nicht übereinstimmendes End-Tag wird verworfen und als normaler Text interpretiert, sodass die Verarbeitung fortgesetzt wird
bis Übereinstimmung und Tag gefunden wird.
16 interpretieren Backslashes als printf.
Wenn gesetzt, werden Backslashes vor Nicht-Sonderzeichen entfernt. Wenn sie nicht gesetzt sind, sind sie es
konserviert.
32 Entfernen Sie den abschließenden Schrägstrich in den Tag-Attributen.
Wenn gesetzt, entfernen Sie den nachgestellten Schrägstrich in den Tag-Attributen bei der Ausgabe. Wenn sie nicht gesetzt sind, sind sie es
konserviert.
64 Entfernen Sie den abschließenden Stern im Tag-Namen nicht.
Wenn festgelegt, wird der nachgestellte Stern nach dem Tag-Namen bei der Ausgabe beibehalten. Wenn sie nicht gesetzt sind, sind sie es
entfernt.
128 Entfernen Sie den führenden Stern im Tag-Namen nicht.
Wenn gesetzt, wird der führende Stern vor dem Tag-Namen bei der Ausgabe beibehalten. Wenn sie nicht gesetzt sind, sind sie es
entfernt.
256 Fügen Sie kein Leerzeichen vor dem abschließenden Schrägstrich in Tag-Attributen hinzu
Standardmäßig wird vor dem abschließenden Schrägstrich in Tag-Attributen ein Leerzeichen eingefügt. Wenn eingestellt, dies
Leerzeichen wird nicht vorangestellt.
1024 Warnungen über schlecht verschachtelte Tags unterdrücken.
Wenn gesetzt, werden Warnungen über schlecht verschachtelte Tags nicht angezeigt. Wenn sie nicht gesetzt sind, sind sie es
auf Standardfehler gedruckt.
2048 Unterdrücken Sie Warnungen über fehlende abschließende Schrägstriche.
Wenn gesetzt, werden Warnungen über fehlende abschließende Schrägstriche nicht angezeigt. Wenn sie nicht gesetzt sind, sind sie es
auf Standardfehler gedruckt.
Führen Sie
mp4h -h
Standardwert zu finden. Der aktuelle Wert stimmt mit der HTML-Syntax überein und tendiert zu Null, wenn
Die XHTML-Syntax wird vertrauter.
Verwenden Sie mp4h online mit den Diensten von onworks.net
