HTML-Zwischenablageformat
Die Anforderungen für die Übertragung von HTML-Text durch die Zwischenablage unterscheiden sich je nach Szenario. Dieser Artikel befasst sich mit dem Schneiden und Einfügen von Fragmenten eines HTML-Dokuments. Möglicherweise gibt es Anforderungen für das Übertragen vollständiger HTML-Dokumente über die Zwischenablage; Dieser Artikel wird jedoch durch eine Anforderung zum Übertragen von Fragmenten des markierten HTML-Texts gesteuert. Daher wird eine Methode, die das gesamte HTML-Dokument benötigt, in die Zwischenablage kopiert werden muss, als zu schwergewichtig betrachtet.
Das CF_HTML Zwischenablageformat ermöglicht ein Fragment unformatierten HTML-Text und dessen Kontext, der in der Zwischenablage als ASCII gespeichert werden kann. Dadurch kann der Kontext des HTML-Fragments, das aus allen vorherigen umgebenden Tags besteht, von einer Anwendung untersucht werden, damit die umgebenden Tags des HTML-Fragments mit ihren Attributen notiert werden können. Obwohl es anwendungen erforderlich ist, zu entscheiden, wie solche Fragmente interpretiert werden, sind einige grundlegende Richtlinien hier basierend auf IE4/MSHTML-Implementierungen enthalten.
Der offizielle Name der Zwischenablage (die Zeichenfolge, die von RegisterClipboardFormat verwendet wird) ist HTML-Format.
BESCHREIBUNG
CF_HTML ist vollständig Textformat (unter anderem im HTML-Geist zu sein und UTF-8 verwendet) und enthält ein description
optionales , ein optionales context
und im Kontext die fragment
.
Nachfolgend sehen Sie ein Beispiel für eine Zwischenablage:
Version:0.9
StartHTML:71
EndHTML:170
StartFragment:140
EndFragment:160
StartSelection:140
EndSelection:160
<!DOCTYPE>
<HTML>
<HEAD>
<TITLE> The HTML Clipboard</TITLE>
<BASE HREF="https://sample/specs">
</HEAD>
<BODY>
<UL>
<!--StartFragment -->
<LI> The Fragment </LI>
<!--EndFragment -->
</UL>
</BODY>
</HTML>
Die Beschreibung enthält die Nummer der Zwischenablageversion und offsets, die angibt, wo der Kontext und das Fragment beginnen und enden. Die Beschreibung ist eine Liste der ASCII-Textstichwörter (min/maj ist nicht sinnvoll), gefolgt von einer Zeichenfolge und getrennt durch einen Doppelpunkt (:)).
Version: Versionsnummer der Zwischenablage. Die Startversion ist 0.9.
StartHTML: Bytecount vom Anfang der Zwischenablage bis zum Anfang des Kontexts oder -1, wenn kein Kontext vorhanden ist.
EndHTML: Bytecount vom Anfang der Zwischenablage bis zum Ende des Kontexts oder -1, wenn kein Kontext vorhanden ist.
StartFragment: Bytecount vom Anfang der Zwischenablage bis zum Anfang des Fragments.
EndFragment: Bytecount vom Anfang der Zwischenablage bis zum Ende des Fragments.
StartSelection: Bytecount vom Anfang der Zwischenablage bis zum Anfang der Auswahl.
EndSelection: Bytecount vom Anfang der Zwischenablage bis zum Ende der Auswahl.
Die Schlüsselwörter "StartSelection" und "EndSelection" sind optional und müssen beide nicht angegeben werden, wenn die Anwendung diese Informationen nicht generieren soll.
Weitere Informationen dieser Art können später hier hinzugefügt werden, da der HTML-Code am StartHTMLoffset beginnt. So könnten beispielsweise mehrere Paare von StartFragment / EndFragment später hinzugefügt werden, um nicht zusammenhängende Auswahl von Fragmenten zu unterstützen.
Für den Komfort der Programme, die die Bytecounts generieren, könnten Bytecounts um Nullen gepolstert werden. Beispielsweise könnten Programme, die die Bytecounts generieren, willkürlich zehn (10) Nullen auf jedes Schlüsselwort (StartHTML: 00000000000) auswirken und dann, wenn der genaue StartHTML-Bytecount bekannt ist (z. B. 71), kann das Programm die entsprechende Anzahl von Nullen durch den Bytecount ersetzen (StartHTML: 0000000071).
Der einzige zeichensatz, der von der Zwischenablage unterstützt wird, ist Unicode in seiner UTF-8-Codierung. Da die ersten Zeichen von UTF-8 und ASCII übereinstimmen, ist die Beschreibung immer ASCII, aber die Bytes des Kontexts (beginnend bei StartHTML) können alle anderen Zeichen verwenden, die in UTF-8 codiert sind.
Das Ende der Zeilen im Zwischenablageformatkopf kann CR oder CR/LF oder LF sein.
Das Fragment enthält reinen, gültigen HTML-Code, der den Bereich darstellt, den der Benutzer ausgewählt hat (z. B. "Kopieren"). Dies enthält den markierten Text sowie die öffnenden Tags und Attribute eines Elements, das ein Endtag innerhalb des markierten Texts enthält, und Endtags am Ende des Fragments für alle enthaltenen Starttags. Dies sind alle Informationen, die für das grundlegende Einfügen eines HTML-Fragments erforderlich sind.
Das Fragment sollte vorangestellt und gefolgt von den HTML-Kommentaren und (kein Leerzeichen zwischen dem !-- und dem Text zulässig) sein, um bequem anzugeben, wo das Fragment beginnt und endet. Daher wird der Anfang und das Ende des Fragments durch die Anwesenheit dieser Kommentare und durch StartFragment- und EndFragment-Byteanzahl in der Beschreibung angegeben. Tools werden erwartet, dass diese Informationen erzeugt werden. Diese Redundanz wurde eingeführt, um den Anfang des Fragments (aus der Byteanzahl) schnell zu finden und die Position des Fragments direkt in der HTML-Struktur zu markieren.
Die Auswahl gibt innerhalb des Fragments den genauen HTML-Bereich an, den der Benutzer ausgewählt hat (z. B. "Kopieren"). Dadurch werden dem Fragment weitere Informationen hinzugefügt, indem der genaue markierte Text angegeben wird, ohne dass die öffnenden Tags und Endtags hinzugefügt wurden, um sicherzustellen, dass das Fragment gut gebildeter HTML-Code ist.
Die Auswahl ist optional, da ausreichende Informationen im Fragment für das grundlegende Einfügen enthalten sind. Wenn die Auswahl nicht gespeichert ist, werden sowohl StartSelection als auch EndSelection nicht in der Kopfzeile gespeichert.
Der Kontext ist ein gültiges, vollständiges HTML-Dokument. Dieser Artikel enthält das Fragment und alle vorangehenden umgebenden Tags (Start- und Endtags; diese vorherigen umgebenden Tags stellen alle übergeordneten Knoten des Fragments dar, bis der HTML-Knoten). Der Artikel enthält auch den vollständigen HEAD und ermöglicht es den BASE- und TITLE-Elementen, z. B. einzufügen, damit diese zusätzlichen Informationen abgerufen werden können. Eine Anwendung, die ein HTML-Fragment in die Zwischenablage kopiert, kann auswählen, ein BASE-Element zu erstellen, das im Kontext enthalten ist, wenn ein solches Element noch nicht vorhanden ist, damit partielle URLs im Fragment aufgelöst werden können.
Der Kontext ist optional, da ausreichende Informationen im Fragment für das grundlegende Einfügen eines HTML-Fragments enthalten sind, das durchgeführt werden soll. Wenn der Kontext nicht gespeichert ist, wird das Fragment nur gespeichert und der StartHTML=EndHTML=-1.
Szenarien
In den folgenden Szenarien wird beschrieben, wie der IE4/MSHTML-HTML-Editor HTML-Ausschneiden und Einfügen behandelt; Andere Anwendungen können diesen Szenarien folgen oder nicht. Das hier beschriebene Zwischenablageformat soll flexibilität für die Funktion einer Anwendung ermöglichen. (Diese Szenarien zeigen nur gutes HTML an, also keine überlappenden Tags.)
Einfaches Fragment von HTML.
-
HTML-Text:
<BODYThis> ist normal This is bold This is bold italic This is kursalic </BODY>
Wird angezeigt als:
Dies ist normal This isboldThis is bold italic This is kursalic This is kursalic
Der Text zwischen dem ** ist markiert und in die Zwischenablage kopiert:
Dies ist normal ThisisboldThis ** ist fett kursiv Thisis** kursiv
Dies ist die Zwischenablage (beachten Sie dies ist die Interpretation von IE4/MSHTML):
Version:0.9
StartHTML:71
EndHTML:160
StartFragment:130
EndFragment:150
StartSelection:130
EndSelection:150
<KÖRPER>
>boldThisist fett kursivThis
</BODY>
</HTML>
In diesem Szenario werden nur das BODY-Tag und das HTML-Tag im Kontext angezeigt, da es dem ausgewählten Fragment vorangeht. Beachten Sie, dass Starttags und Endtags im Kontext enthalten sind. Die Auswahl, wie durch StartSelection und EndSelection getrennt, wird fett dargestellt.
-
Fragment einer Tabelle in HTML.
-
HTML-Text:
<KÖRPER>
</BODY>Kopf1 Element 1 Item 2 Element 3 Artikel 4 Element 5 Element 6 Element 7 Artikel 8 Head2 Element 9 Element 10 Element 11 Element 12 Wird angezeigt als: >
<! [CDATA[]]>Kopf1 Element 1 Item 2 Element 3 Artikel 4 Element 5 Element 6 Element 7 Artikel 8 Head2 Element 9 Element 10 Element 11 Element 12 Die Elemente "Element 6", "Element7", "Element 10" und "Element 11" der Tabelle werden als Block ausgewählt und in die Zwischenablage kopiert.
Dies ist die Zwischenablage (beachten Sie dies ist die Interpretation von IE4/MSHTML):
<HTMLBODY><>
Element 6 Element 7 Element 10 Element 11 </BODY></HTMLThe> selection, as delimited by StartSelection and EndSelection, is shown in bold.
-
Einfügen eines Fragments einer sortierten Liste in nur Text.
-
HTML-Text:
<KÖRPER>
- Element 1
- Item 2
- Element 3
- Artikel 4
- Element 5
- Element 6
Wird angezeigt als:
- Element 1
- Item 2
- Element 3
- Artikel 4
- Element 5
- Element 6
Der Benutzer wählt Elemente 3 bis 5 in die Zwischenablage aus und kopiert sie. Der folgende HTML-Code befindet sich in der Zwischenablage:
<DOCTYPE...>< HTMLBODY><>
- Element 3
- Artikel 4
- Element 5
Die Auswahl, die durch StartSelection und EndSelection getrennt ist, wird fett formatiert angezeigt.
Wenn dieses Fragment jetzt in ein leeres Dokument eingefügt wird, wird der folgende HTML-Code erstellt:
<KÖRPER>
- Element 3
- Artikel 4
- Element 5
Wird angezeigt als:
- Element 3
- Artikel 4
- Element 5
-
Einfügen eines teilweise ausgewählten Bereichs.
-
HTML-Text:
IE4/MSHTML ist ein WYSIWYG-Editor, der Folgendes unterstützt:
- Ausschneiden
- Kopieren
- Einfügen
Dies ist ein großartiges Tool!
Erscheint als:IE4/MSHTML ist ein WYSIWYG-Editor, der Folgendes unterstützt:
-
- Ausschneiden
- Kopieren
- Einfügen
-
Der Benutzer wählt von "WYSIWYG" bis "Cop" aus. Der folgende HTML-Code befindet sich in der Zwischenablage:
<DOCTYPE...>< HTMLBODY><>
WYSIWYG-Editor, der unterstützt
- Ausschneiden
- Cop
</BODY></HTMLThe> selection, as delimited by StartSelection and EndSelection, is shown in bold.
-
-
Der Benutzer wählt aus "opy" bis "Groß".
Der folgende HTML-Code befindet sich in der Zwischenablage:
<DOCTYPE...>< HTMLBODY><>
-
opy
- Einfügen
Dies ist ein Großer
</BODY></HTML>
Die Auswahl, wie durch StartSelection und EndSelection getrennt, wird fett dargestellt.
-