HTML vágólap formátuma
A HTML-szövegek vágólapon történő átvitelének követelményei a forgatókönyvtől függően eltérőek. Ez a cikk egy HTML-dokumentum töredékeinek kivágásával és beillesztésével foglalkozik. A teljes HTML-dokumentumok vágólapon keresztüli átvitelére vonatkozó követelmények lehetnek; ezt a cikket azonban a kijelölt HTML-szövegtöredékek átvitelére vonatkozó követelmény vezérli. Így az a módszer, amely a teljes HTML-dokumentum vágólapra másolását követelte meg, túl nehéznek minősül.
A CF_HTML
vágólap formátuma lehetővé teszi a nyers HTML-szöveg és környezete (azaz külső HTML) töredékének ASCII-ként való tárolását a vágólapon. Ez lehetővé teszi, hogy a HTML-töredék kontextusát, amely az összes korábbi környező címkéből áll, egy alkalmazás vizsgálja meg, hogy a HTML-töredék környező címkéi feljegyezhetők legyenek az attribútumaikkal. Bár az alkalmazásokon múlik az ilyen töredékek értelmezésének eldöntése, az IE4/MSHTML-implementációk alapján néhány alapvető irányelv is szerepel itt.
A vágólap hivatalos neve (a RegisterClipboardFormat
által használt sztring) a következő: "HTML Format
".
Leírás
CF_HTML
egy szöveg vágólap formátuma, bár mindig UTF-8 kódolást használ. Vegye figyelembe, hogy az UTF-8 használata kivételt képez az általános szabály alól, amely szerint a Windows API UTF-16-ot használ a szöveges sztringek, különösen az emberi olvasásra alkalmas (azaz honosítható) sztringek ábrázolására.
A CF_HTML
vágólap általános elrendezését vagy szintaxisát a következőképpen írhatja le pszeudo-Backus–Naur formátumban:
Jegyzet
Ez a nyelvtan nem normatív**
<cf-html> ::= <description-header> <context>
<context> ::= [<preceding-context>] <fragment> [<trailing-context>]
<description-header> ::= "Version:" <version> <br> ( <header-offset-keyword> ":" <header-offset-value> <br> )*
<header-offset-keyword> ::= "StartHTML" | "EndHTML" | "StartFragment" | "EndFragment" | "StartSelection" | "EndSelection"
<header-offset-value> ::= { Base 10 (decimal) integer string with optional _multiple_ leading zero digits (see "Offset syntax" below) }
<version> ::= "0.9" | "1.0"
<fragment> ::= <fragment-start-comment> <fragment-text> <fragment-end-comment>
<fragment-start-comment> ::= "<!--StartFragment -->"
<fragment-end-comment> ::= "<!--EndFragment -->"
<preceding-context> ::= { Arbitrary HTML }
<trailing-context> ::= { Arbitrary HTML }
<fragment-text> ::= { Arbitrary HTML }
<br> ::= "\r" | "\n" | "\r\n"
Leírásfejlécek és eltolások
A leírás fejléce tartalmazza a vágólap verziószámát és eltolásait, jelezve, hogy hol kezdődik és végződik a környezet és a töredék. A leírás az ASCII szöveges kulcsszavak listája, amelyet egy sztring követ, és kettősponttal (:)) elválasztva.
-
Version
: a vágólap vv-verziószáma. A kezdő verzióVersion:0.9
. A Windows 10 20H2-ről ez mostVersion:1.0
. -
StartHTML
: Eltolás (bájtban) a vágólap elejétől a környezet elejéig, vagy-1
, ha nincs környezet. -
EndHTML
: Eltolás (bájtban) a vágólap elejétől a környezet végéig, vagy-1
, ha nincs környezet. -
StartFragment
: Eltolás (bájtban) a vágólap elejétől a töredék elejéig. -
EndFragment
: Eltolás (bájtban) a vágólap elejétől a töredék végéig. -
StartSelection
: Nem kötelező. Eltolás (bájtban) a vágólap elejétől a kijelölés elejéig. -
EndSelection
: Nem kötelező. Eltolás (bájtban) a vágólap elejétől a kijelölés végéig.
A StartSelection
és EndSelection
kulcsszavak nem kötelezőek, és mindkettőt el kell hagyni, ha nem szeretné, hogy az alkalmazás létrehozza ezeket az információkat.
A CF_HTML
vágólap formátumának későbbi változatai meghosszabbíthatják az élőfejet, mivel a HTML az StartHTML
eltoláskor kezdődik, majd később több StartFragment
és EndFragment
pár is hozzáadható a töredékek nem egyértelmű kiválasztásának támogatásához.
Eltolás szintaxisa
A bájteltolásokat generáló programok kényelme érdekében az eltolásértékek opcionálisan balra párnázhatók tetszőleges mennyiségű nulla számjegygel '0'
. Ennek az az oka, hogy az eltolások HTML-kódját szippantó programok tíz (10) nullát írhatnak a kimeneti pufferbe minden kulcsszóhoz (például StartHTML: 0000000000
). Később, amikor a pontos StartHTML
eltolás ismert (például 71), a program felülírhatja a jobb szélső nullákat a pufferben lévő "71" értékkel (például StartHTML: 0000000071
).
A vágólap egyetlen karakterkészlete a Unicode (UTF-8). Mivel az UTF-8 és az ASCII első karakterei megegyeznek, a leírás mindig ASCII, de a környezet bájtja (StartHTML
-tól kezdve) bármilyen más, UTF-8-ban kódolt karaktert használhat.
A vágólap formátumfejlécében (<br>
fent) lévő sorok végeit a CRLF (Windows), az LF (Unix) vagy a magányos CR (archaikus) jelölheti.
A töredék, a kijelölés és a környezetük
Elem | Leírás fejlécei | Érvényes HTML-kódot igényel az indítási és a záró karakterpozíciókhoz |
---|---|---|
Kontextus |
StartHTML és EndHTML |
Igen |
Töredék |
StartFragment és EndFragment |
Igen |
Szelekció |
StartSelection és EndSelection |
Nem |
Kontextus
A környezet érvényes, teljes HTML-dokumentum – ez azonban nem jelenti azt, hogy a felhasználó kijelölését tartalmazó teljes eredeti FORRÁS HTML-dokumentum szó szerint át lesz helyezve; éppen ellenkezőleg, ez lehet egy minimális, de jól formázott HTML-dokumentum.
Ez a környezet tartalmazza a töredék és az összes korábbi környező címkét (kezdő és záró címkék; ezek az előző környező címkék a töredék összes szülőcsomópontjait jelölik, egészen a HTML-csomópontig). A fenti példacikkben egy teljes HTML-<head>
elem található, amely lehetővé teszi <base href="">
és <title>
elemek használatát. Ezt az elemet beszúrhatja például a további információk beszerzéséhez. Egy HTML-töredék vágólapra másolt alkalmazás létrehozhat egy <base href="">
elemet, amely belefoglalja a környezetbe, ha még nincs ilyen elem. Így a HTML-töredék nem abszolút URI-jai feloldhatók.
A környezet nem kötelező, mivel a HTML-töredék alapvető beillesztéséhez elegendő információ szerepel a töredékben. Ha a környezet nincs tárolva, a rendszer csak a töredéket tárolja, és a StartHTML=EndHTML=-1
.
Töredék
A töredék (<fragment-text>
fent) érvényes HTML-töredéket tartalmaz.
Egy érvényes HTML-töredék egyetlen külső HTML-elemből áll. Ez az elem tartalmazhat leszármazott HTML-elemeket, feltéve, hogy megfelelően vannak beágyazva. A töredék lehet például egyetlen <div>
elem, amely 3 <p>
elemet tartalmaz. A három <p>
elemet tartalmazó <span>
elemből álló töredék érvénytelen lenne, mert egy <span>
elem (elem) nem tartalmazhat blokkszintű elemeket gyermekként.
Így a töredék hatékonyan képviseli a nagyobb területet a képernyőn, amelyen belül a felhasználó kijelölte a szövegét (például a másoláshoz). A kijelölés tartalmazza a kijelölt szöveget, valamint a kijelölt szövegen belüli záró címkével rendelkező elemek nyitó címkéit és attribútumait, a töredék végén pedig a kezdőcímkéket. Ez minden olyan információ, amely egy HTML-töredék alapszintű beillesztéséhez szükséges.
A töredék meg kell előzni, és a HTML-megjegyzéseknek <!--StartFragment-->
és <!--EndFragment-->
kell követnie annak jelzésére, hogy a töredék hol kezdődik és végződik; ezeket a HTML-megjegyzéseket szó szerintikell használni, és az egyes megjegyzésekben nincs szóköz karakter. Így a töredék kezdetét és végét jelzi, hogy a StartFragment
és EndFragment
fejlécek és ezeket a megjegyzéseket. Az eszközök várhatóan előállítják ezeket az információkat. Ez a redundancia szándékos, és úgy lett bevezetve, hogy megtalálja a töredék kezdetét (a bájtok számából), és közvetlenül a HTML-fában jelölje meg a töredék pozícióját.
Szelekció
A kijelölési nem kötelező, mert az alapszintű beillesztéshez elegendő információ szerepel a töredékben. Ha a kijelölés nincs tárolva, a StartSelection
és a EndSelection
sem a fejlécben lesznek tárolva.
Ha jelen van, a kijelölési a felhasználó által kijelölt szövegtartomány (a töredéken belül); ez további információkat ad a töredékhez a pontos kijelölt szöveg megjelölésével, anélkül, hogy a jól formázott és kiegyensúlyozott kezdő- és végpontcímkéket, valamint a zárócímkéket.
Ne feledje, hogy a kijelölési olyan szövegfuttatást jelölhet, amely bármely adott elemből indulhat ki, és bármely későbbi - vagy ős - elemben végződhet. Következésképpen nem lehet HTML-sel jelölni egy szövegkijelölést.
Forgatókönyvek
Az alábbi forgatókönyvek bemutatják, hogyan kezeli az IE4/MSHTML HTML-szerkesztő a HTML-kivágást és beillesztést; más alkalmazások is követhetik ezeket a forgatókönyveket. Az itt ismertetett vágólapformátum lehetővé teszi az alkalmazások működésének rugalmasságát. (Ezek a forgatókönyvek csak a jó HTML-t mutatják, azaz nincsenek átfedésben lévő címkék.)
1. forgatókönyv – A HTML egyszerű töredéke
Tegyük fel, hogy a következő HTML-szöveg:
<body>This is normal. <b>This is bold.</b> <i><b>This is bold italic.</b> This is italic.</i></body>
Ez a következőképpen fog megjelenni:
Ez normális. Ez félkövér.Ez félkövér dőlt.Ez dőlt.
Amikor a felhasználó betöltötte a fenti HTML-szöveget egy MSHTML-alapú alkalmazásba (MSHTML, más néven Trident, az Internet Explorer motorja volt), az MSHTML-leírók az alábbiak szerint másolják a HTML egy részszúrását:
- A felhasználó kijelöl egy szöveget kezdő vagy záró szóköz nélkül, például "félkövér Ez félkövér dőlt ez" a fenti példából.
- A szöveg vágólapra másolásához a felhasználó a Másolás parancsgombra kattint.
Az MSHTML a következőképpen helyezi el ezt a HTML-szöveget a Windows vágólapra:
Version:1.0
StartHTML:0121
EndHTML:0272
StartFragment:0006
EndFragment:0106
StartSelection:0180
EndSelection:0225
<html><!--StartFragment--><body>This is normal. <b>This is bold.</b> <i><b>This is bold italic.</b> This is italic.</i></body><!--EndFragment--></html>
2. forgatókönyv – Táblázat töredéke HTML-ben
Tegyük fel, hogy a következő HTML-szöveg:
<BODY><TABLE BORDER><TR><TH ROWSPAN=2>Head1</TH><TD>Item 1</TD><TD>Item 2</TD><TD>Item 3</TD><TD>Item 4</TD></TR><TR><TD>Item 5</TD><TD>Item 6</TD><TD>Item 7</TD><TD>Item 8</TD></TR><TR><TH>Head2</TH><TD>Item 9</TD><TD>Item 10</TD><TD>Item 11</TD><TD>Item 12</TD></TR></TABLE></BODY>
Ez a következőképpen fog megjelenni:
Fej 1 1. elem 2. elem 3. elem 4. elem 5. elem 6. elem 7. elem 8. elem Fej 2 9. elem 10. elem 11. elem 12. elem
Hogyan kezeli az MSHTML a HTML-részsztringek táblázatból való másolását?
Amikor a felhasználó az egérrel kijelöli a táblázatcellákat 6.. elemet, 7.. elemet, 10. elemet, és 11. elemet. Ezt a kijelölést ezután a vágólapra másolja.
Az alábbiakban az látható, hogy mi lesz a vágólapon (vegye figyelembe, hogy ez az IE4/MSHTML értelmezése). Az egyértelműség érdekében sortörések lettek hozzáadva.
<!DOCTYPE
<HTML>
<BODY>
<TABLE BORDER>
<!--StartFragment-->
**<TR>
<TD>Item 6</TD>
<TD>Item 7</TD>
</TR>
<TR>
<TD>Item 10</TD>
<TD>Item 11</TD>
</TR>**
<!--EndFragment-->
</TABLE>
</BODY>
</HTML>
A StartSelection
és EndSelection
által tagolt kijelölés félkövér színben jelenik meg.
3. forgatókönyv – Rendezett lista töredékének beillesztése <ol>
egyszerű szövegbe
Tegyük fel, hogy a következő HTML-szöveg:
<BODY><OL TYPE="a"><LI>Item 1<LI>Item 2<LI>Item 3<LI>Item 4<LI>Item 5<LI>Item 6</OL></BODY>
Ez a következőképpen fog megjelenni:
- 1. elem
- 2. elem
- 3. elem
- 4. elem
- 5. elem
- 6. elem
Hogyan kezeli az MSHTML a HTML-számozott listaelemek alsztringjének másolását?
- A felhasználó a 3. .. elem elejétől a 4. .. elemen át a 5. elem végéig. A felhasználó meghívja a Másolás parancsot.
- A következő HTML szerepel a vágólapon (sortörések hozzáadva az egyértelműség érdekében) – a
<!--Star/EndFragment -->
megjegyzések pontos helye attól függ, hogy a felhasználó hogyan kezelte a böngésző szövegkijelölési logikáját:
<html>
<body>
<ol>
<!-- StartFragment-->
<li>Item 3</li>
<li>Item 4</li>
<li>Item 5</li>
<!-- EndFragment-->
</ol>
</body>
</html>
Ha a töredék most egy üres dokumentumba lett volna beillesztve, a következő HTML jön létre:
<body>
<ol>
<li>Item 3</li>
<li>Item 4</li>
<li>Item 5</li>
</ol>
</body>
Ez a következőképpen fog megjelenni:
- 3. elem
- 4. elem
- 5. elem
5. forgatókönyv – Részben kijelölt régió beillesztése
Tegyük fel, hogy a következő HTML-szöveg:
<p>IE4/MSHTML is a WYSIWYG Editor that supports:</p>
<ul><li>Cut<li>Copy<li>Paste</ul>
<p>This is a Great Tool!</p>
Ez a következőképpen fog megjelenni:
Az IE4/MSHTML egy WYSIWYG-szerkesztő, amely a következőket támogatja:
- Vág
- Másolat
- Paszta
Ez egy nagyszerű eszköz!
Hogyan kezeli az MSHTML a HTML-listaelemek alsztringjének másolását?
A felhasználó az egérrel húz egy szövegkijelölést, például :"WYSIWYG Szerkesztő, amely támogatja: Kopó kivágása". Mintha egyszerű szöveg lenne, ez a kijelölés a hibás HTML-töredékhez hasonlóan nézne ki:
WYSIWYG Editor, which supports:</p>
<ul>
<li>Cut</li>
<li>Cop
Amikor a felhasználó lenyomja a Másolás parancsgombot, a vágólap így fog kinézni (sortörések lettek hozzáadva az egyértelműség kedvéért, a félkövér szöveg pedig azt jelzi, hogy a felhasználó valójában mit választott):
<html> <body> <!-- StartFragment--> <p>WYSIWYG Editor, which supports</p> <ul> <li>Cut</li> <li>Cop</li> </ul> <!-- EndFragment--> </body> </html>
Figyelje meg, hogy:
- A "WYSIWYG" előtti szöveg el lett távolítva.
- A listaelem (
<li>Paste</li>
) el lett távolítva, mivel egyik sem szerepel a felhasználó kijelölésében. - A "Másolás" y betűje el lett távolítva.