delta-elixir

delta-elixir

灵活的文档内容描述与变更格式

Delta-elixir是一种用于描述文档内容和变更的格式。作为JSON的子集,它易读易解析,能够描述富文本文档的文本和格式。Delta格式支持操作转换(OT),适用于实时协作文档编辑。该项目实现了插入、删除、保留等基本操作,以及组合、转换、反转等OT核心功能。

Delta文档格式协作编辑操作转换JSONGithub开源项目

Delta

构建状态 版本 下载 许可

简单而富有表现力的格式来描述文档的内容和变更 🗃

Delta是一种简单而富有表现力的格式,可用于描述内容和变更。 该格式是JSON的严格子集,易于人类阅读,并且机器可以轻松解析。 Delta可以描述任何富文本文档,包括所有文本和格式信息,而不会出现HTML中的模糊性和复杂性。

Delta格式适用于操作转换,并可用于实时协作文档编辑器(例如Slab、Google文档)。关于Delta设计动机和思路的详细介绍,请参阅Designing the Delta Format

请参阅文档

<br>

安装

mix.exs中将delta添加到项目依赖项中:

def deps do [{:delta, "~> 0.4.0"}] end
<br>

用法

Delta由一系列操作组成,这些操作描述了对文档的更改。这些操作可以是insertdeleteretain。这些操作不需要索引,而是描述当前索引处的更改。保留操作用于"保留"文档的一部分。

快速示例

alias Delta.Op # 文档内容为"Gandalf the Grey",其中"Gandalf"加粗,"Grey"为灰色 delta = [ Op.insert("Gandalf", %{"bold" => true}), Op.insert(" the "), Op.insert("Grey", %{"color" => "#ccc"}), ] # 定义要应用于上述内容的更改: # 保留前12个字符,删除接下来的4个字符, # 并插入一个白色的"White" death = [ Op.retain(12), Op.delete(4), Op.insert("White", %{"color" => "#fff"}), ] # 应用更改: Delta.compose(delta, death) # => [ # %{"insert" => "Gandalf", "attributes" => %{"bold" => true}}, # %{"insert" => " the "}, # %{"insert" => "White", "attributes" => %{"color" => "#fff"}}, # ]
<br>

操作

插入

插入操作具有已定义的insert键。字符串值表示插入文本。任何其他类型都表示插入嵌入(但仅执行一级对象比较以进行相等性判断)。

对于文本和嵌入,都可以定义可选的attributes键,该键是一个map,用于描述附加的格式信息。保留操作可以更改格式。

# 插入文本 Op.insert("一些文本") # 插入加粗文本 Op.insert("加粗文本", %{"bold" => true}) # 插入链接 Op.insert("谷歌", %{"link" => "https://www.google.com"}) # 插入嵌入 Op.insert(%{"image" => "https://app.com/logo.png"}, %{"alt" => "应用程序logo"}) # 插入另一个嵌入 Op.insert(%{"video" => "https://www.youtube.com/watch?v=dQw4w9WgXcQ"}, %{"width" => 420, "height" => 315})

删除

删除操作具有定义的正整数delete键,表示要删除的字符数。所有嵌入的长度都为1。

# 删除接下来的10个字符 Op.delete(10)

保留

保留操作具有定义的正整数retain键,表示要保留的字符数(其他库可能使用保留或跳过)。可以定义可选的attributes键,该键是一个map,用于描述字符范围内的格式更改。属性映射中的值为nil表示删除该键。

注意:没有必要保留文档的最后几个字符,因为这是隐含的。

# 保留接下来的5个字符 Op.retain(5) # 保留并加粗接下来的5个字符 Op.retain(5, %{"bold" => true}) # 保留并取消加粗接下来的5个字符 Op.retain(5, %{"bold" => nil})
<br>

操作转换

操作转换(OT)是一种构建协作体验的技术,在应用程序共享和构建支持多用户协作的实时文档编辑器(例如Google文档、Slab)中非常有用。

Delta开箱即用地支持OT,在Elixir中使用操作转换技术非常有用。它支持以下属性:

组合

返回一个新的Delta,它等价于先应用一个Delta的操作,然后再应用另一个Delta的操作:

a = [Op.insert("abc")] b = [Op.retain(1), Op.delete(1)] Delta.compose(a, b) # => [%{"insert" => "ac"}]

转换

将给定的Delta转换为针对另一个Delta的操作。这接受一个可选的priority参数(默认值:false),用于打破平局。如果true,第一个Delta优先于其他Delta,即它的操作被认为首先发生。

a = [Op.insert("a")] b = [Op.insert("b"), Op.retain(5), Op.insert("c")] Delta.transform(a, b, true) # => [ # %{"retain" => 1}, # %{"insert" => "b"}, # %{"retain" => 5}, # %{"insert" => "c"}, # ] Delta.transform(a, b) # => [ # %{"insert" => "b"}, # %{"retain" => 6}, # %{"insert" => "c"}, # ]

请注意,即使delete操作支持属性,使用transform时也只能安全地使用不带属性的删除操作。

反转

返回一个反转的Delta,其效果与针对基础文档Delta的效果相反。 也就是说base |> Delta.compose(change) |> Delta.compose(inverted) == base

base = [Op.insert("Hello\nWorld")] change = [ Op.retain(6, %{"bold" => true}), Op.delete(5), Op.insert("!"), ] inverted = Delta.invert(change, base) # => [ # %{"retain" => 6, "attributes" => %{"bold" => nil}}, # %{"insert" => "World"}, # %{"delete" => 1}, # ] base |> Delta.compose(change) |> Delta.compose(inverted) == base # => true
<br>

贡献

  • Fork、增强并发送PR
  • 提交任何bug或功能请求的issue
  • 实现路线图中的内容
  • 传播这个消息 :heart:
<br>

编辑推荐精选

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

下拉加载更多