HTML 剪贴板格式
05/31/2018
本文内容
通过剪贴板传输 HTML 文本的要求因情况而异。 本文涉及剪切和粘贴 HTML 文档的片段。 可能需要通过剪贴板传输整个 HTML 文档;但是,这篇文章由传输选定 HTML 文本片段的要求驱动。 因此,需要将整个 HTML 文档复制到剪贴板的方法被视为太重型。
CF _ html 剪贴板格式允许原始 HTML 文本和其上下文的片段作为 ASCII 存储在剪贴板上。 这将允许应用程序检查 HTML 片段的上下文,其中包含所有前面的标记,以便可以使用其属性来注明 HTML 片段的周围标记。 尽管应用程序决定如何解释此类片段,但此处提供了一些基本指导原则,这是基于 IE4/MSHTML 实现的。
剪贴板的官方名称 (RegisterClipboardFormat) 使用的字符串为 HTML 格式。
描述
CF _ html 是完全文本格式 (在 HTML 精神中,在其他情况下也是如此,并使用 utf-8) 并在上下文中包含 description 、可选的 context 和 fragment 。
下面是剪贴板的示例:
Version:0.9
StartHTML:71
EndHTML:170
StartFragment:140
EndFragment:160
StartSelection:140
EndSelection:160
The HTML Clipboard- The Fragment
说明包含剪贴板版本号和偏移量,用于指示上下文和片段的开始位置和结束位置。 说明是 ASCII 文本关键字的列表, (min/maj 无意义) 后跟字符串,并用冒号分隔 (: ) 。
Version:剪贴板的 vv 版本号。 起始版本为0.9。
StartHTML: bytecount 从剪贴板的开头到上下文的开头,如果没有上下文,则为-1。
EndHTML: bytecount 从剪贴板的开头到上下文的末尾,如果没有上下文,则为-1。
StartFragment: bytecount 从剪贴板的开头到片段的开头。
EndFragment: bytecount 从剪贴板的开头到片段的结尾。
StartSelection: bytecount 从剪贴板的开头到选定内容的开头。
EndSelection:从剪贴板开头到选定内容末尾的 bytecount。
StartSelection 和 EndSelection 关键字是可选的,如果不希望应用程序生成此信息,则必须省略。
以后可以在此处添加此类信息,因为 HTML 从 StartHTMLoffset 开始。 例如,可以在稍后添加多对 StartFragment/EndFragment 以支持不连续选择的片段。
为了方便生成 bytecounts 的程序,可以将 bytecounts 填充为零。 例如,生成 bytecounts 的程序可能会对每个关键字 (StartHTML: 0000000000) 任意影响10个 (10) 零,然后,当确切的 StartHTML bytecount (例如,71) 时,程序可以用 bytecount (StartHTML: 0000000071) 来替换适当数量的零。
剪贴板支持的唯一字符集是 Unicode 的 UTF-8 编码。 由于 UTF-8 和 ASCII 匹配的前个字符,描述始终为 ASCII,但上下文 (从 StartHTML) 开始的字节可以使用 UTF-8 中编码的任何其他字符。
剪贴板格式标头中的行尾可以是 CR 或 CR/LF 或 LF。
片段包含纯的有效 HTML,表示用户已选择要复制的 (区域,例如) 。 其中包含所选文本以及在所选文本中具有结束标记的任何元素的开始标记和特性,以及包含的任何开始标记的片段末尾的结束标记。 这是 HTML 片段的基本粘贴所需的全部信息。
片段的后面应跟有 HTML 注释 和 (在!--和文本) 之间不允许使用空格,以方便地指示片段的开始位置和结束位置。 因此,片段的开头和结尾通过说明中的 StartFragment 和 EndFragment 字节计数来指示。 此信息应由工具生成。 引入此冗余后,便可以快速找到从字节计数) (的起始处,并在 HTML 树中直接标记片段的位置。
所选内容指示该片段中用户已选择要复制 (的确切 HTML 区域,例如) 。 这会通过指示准确选定的文本(不包括开始标记和结束标记)向片段中添加更多的信息,以确保片段是格式正确的 HTML。
选择是可选的,因为用于基本粘贴的片段中包含足够的信息。 如果未存储所选内容,则 StartSelection 和 EndSelection 均不存储在标头中。
上下文是有效的完整 HTML 文档。 本文包含片段和所有前面的标记, (开始和结束标记;前面的周围标记表示片段的所有父节点,直到 HTML 节点) 。 本文还包含完整的标题,并允许包含基本元素和标题元素,以便可以获取此附加信息。 如果某个元素尚不存在,则应用程序将 HTML 片段复制到剪贴板可以选择创建要包括在上下文中的基元素,以便可以解析片段中的部分 Url。
上下文是可选的,因为在要执行 HTML 片段的基本粘贴时,片段中包含足够的信息。 如果未存储上下文,则只存储片段,StartHTML = EndHTML =-1。
方案
以下方案介绍了 IE4/MSHTML HTML 编辑器如何处理 HTML 剪切和粘贴操作;其他应用程序不一定遵循这些方案。 此处所述的剪贴板格式旨在允许对应用程序选择工作方式的灵活性。 (这些方案只显示良好的 HTML,即无重叠标记。 )
简单的 HTML 片段。
HTML 文本:
显示为:
这是正常的(这是 粗体)此为 * 斜体 *
选定的文本 * * ,并将其复制到剪贴板:
这 是正常的,这是 * * 粗体-这 * 是粗体斜体 * *
这就是剪贴板上的 (注意,这是 IE4/MSHTML 的解释) :
版本:0。9
StartHTML:71
EndHTML:160
StartFragment:130
EndFragment:150
StartSelection:130
EndSelection:150
..>
>
粗体此为粗体斜体