112 lines
3.3 KiB
Markdown
112 lines
3.3 KiB
Markdown
# 文本粘贴功能
|
||
|
||
## 功能概述
|
||
|
||
Opentu 现在支持智能文本粘贴功能,当你从外部复制文本并粘贴到画布时,系统会自动控制文本宽度,避免文本过长。
|
||
|
||
## 功能特点
|
||
|
||
### 1. 自动换行
|
||
- 当文本行超过 50 个字符时,自动换行
|
||
- 优先在空格处断行,保持单词完整性
|
||
- 如果空格位置不合适,则在最大字符数处强制断行
|
||
|
||
### 2. 智能断行
|
||
- 在空格处断行时,会检查空格位置是否在合理范围内(70% 以上)
|
||
- 避免在行首或行尾留下过短的单词片段
|
||
- 自动去除断行后的多余空格
|
||
|
||
### 3. 保留原有格式
|
||
- 保留原文本中的换行符
|
||
- 每个原始行独立处理,不会合并多行
|
||
|
||
## 技术实现
|
||
|
||
### 核心文件
|
||
- `packages/drawnix/src/plugins/with-text-paste.ts` - 文本粘贴插件
|
||
- `packages/drawnix/src/plugins/with-common.tsx` - 插件注册
|
||
|
||
### 配置参数
|
||
|
||
```typescript
|
||
const TEXT_CONFIG = {
|
||
/** 最大字符数(超过则换行) */
|
||
MAX_CHARS_PER_LINE: 50,
|
||
/** 默认文本框宽度(像素) */
|
||
DEFAULT_WIDTH: 400,
|
||
/** 最大文本框宽度(像素) */
|
||
MAX_WIDTH: 600,
|
||
/** 估算字符宽度(像素) */
|
||
CHAR_WIDTH: 8,
|
||
};
|
||
```
|
||
|
||
### 插件链顺序
|
||
|
||
```typescript
|
||
// 在 with-common.tsx 中
|
||
return withTextPastePlugin(withImagePlugin(newBoard));
|
||
```
|
||
|
||
插件按以下顺序处理粘贴事件:
|
||
1. `withTextPastePlugin` - 检查是否为纯文本,如果是则处理并返回
|
||
2. `withImagePlugin` - 检查是否为图片,如果是则处理并返回
|
||
3. 默认处理 - 处理其他类型的粘贴(如 Plait 元素)
|
||
|
||
## 使用方法
|
||
|
||
### 基本使用
|
||
1. 从任何地方复制文本(浏览器、编辑器、文档等)
|
||
2. 在 Opentu 画布上按 `Ctrl+V` (Windows/Linux) 或 `Cmd+V` (Mac)
|
||
3. 文本会自动插入到鼠标位置,并自动换行
|
||
|
||
### 示例
|
||
|
||
**输入文本:**
|
||
```
|
||
This is a very long line of text that exceeds the maximum character limit and should be automatically wrapped to multiple lines.
|
||
```
|
||
|
||
**输出效果:**
|
||
```
|
||
This is a very long line of text that exceeds
|
||
the maximum character limit and should be
|
||
automatically wrapped to multiple lines.
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
1. **不影响现有功能**
|
||
- 图片粘贴功能正常工作
|
||
- Plait 元素复制粘贴正常工作
|
||
- 只处理纯文本粘贴
|
||
|
||
2. **文本宽度限制**
|
||
- 默认最大 50 字符/行
|
||
- 可以通过修改 `TEXT_CONFIG.MAX_CHARS_PER_LINE` 调整
|
||
|
||
3. **中英文混排**
|
||
- 当前按字符数计算,中文字符和英文字符同等对待
|
||
- 中文文本可能需要调整 `MAX_CHARS_PER_LINE` 参数
|
||
|
||
## 未来改进方向
|
||
|
||
1. **智能宽度检测**
|
||
- 根据实际字符宽度(中文 vs 英文)动态调整
|
||
- 支持等宽字体和比例字体的不同处理
|
||
|
||
2. **用户配置**
|
||
- 在设置中允许用户自定义最大字符数
|
||
- 支持开启/关闭自动换行功能
|
||
|
||
3. **富文本支持**
|
||
- 保留粘贴文本的格式(粗体、斜体等)
|
||
- 支持 Markdown 格式自动转换
|
||
|
||
## 相关文件
|
||
|
||
- `packages/drawnix/src/plugins/with-text-paste.ts` - 文本粘贴插件实现
|
||
- `packages/drawnix/src/plugins/with-common.tsx` - 插件注册
|
||
- `packages/drawnix/src/plugins/with-image.tsx` - 图片粘贴插件(参考实现)
|
||
- `packages/drawnix/src/mcp/tools/canvas-insertion.ts` - 画布插入工具(文本插入参考)
|