数转企业,如何系统性提升组织数字化能力?戳此了解 >>> 了解详情
写点什么

Flow Model 的架构与设计

  • 2011-09-09
  • 本文字数:1418 字

    阅读完需:约 5 分钟

通过前面文章的介绍,相信大家对 TLF 的基本架构已经有所了解。本文将着重介绍 TLF 里的核心内容——Flow Model,包括 Flow Model 的组织结构和 TLF 的 Format。

要求

预备知识

熟悉 Flash Builder, Flex, 和 Actionscript 3.0。

需要的 Adobe 产品

内容预览

Flow Model 总览

Flow Model 包括 FlowElement 定义的对象以及 TextlayoutFormat 定义的格式。Flow Model 定义了数据结构来保存文本,它使用树形结构来存储文本和节点。其中 FlowElement 是整个 TLF 的核心,它是 Flow Model 中所有其它 Element 的基类。FlowElement 是有格式的,并提供设置格式的接口。

Flow Model 的组织结构

TLF 中的文本元素以树形结构存储,树中的元素表示文本内的逻辑分段。上图展示了 Flow Model 中各个类之间的继承关系,其中最重要的就是 FlowElement,FlowGroupElement 和 FlowLeafElement 这三个抽象基类,它们定义了这个树形结构。FlowElement 类是该树中所有元素对象的抽象基类,FlowGroupElement 类是所有容器元素对象的抽象基类,而 FlowLeafElement 类是所有叶子节点元素的抽象基类。

FlowElement 对象可以代表一篇文章,多篇文章或者一篇文章中的一段文字,并提供了一些文本元素的基本属性和方法。比如,使用 parent 属性访问父节点、textLength 属性获得文本长度以及 relativeParentStart 属性获得相对父节点的起始位置。

FlowGroupElement 类是所有的容器元素对象的基类,这些容器对象可以有一个或多个子节点,并提供 API 来操作和遍历这些子节点。容器类有 TextFlow,ParagraphElement,DivElement 和 LinkElement。其中,LinkElement 类代表一个超文本链接,与 XHTML 中的标签类似。链接中可以包含一个或多个 SpanElement,InlineGraphicElement 或者 TCYElement。TCYElement 代表竖排文本中的一小段横排文本,你可以在日文中使用 TCYElement 代表竖排文本中的一段横排文本。

FlowLeafElement 是树形结构中最底层元素对象的抽象基类,这些对象没有子节点。FlowLeafElement 可以添加文本,并且提供遍历和操作其它叶子节点的 API。叶子节点类有 InLineGraphic 和 SpanElement。其中,SpanElement 类代表具有共同格式的一段文字。InlineGraphicElement 类代表文本中的一个图形元素,在使用的时候被看作是一个字符。

TLF 的 Format

TLF 中有一个专门的类 TextLayoutFormat 负责 Flow Model 中元素的格式。TextLayoutFormat 支持一些预定义的格式名称与合法的赋值,FlowElement 类提供了设置格式的方法。

每一个格式属性在实现上其实是 TextLayoutFormat 类中一个属性类的静态实例,而属性类负责验证对应的格式的值是否合法。有一些格式属性非常复杂,可以接收数字,百分数甚至枚举类型。在实现上,属性类会持有一个数组来保存所有支持的类型。

上图展示了 TLF 的格式级联,如果子节点的格式没有定义,它会采用父节点设置的格式;如果子节点的格式定义与父节点不同,会覆盖父节点的格式。如上图,中间的 SpanElement 的字体定义为加粗,其父节点字体为正常,那么 SpanElement 中的文字将是粗体。此外,所有的格式都是无类型的,即类型为 *。

TextLayoutFormat 支持用户自定义的格式,可以是任意的键值对,但是不要和内置的格式冲突。

下一步要做的事情

本文讲述了 TLF 中 Flow Model 的架构与设计,想要了解更多有关 TLF 的知识,请参考 TLF 开发人员的系列教程。

TLF 概览

查看原文: Flow Model 的架构与设计

2011-09-09 00:00862

评论

发布
暂无评论
发现更多内容

Python OpenCV 图像2D直方图,取经之旅第 27 天

梦想橡皮擦

Python OpenCV 4月日更

web简易视频聊天室+媒体流插入

anyRTC开发者

大前端 音视频 WebRTC RTC

我们真的可以使世界成为无密码的地方吗?

龙归科技

网络 安全性

中国SaaS的终局:神仙打架,小鬼遭殃

ToB行业头条

磁盘快照服务USnap:公有云连续数据保护(CDP)系统升级改造实践

UCloud技术

在有道 | L同学:一位十五年有道人的成长故事

有道技术团队

分享 访谈录 阅读 网易有道

合约跟单系统开发|合约跟单APP软件开发

合约量化机器人系统开发|合约量化机器人软件APP开发

系统开发

Golang Slice 数组和切片

escray

学习 极客时间 Go 语言 4月日更

使用Python映射,过滤和缩减函数:所有您需要知道的

华为云开发者联盟

Python 函数 映射 内置函数

深入浅出带你掌握线程、多线程和线程池

华为云开发者联盟

Java 线程 多线程 线程池 操作系统

HTTPS双向认证

上海派拉基础研发

https HTTP ssl SSL 连接

车行易携手睿象云:告警管理体系全升级

睿象云

构建智慧金融新引擎|DataPipeline与巨杉数据库完成产品兼容互认证

DataPipeline数见科技

征服耶鲁教授的算法大神程序媛,是如何践行“以人为本”开发智慧社区大脑的?

华为云开发者联盟

算法 音视频 智慧社区 华为智慧园区数字平台 数字平台

Linux df 命令

一个大红包

linux命令 4月日更

很坑的Could not transfer artifact报错

01Running

maven Mac IDEA

使用transform制作书本翻页效果

空城机

JavaScript 大前端 4月日更 书本翻页

vue2的$refs在vue3组合式API中的替代方法

devpoint

Vue3 $refs vue2 this.$refs

Python基础之:struct和格式化字符

程序那些事

Python 数据分析 程序那些事

借助 Serverless 容器服务Cube,筷子科技轻松打造 10 万+ 爆款短视频

UCloud技术

维度数据模型建模过程(Kimball)

大数据技术指南

数据仓库 维度建模 4月日更

拍乐云入选 2021 爱分析·产业数字化厂商全景报告

拍乐云Pano

RTC

一周信创舆情观察(4.5~4.11)

统小信uos

聪明人的训练(十六)

Changing Lin

4月日更

MySQL性能监控与调优

Sakura

4月日更

GraphX图计算组件最短路算法实战

小舰

4月日更

LeetCode题解:17. 电话号码的字母组合,回溯,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

合约量化交易APP开发|合约量化交易系统软件开发

系统开发

【有奖征文】WEB前端大作战,走在技术最前端!

华为云开发者联盟

node.js Vue 大前端 Web Web框架

Java 常见 bean mapper 的性能及原理分析

Java小咖秀

Java bean Copier

Flow Model 的架构与设计_语言 & 开发_薛凌鸿_InfoQ精选文章