7.2 平面文档的表示

在这一章,我们将要开发一个用于显示文档的应用程序。首先设计文档的表示形式,适合于绘制在屏幕上。使用这种表示方式,文档就是元素的列表,其中包含一定内容(可以是文本,也可以是图像),和指定的边框,在边框中绘制具体内容。图7.1是一个文档的示例,有三个突出显示的元素。

我们看一下用 F# 表示文档的数据结构。清单 7.4 引入了新的表示两种类型元素的差别联合,和新的表示文本元素的记录类型,还使用了我们先前定义的 Rect 类型。

图 7.1 示例文档包含三个元素,两个显示不同字体的文本和一个显示图像。

清单 7.4 平面文档的表示 (F#)

open System.Drawing  <-- 包含字体类

type TextContent =    [1]

{ Text : string

Font : Font }

type ScreenElement =    [2]

| TextElement of TextContent * Rect

| ImageElement of string * Rect    <-- 保存图像文件名

在此示例中,我们定义了两个类型。首先,我们定义了名为 TextContent 的记录类型,表示用于绘制的文本和字体,第二个类型称为 ScreenElement,是差别联合,有两个可选值。第一个可选值存储文本内容,第二个包含图像的文件名。两者都有一个 Rect 来定义绘制的边框。清单7.5 显示了表示图 7.1 的示例文档的代码,用到了我们新的数据类型。

清单 7.5 用元素列表表示示例文档 (F#)

let fntText = new Font("Calibri",12.0f)   | 创建标题和常规文本的字体

let fntHead = new Font("Calibri",15.0f)  |

let elements =  <-- 创建ScreenElement 值列表

[ TextElement

({ Text ="Functional Programming for the Real World"

Font = fntHead },

{ Left = 10.0f;Top = 0.0f; Width = 410.0f; Height = 30.0f });

ImageElement

("cover.jpg",

{ Left= 120.0f; Top = 30.0f; Width = 150.0f; Height = 200.0f });

TextElement

({ Text ="In this book, we‘ll introduce you to the essential " +

"concepts of functional programming, but thanks to the .NET " +

"Framework, we won‘t be limited to theoretical examples. " +

"We‘ll use many of the rich .NET libraries to show how " +

"functional programming can be used in the real world."

Font = fntText },

{Left = 10.0f; Top = 230.0f; Width = 400.0f; Height = 400.0f }) ]

首先,我们定义两种不同文本元素的字体,然后,构造包含元素的列表。创建元素时,我们使用了前面讨论的语,创建了几个 F# 记录类型值。用这种方式构造结构化文档,并不实用;在 7.3 节,我们将设计另一种表示形式,更适合创建文档。在此之前,我们仍用这种表示形式保存文档,将实现绘制文档的函数。

时间: 2024-11-11 01:17:39

7.2 平面文档的表示的相关文章

Python sphinx-build在Windows系统中生成Html文档

看到前同事发布的"Markdown/reST 文档发布流水线"基于TFS.Docker.Azure等工具和平台进行文档发布的介绍说明,不得不在心中暗暗竖起大拇指.这套模式,实现了文档编写后版本管理.发布.存档.分享的高度自动化,它不仅仅可以应用在文章中介绍的技术文档发布模式,同样也适用于我们大多数web.app等软件生命周期过程模式.DevOps一词的盛行,绝对不是软件行业中又一个流行语的鼓吹和炒作,而是软件过程的一种发展和进化.结合自动化平台.Docker.云平台等优秀技术和产品.软

【VR】Leap Motion 官网文档 HandModel(手部模型)

前言: 本系列译文是为迎合Unity VR的热潮与大家的学习需要,推出的针对Unity方向的Leap Motion官方文档中英对照翻译. 本篇为第六篇 <HandModel(手部模型)> ,该类主要用于连接控制器和手部模型,以及处理手臂.肘部.手掌.手指的位置和角度等信息. Handmodel is the base class for all the other hand scripts. If you are creating your own hands and need a custo

ffmpeg文档17-视频编码器

17 视频编码器 介绍一些当前有效的视频编码器 libtheora libtheora的封装 编译需要头和库文件,还需要利用--enable-libtheora在配置中允许 更多信息参考http://www.theora.org/ libtheora选项 下面是映射给libtheora的全局选项,它们对品质和码率产生影响. b 对CBR(固定码率编码)设置码率,单位bit/s,在VBR(动态码率编码)模式下本选项被忽略. flags 设置是否允许qscale标志(恒定质量模式——VBR模式下)在

XML概念,约束文档,解析

day01总结 今日内容 l XML语法 l XML约束之DTD l XML解析器介绍 l XML解析之JAXP( DOM.SAX ) l DOM4J l Schema 一.XML语法 XML概述 1 什么是XML XML全称为Extensible Markup Language, 意思是可扩展的标记语言,它是 SGML(标准通用标记语言)的一个子集. XML语法上和HTML比较相似,但HTML中的元素是固定的,而XML的标签是可以由用户自定义的. W3C在1998年2月发布1.0版本: W3C

Umbraco(6)-Creating More Pages Using the Master - Part 2(翻译文档)

创建一个Contact Us页面 我们将创建一个新的”联系我们“页面,在该页面我们将放置简单的联系信息.对于添加这个功能你可能想替换为一个完全成熟的形式. 一些有效的解决方案: 使用表面控制器构建自己的接触形式: http://our.umbraco.org/documentation/Reference/Templating/Mvc/forms或者是 http://umbraco.tv/videos/developer/fundamentals/surface-controllers/ 如果你

7.3.2 用 XML 表示文档

XML 格式非常流行,非常适合于保存分层次的数据,比如,上一节的文档.如何处理 XML,对于许多实际应用非常重要,因此,在这一节,我们要扩展我们的应用程序,以支持从 XML 文件加载文档.我们将使用.NET 3.5 的 LINQ to XMLAPI 完成大部分的困难工作,自己再写另外的 XML 解析器没有任何意义.LINQto XML 是函数概念应用于主流框架的很好示例:虽然它不是纯粹的函数式 API(类型一般是可变的),但是对象能够以递归和声明的形式构造,这就使代码的结构一目了然,因此,比使用

从文档流角度理解浏览器页面渲染引擎对元素定位的解析

文档流:将窗体自上而下分成一行一行,并在每行中按从左至右的挨次排放元素,即为文档流. 我们在排列元素时,遵循"流式结构",即元素遵循从上向下,从左向右堆叠的规则,所以我们在排列元素时如果每行从左往右的元素的总宽度大于窗口的宽度时,就会默认换行. 有三种状况将使得元素离开文档流而存在,分别是浮动.绝对定位.固定定位. 浮动时,离开文档流后的元素,不占用文档流的空间,不会被文档流中的元素发现,离开文档流元素后面的还在文档流上元素会自动上来填补位置接上文档流.此时,离开文档流的元素如同浮在文

文档/视图结构详细介绍

以单文档界面(SDI)应用程序为例,介绍MFC的文档/视图程序结构. 学习要求 理解文档/视图结构,可在AppWizard生成的SDI程序框架的基础上添加必要的代码,以生成自己的应用程序. 授课内容 大部分应用程序均要使用数据,其主要工作可以分为两部分:一是对数据的管理,如存储.复制和查询等任务,一是对数据的处理和输入输出,包括显示和打印.MFC提供了“文档/视图”结构支持这类应用程序. 12.1文档/视图概念 在文档/视图结构里,文档可视为一个应用程序的数据元素的集合,MFC通过文档类提供了大

css之float之非完全脱离文档流

非完全脱离文档流  左右结构div盒子重叠现象,一般是由于相邻两个DIV一个使用浮动一个没有使用浮动.一个使用浮动一个没有导致DIV不是在同个"平面"上,但内容不会造成覆盖现象,只有DIV形成覆盖现象. <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <s