Megosztás a következőn keresztül:


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 most Version: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:

  1. 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.
  2. 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. 1. elem
  2. 2. elem
  3. 3. elem
  4. 4. elem
  5. 5. elem
  6. 6. elem

Hogyan kezeli az MSHTML a HTML-számozott listaelemek alsztringjének másolását?

  1. 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.
  2. 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:

  1. 3. elem
  2. 4. elem
  3. 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.

Lásd még:

vágólap