news 2026/2/7 13:32:17

2602c++,剪切板格式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2602c++,剪切板格式

超文本``剪切板格式

剪切板传输超文本文本的要求因方案而异.这里涉及剪切和粘贴超文本文档的片段.可能需要剪切板传输整个超文本文档;

但是,这里由传输所选超文本文本片段的要求驱动.因此,把整个超文本文档复制进剪切板的方法太麻烦了.

CF_HTML``剪切板格式允许在剪切板上按美标保存原始超文本文本及其环境(即外部超文本)的片段.

允许应用检查超文本片段的环境(由前面所有周围的标记组成),这样可用其属性来记录超文本片段周围标记.

尽管应用决定如何解释此类片段,但此处提供了一些基于IE4/MSHTML实现的基本指南.
剪切板的官方名(RegisterClipboardFormat使用的串)是"HTMLFormat".

描述

CF_HTML是总是使用UTF-8编码的文本剪切板格式.注意,此处的UTF-8的使用是窗口接口使用UTF-16来表示文本串一般规则(尤其是可本地化的)串的例外.
可用伪BackusNaur形式描述CF_HTML``剪切板普通布局或语法,如下:

注意

此语法不规范

<cfhtml>::=<descriptionheader><context><context>::=[<precedingcontext>]<fragment>[<trailingcontext>]<descriptionheader>::="Version:"<version><br>(<headeroffsetkeyword>":"<headeroffsetvalue><br>)*<headeroffsetkeyword>::="StartHTML"|"EndHTML"|"StartFragment"|"EndFragment"|"StartSelection"|"EndSelection"<headeroffsetvalue>::={Base10(decimal)integer string with optional _multiple_ leading zerodigits(see"Offset syntax"below)}<version>::="0.9"|"1.0"<fragment>::=<fragmentstartcomment><fragmenttext><fragmentendcomment><fragmentstartcomment>::="<!-StartFragment -->"<fragmentendcomment>::="<!-EndFragment -->"<precedingcontext>::={Arbitrary HTML}<trailingcontext>::={Arbitrary HTML}<fragmenttext>::={Arbitrary HTML}<br>::="\r"|"\n"|"\r\n"

说明头和偏移

说明头包括剪切板版本号偏移,指示环境和片段开始和结束的位置.说明是美标文本关键字的列表后接串,并用冒号(:)分隔.
1,版本:剪切板vv``版本号.开始版本Version:0.9.从窗口1020H2开始,现在Version:1.0.
2,StartHTML:从剪切板开头到环境开头的偏移(按字节),如果没有环境,则为-1.

3,EndHTML:从剪切板开头到环境尾的偏移(按字节),如果没有环境,则为-1.
4,StartFragment:从剪切板开头到片段开头的偏移(按字节).
5,EndFragment:从剪切板开头到片段尾的偏移(按字节).

6,StartSelection:可选.从剪切板的开头到选区的开头的偏移(按字节).
7,EndSelection:可选.从剪切板的开头到选区尾的偏移(按字节).

StartSelectionEndSelection``关键字是可选的,如果不希望应用生成此信息,则必须省略这两个关键字.
CF_HTML``剪切板格式的未来修改可能会扩展,如,因为超文本StartHTML偏移处开始,因此以后可添加多个StartFragmentEndFragment对以支持不连续片段选择.

偏移语法

为了方便助手生成字节偏移,偏移值可选择多个零位'0'左填充.
原因是助手找到的偏移超文本可能会为每个关键字(如StartHTML:0000000000),将十个(10)零写入其输出缓冲.

稍后,当知道确切的StartHTML偏移(如,71),助手可在缓冲中使用"71"覆盖最右边的零(如,变成StartHTML:0000000071).

剪切板支持的唯一符集是Unicode(UTF-8).因为UTF-8美标第一个符匹配,说明总是为美标,但环境(从StartHTML开始)的字节可用UTF-8编码的任何其他符.

剪切板格式(上<br>)中的行尾可由CRLF(窗口),LF(Unix)或单个CR(原型)表示.

片段,选区及其环境

元素说明头需要对开始和结束符位置使用有效的超文本
环境StartHTMLEndHTML
片段StartFragmentEndFragment
选择StartSelectionEndSelection

环境

环境是一个有效的,完整超文本文档,虽然这不表示包含用户选择的整个原始源超文本,会逐字执行文档;相反,可以是一个最小的,但格式正确超文本文档.

此环境包含片段和前面的所有周围标记(开始和结束标记;这些前面的周围标记表示片段所有父节点,直到超文本节点).

上例文章包含一个完整的HTML的,允许使用<base href=""><title>元素的<head>元素.如,可插入此元素以取此附加信息.

应用剪切板中复制超文本片段,可选择创建一个<base href="">元素,以把它包含在环境中(如果此类元素尚不存在).
这样,就可解析超文本片段中的非绝对URI.

环境是可选的,因为片段包含足够的信息,这样可粘贴超文本片段.如果未存储环境,则仅存储片段StartHTML=EndHTML=-1.

片段

片段(上<fragmenttext>)包含效的超文本片段.

有效的超文本片段由单个外部超文本元素组成.
此元素可能包含子超文本元素,只要它们正确嵌套.
如,片段可是包含3个<p>元素的单个<div>元素.
包含三个<p>元素的<span>元素组成的片段无效,因为<span>元素不能按子元素包含块级元素.

因此,片段有效地表示了屏幕上更大的区域,用户在其中选择文本(如复制).
选区包含所选文本及在所选文本中有结束标记任何元素开始标记和属性,及包含的任何开始标记片段尾结束标记.

这是基本粘贴超文本片段要求的所有信息.
片段前面,加超文本注释<!--StartFragment-->和<!--EndFragment-->,以指示片段开始和结束位置;这些超文本注释必须逐字,每个注释自身中没有空格符.

因此,由这些注释的存在StartFragmentEndFragment``头表示片段开始和结尾.工具应生成此信息.该冗余是故意的,引入后可找到片段的开头(从字节计数),并直接标记片段超文本树中的位置.

选择

选择是可选的,因为片段中包含足够的信息基本粘贴.如果未存储选区,则不会在中保存StartSelectionEndSelection.

如果存在,则选择是用户选择的确切文本范围(在片段中);这将通过指示确切的选中文本,而不是格式正确开始和结束标记和结束标记结束标记来向片段添加更多信息.

记住,选择可表示可在任何给定元素中开始,并在后续元素或上级元素中结束动态文本.因此,不能用超文本来表示选择文本.

场景

如下描述了IE4/MSHTML超文本编辑器如何处理超文本剪切和粘贴;
方案仅显示良好超文本,即没有覆盖的标记.

方案1,超文本的简单片段

假设以下超文本文本:

<body>This is normal.<b>This is bold.</b><i><b>This is bold italic.</b>This is italic.</i></body>

当用户在基于MSHTML应用(MSHTMLIE的引擎)上加载上述超文本文本时,MSHTML将如下处理复制超文本子串:
1,用户从上例中选择不带任何前导或尾空格的文本,如粗体,这是粗体.
2,要在剪切板复制文本,用户点击"复制"命令按钮.
MSHTML会如下将此超文本文本放入窗口剪切板中:

Version:1.0StartHTML:0121EndHTML:0272StartFragment:0006EndFragment:0106StartSelection:0180EndSelection: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,HTML中表的片段

假设以下超文本文本:

<BODY><TABLE BORDER><TR><TH ROWSPAN=2>Head1</TH><TD>Item1</TD><TD>Item2</TD><TD>Item3</TD><TD>Item4</TD></TR><TR><TD>Item5</TD><TD>Item6</TD><TD>Item7</TD><TD>Item8</TD></TR><TR><TH>Head2</TH><TD>Item9</TD><TD>Item10</TD><TD>Item11</TD><TD>Item12</TD></TR></TABLE></BODY>

如下:

1|项目1|项目2|项目3|项目41|项目5|项目6|项目7|项目82|项目9|项目`10`|项目`11`|项目`12`

MSHTML如何处理从表复制超文本子串

当用户用鼠标选择表格单元格时,项6,Item7,Item10Item11.然后,此选择将复制进剪切板.
以下是剪切板上的内容(注意这是IE4/MSHTML的解释).为此,添加了换行符.

<!DOCTYPE<HTML><BODY><TABLE BORDER><!-StartFragment-->**<TR><TD>Item6</TD><TD>Item7</TD></TR><TR><TD>Item10</TD><TD>Item11</TD></TR>**<!-EndFragment--></TABLE></BODY></HTML>

StartSelectionEndSelection分隔选区,以粗体显示.

方案3,将有序列表的片段粘贴到纯文本``<ol>

假设以下超文本文本:

<BODY><OL TYPE="a"><LI>Item1<LI>Item2<LI>Item3<LI>Item4<LI>Item5<LI>Item6</OL></BODY>

如下:
1,项目1
2,项目2
3,项目3
4,项目4
5,项目5
6,项目6

MSHTML如何处理复制超文本``编号列表项的子串

用户从第3项开始,到第4项,到第5项的尾选择文本.用户调用复制命令.
以下超文本剪切板(为了清晰添加了换行符)<!--Start/EndFragment-->注释的精确位置,根据用户如何处理其浏览器选择文本逻辑:

<html><body><ol><!--StartFragment--><li>Item3</li><li>Item4</li><li>Item5</li><!--EndFragment--></ol></body></html>

如果此片段现在粘贴到空文档中,将创建以下超文本:

<body><ol><li>Item3</li><li>Item4</li><li>Item5</li></ol></body>

如下:
1,项目3
2,项目4
3,项目5

方案5,粘贴部分选中的区域

假设以下超文本文本:

<p>IE4/MSHTML是个支持`WYSIWYG`的编辑器:</p><ul><li>Cut<li>Copy<li>Paste</ul><p>This is a Great Tool!</p>

MSHTML如何处理复制超文本``列表项的子串

用户拖放鼠标选择文本,如与它是纯文本一样,“支持:剪切CopWYSIWYG``编辑器”,该选择将类似此坏的的超文本片段:

WYSIWYG Editor,which supports:</p><ul><li>Cut</li><li>Cop

当用户按下"复制"命令按钮时,其剪切板将如下(为此,添加了换行符;粗体文本表示用户实际选择的内容):

<html><body><!--StartFragment--><p>WYSIWYG Editor,which supports</p><ul>|<li>Cut</li>|<li>Cop</li></ul><!--EndFragment--></body></html>

注意:
1,删除了"WYSIWYG"前的文本.
2,已删除列表项(<li>Paste</li>),因为用户选择中没有任何列表项.
3,已删除"复制"中的"y".

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/6 21:38:28

构建一个论文学习AI助手

说实话&#xff1a;我曾经害怕阅读研究论文。密集的数学、符号繁重的证明、假设你已经了解另外三篇论文才能理解这篇论文。作为ML工程师&#xff0c;我知道这些论文包含了可以在工作中应用的见解&#xff0c;但实际提取这些价值感觉就像一件苦差事。 我的学习风格与传统学术写…

作者头像 李华
网站建设 2026/2/6 9:02:52

MX播放器 2.7.2 |安卓解码最强的媒体播放器

MX Player被誉为移动平台最强大的本地视频播放器。它以其卓越的解码性能、友好的字幕支持以及兼容各种特效字幕和在线匹配字幕的功能而受到用户的广泛好评。无论是安卓手机还是电视端&#xff0c;MX Player都能提供出色的观看体验&#xff0c;包括小窗口播放功能&#xff0c;使…

作者头像 李华
网站建设 2026/2/7 7:38:51

数位dp模版

直接放一篇比较有代表性的数位dp学习的题目链接和标准的题解代码&#xff0c;由于题解代码较少就懒得解释更多了&#xff0c;关键就是从高位到低位的状态dfs➕记忆化➕对区间答案拆解为前缀差 https://www.luogu.com.cn/problem/P13085 #include <iostream> #include &…

作者头像 李华
网站建设 2026/2/6 17:06:24

手写一个熔断器(附完整代码)

概述 一个用于 RPC 框架的异常比例熔断器&#xff0c;可以实现时间窗口内统计请求成功次数&#xff0c;失败次数&#xff0c;失败比例达到阈值并且时间窗口内总请求数量达到阈值则对服务进行降级&#xff0c;经过特定时间间隔尝试恢复服务&#xff0c;放开服务可调用次数permit…

作者头像 李华
网站建设 2026/2/6 22:01:47

Java Web 光影系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

摘要 随着互联网技术的快速发展&#xff0c;Web应用在多个领域的应用需求日益增长&#xff0c;尤其是在光影艺术与数字化展示领域&#xff0c;传统的静态展示方式已无法满足用户对交互性和动态效果的需求。光影系统作为一种结合艺术与技术的创新应用&#xff0c;能够通过动态光…

作者头像 李华
网站建设 2026/2/5 20:55:23

经常使用 Code Agent/Chat:思考和感想

背景 做了一年的 code review&#xff0c;看大家都用上了 AI 来辅助编程&#xff0c;有一些些小的想法&#xff0c;生成此篇。 做过技术支持的人&#xff0c;应该有很多相似的感受&#xff1a;很多人在描述自己遇到的问题、需求时&#xff0c;往往说不清楚&#xff0c;难以让人…

作者头像 李华