imRichClipboardPlain
带 WORD JOINER(\u2060)元数据的 plain 剪贴板格式,与 wire HTML 互转,粘贴回编辑器可还原 @ / 图 / 文件 chip。
函数签名
typescript
const IM_CLIPBOARD_PLAIN_SEP = '\u2060'
function formatImMentionClipboardPlainToken(userId: string, label: string): string
function formatImImageClipboardPlainToken(
url: string,
alt?: string,
width?: number,
height?: number,
): string
function formatImFileClipboardPlainToken(path: string, label: string): string
function hasImRichClipboardPlainMarkers(text: string): boolean
function parseImRichClipboardPlainText(text: string): ImRichContentSegment[]
function materializeImRichHtmlToRestorablePlainText(
content: string,
options?: MaterializeImRichHtmlOptions,
): stringImRichContentSegment 与 MaterializeImRichHtmlOptions 见 imRichContentHtml。
参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
userId / label | string | 是 | @ chip plain token 的用户 id 与展示名 |
url | string | 是 | 图片 HTTPS 或 data URL |
alt | string | 否 | 图片 alt,默认 图片 |
width / height | number | 否 | 图片尺寸,写入 plain 元数据 |
path | string | 是 | 文件路径 |
text | string | 是 | 待检测或解析的 plain 文本 |
content | string | 是 | wire HTML 正文 |
options | MaterializeImRichHtmlOptions | 否 | @ 展示名解析回调(同 HTML 模块) |
返回值
| 函数 | 类型 | 说明 |
|---|---|---|
formatIm*ClipboardPlainToken | string | 含 \u2060 分隔的可还原 plain 片段 |
hasImRichClipboardPlainMarkers | boolean | 是否含 @ / 图 / 文件 plain 元数据 |
parseImRichClipboardPlainText | ImRichContentSegment[] | 解析为结构化片段 |
materializeImRichHtmlToRestorablePlainText | string | HTML → 可粘贴回编辑器的 plain |
Plain token 格式
| 类型 | 格式示例 |
|---|---|
| @ 提及 | @昵称\u2060userId\u2060 |
| 图片 | [图片]\u2060url\u2060alt\u2060(可选 width\u2060height\u2060) |
| 文件 | [文件] 文件名\u2060path\u2060 |
工作原理
- 写出:
formatIm*ClipboardPlainToken在可见文案后附加\u2060分隔的元数据,跨应用重启仍常保留。 - 检测:
hasImRichClipboardPlainMarkers要求文本含分隔符且匹配 @ / 图 / 文件任一模式。 - 读入:
parseImRichClipboardPlainText按正则提取 chip,其余为text片段。 - HTML 降级:
materializeImRichHtmlToRestorablePlainText先parseImRichContentHtml,再逐段转为 plain token(emoji 保留 glyph)。