2004年03月30日

以前在www.blogbus.com申请的blog又可以用了,不过在donews已经写了不少东西了,也不想再回去了,虽然我喜欢它的定制功能、它的版面、它的数据备份、以及补写日志的功能,但这里更有许许多多的同道中人,也更适合我。尤其是可以用WB Editor,的确方便,虽然我不得不安装20多M的dotnet支持包。为了革命,没办法。

上回写完《阅读笔记(一)》之后,再看一看,不象笔记,还是象翻译。这可能是一边读,一边写的缘故。因此,这次是把内容通读得差不多了,才开始动手写,可能效果会好一些。因此这一次的笔记只记录了我认为最有用的东西,为了更全面地现理解docbook,建议还是看一看原版的吧。如果只是想了解一下,看看这个可能也行(希望如此)吧。

2 Creating DocBook documents

这里我只关注如何生成xml的docbook,因此有关sgml的内容只好请大家自行阅读了。那么要生成xml格式的docbook,应该知道哪些东西呢?

+ 如何才是一个格式正确的xml文档
+ docbook的结构划分
+ docbook的标记使用

如何才是一个格式正确的xml文档

因为使用xml格式,因此,写出来的docbook首先应该是一个格式上正确的xml文件。关于xml语法问题只列出一些重要的地方,更具体的要参考相关的资料。

.xml文档开始必始有一个xml的声明,如<?xml version=”1.0″?>
.属性值必须用引号引起来,可以用单引号(‘),或双引号(“)
.xml是大小写敏感的。有关docbook的元素名全部用小写。
.标记必须要关闭,而且要正确的嵌套

不过要注意的是,格式正确并不等于有效。怎么叫有效,这就必须同DTD联系起来才可以。一个DTD(Document Type Declaration,文档类型声明)用来描述xml中的结构组成,每个结构的格式要求等内容。使用它的目的是对xml文档进行内容检查。因此为了保证你的xml文档是docbook的格式,应该引入DTD,以便对xml进行内容检查。DTD声明一般放在xml声明后。下面是一个例子:

<?xml version=”1.0″?>
<!DOCTYPE book PUBLIC “-//Norman Walsh//DTD DocBk XML V3.1.4//EN”
“http://nwalsh.com/docbook/xml/3.1.4/db3xml.dtd”>

从这个声明可以了解,book是文档的根元素,DTD使用了PUBLIC声明。后面是这个DTD的URI,它是放在网上的。如果使用SYSTEM声明,则说明DTD是放在本地的。要注意,一般要使用file:///地址,如一个例子:

<?xml version=”1.0″?>
<!DOCTYPE book SYSTEM “file:///d:\docbook\docbook-xml-4.2\docbookx.dtd”>

DTD中可以包含内部子集,如定义实体(entity)。这样你可以将一个XML分割成多个文件,然后在主文档中使用实体引用它们以生成一个完整的文档。如:

<?xml version=’1.0′?>
<!DOCTYPE book PUBLIC “-//Norman Walsh//DTD DocBk XML V3.1.4/EN”
http://nwalsh.com/docbook/xml/3.1.4/db3xml.dtd [
<!ENTITY chap1 SYSTEM "chap1.sgm">
<!ENTITY chap2 SYSTEM "chap2.sgm">
]>

Catalog 文件是用来将public声明映射到system声明的一种查找机制。这样文档中可以使用public进行声明,而通过catalog将其定义为本地内容,从而不用从网上去取相应的文档了。

docbook的结构划分

物理分割

你可以将一个xml文档分割成多个文件,然后通过一个主文件引用起来。引用的方法要使用实体。一个主文件的示例如下:

<?xml version=”1.0″?>
<!DOCTYPE book PUBLIC “-//OASIS//DTD DocBook V3.1//EN” [
<!ENTITY chap1 SYSTEM "chap1.sgm">
<!ENTITY chap2 SYSTEM "chap2.sgm">
]>
<book><title>My First Book</title>
&chap1;
&chap2;
</book>

这样每章内容和附录可以写在分离的文件中。要注意的是:这些分割的文件不能再有文档类型的声明。例如,第一章象这样开始:

<chapter id=”ch1″><title>My First Chapter</title>
<para>My first paragraph.</para>

逻辑分割

Sets
Books(书集)
Divisions(将书分成几部分)
Components(将书或divisions分成章)
Sections(Components的子分割)
Meta-information元素
Block元素
Inline元素

我个人的感觉是一级比一级包含的内容要少。

docbook的标记使用

book可以由下列元素组成:

Dedication 贡献页,出现在书的前面
Navigational Components 导航性组件,ToC (Tables of Contents,目录),LoT(Lists of Titles,标题列表,如:图表,表格,例子等的列表),Index(索引)
Divisions 是book下的第一级。他们包含Parts和References。Parts包含components。References包含RefEntrys。
Components 类似于章节的元素

Components可以包含block元素和sections。

section(节)有几种形式(只列常用):

sect1…sect5 注意标准只有5层编号的section
section 可以有任意层嵌套
simlesect 是最终结的section,在其中不能嵌套任何其它section元素
bridgehead 是一个section标题的清单
refsect1…refsect3 只在refentrys中出现

Block元素:

lists 分几种

calloutlist 插图编号列表。一般是用编号的图形
glosslist 术语表
itemizedlist 无序列表
orderdlist 有序列表
segmentdlist 一个重复的命名项的集合。如美国的州和州的首府可以用它来表示
simplelist 简单列表
variablelist 术语和其定义(或描述)的列表

Admonition (警告)

有五种:caution, important, note, tip, warning

对行有特定要求的环境

address(地址), programlisting(与程序相关的源代码,代码片段和类似的东西), screen(屏幕,以文本方式抓取), screenshot(截屏,图片), synopsis(大纲,用于命令和功能的大纲)

例子,图形,表格

example, informalexample, figure, informalfigure, table, informaltable

formal元素有标题,而informal元素没有标题。

段落

para, simpara

公式

equation, informalequation

图片

graphic 常用在figure和screenshot元素中。mediaobject可以引入其它的媒体,包括:视频、音频、图片、文本数据。

Q&A

qandaset,是一个问题question和答案answer的集合

其它block元素

blockquote 块引用
cmdsynopsis 命令的参数和选项的环境
epigraph 在文档前的一段简介,典型的是一段引用
funcsynopsis 函数的参数和返回值的环境
highlights 高亮
msgset 相关错误

Inline 元素

它一般是用来改变字体或其它小的修改,不会引起行或段的分割。

传统印刷inline

abbrev(缩写), emphasis(强调), footnote(脚注), phrase(短语), quote(引用), trademark(注册商标)

交叉引用

anchor(设置锚点), citation(用于引用外部著作的术语), citerefentry(对一个参考页的引用), citetitle(被引用著作的标题), firstterm(一个术语的第一次引用), glossterm(术语), link(链接), olink(强调是间接引用), ulink(强调是通过URL引用), xref(引用文档的其它部分)

Markup 标识

用于标识文本以获得特殊的显示。

数学

用户界面

程序语言和结构

操作系统

等不再列举。更详细地要查看docbook的参考部分,有说明,有示例。

今天在中国Linuxforum.net上有人问我关于Python不支持gb2312码的问题,下面将我的方法描述一下。这里并不涉及IDLE中如何支持中文。

windows平台

找到python安装目录下的lib/encodings/aliases.py文件,编辑,在大约298行处,增加:

‘gb2312′:’mcbs’,

即可。

linux平台

可以到我的主页上下载gb2312.zip包,http://pyrecord.freezope.org/download/gb2312.zip/down,用asc码方式上传到linux中(因为我是在windows下编辑的,因为回车换行是windows的格式。)或者拷贝到linux下,使用dos2unix进行转换即可。将其拷贝到python安装目录下的lib/encodings/下。修改aliases.py文件,增加:

‘gb2312′:’gb2312′,

然后删除aliases.pyc aliases.pyo文件。

2004年03月28日

这篇文章不是我写的,是我从新浪房产上看到的,心有同感。更何况人家已经有新房了,而我呢?还是一无所有。每天我快乐吗?只有在我投入程序的怀报才会忘记我还有痛苦,这痛苦来自自已,来自爱人,来自他人,来自。。。此刻我的心情就象下文所说的“Cry in the night!”虽然我并不真的流泪,但心情是一样的。没有一种归属感。






版权所有:ypcater6899 原作 提交时间:09:18:40 03月26日

 

北京,哪里是我的家!?

搬家了,离开了来到北京最开始的落脚之处,一个相对简陋的但是熟悉的小狗窝。在那里,我度过了到北京的最初六个月。当我开着我的新宝宝来到又一个陌生的地方,周围环境和居住条件要比以前的小狗窝好多了,虽然交通有点不方便,但是心里突然的产生了一种莫名的伤感,仿佛回到了刚到北京的那个晚上——熟悉的城市,陌生的环境。
开着宝宝离开原来居住的小区,门口已经熟悉的警卫看到我车后坐的箱子,问我是否要搬走,同时脸上有一点点的惊讶,霎那间,我对那里产生了留恋!背着自己的背包,进入新窝,条件不错——干净的卫生间和浴室;厨具齐全的厨房;宽敞一些的卧室;一个能看到花园的阳台……但是,还没有宽带,不能上网。吃了点东西,开车出去转了一圈,想到单位去,去上网,到宝局看看,哪怕只是看看。来到北京的感到最寂寞的一个晚上!开着车漫无目的转,同样的音乐,但我却没有什么快乐的感觉。失落,就这么失落着,心里空荡荡的,除了宝宝仿佛一无所有。
终于转了回来,停好车,但没有下车,音乐在继续,点着烟,抽了两根,脑子里好像想着什么,又好像什么都没想。心里的感觉与刚到北京的那个晚上有所不同,对事业的忧虑不存在,而生活的快乐竟忽然的少了。已经习惯了的生活方式,每天晚上,到宝局看看,看看朋友们;每天晚上,MSN聊天,聊些生活的点滴;几乎每天晚上睡觉之前的声声问候“晚安”、“回头见”,注定今天晚上不会有了。一个人,心里不舒服,想毳毳了,想毛毛了,想家了…….一个男人也不容易。突然意识到自己似乎什么都没有,没有了幸福,没有了快乐,剩下的仅仅是丝丝惆怅……
心里默默的问自己:北京,还是北京,哪里是我的家!?
窝还会换的,换到哪里都不是我的家!
计算机打开了,自动运行MSN,但是无法登陆,图标上面一个刺眼的红叉,就将一扇上了锁的门,而我,却是在门的外面。看着宝局活动的照片,看着熟悉的笑脸,悲观的想象如果永远失去这些快乐……心里冷的一悸!回想到了刚来北京还没有朋友的日子,体会到了懒汉的可能会有的伤感。
家,实际上是寄托心灵的地方,目前,毳毳和毛毛来京的日子还是个未知数,多少一些家的感觉只能在宝局里面寻找。我知道,朋友就是朋友,不是家人,我只是自私的或者说有意的寻找一下家的感觉。向来只对快乐敏感的我,今天难免伤感一把。
音乐在继续………Cry in the night!一次哭个痛快!疑问在继续……..北京,哪里是我的家!?

今天去中国书店古旧书市上竟然淘到一本Latex的书,不白来。虽然我已经有好多电子档,但有本纸质的留着也好。原书32元打3折,也就是6块多,便宜了。书名叫《Latex入门与提高》,2002年2月第一次印刷。还是挺新的。此书用的排版系统是我没听过的天元排版系统,是华东师范大学数学系开发的。地址在:http://www.math.ecnu.edu.cn。上面提供此系统的软件下载。有兴趣的可以看一看。(虽然没下载,不过看软件好象不大,可能不是完整的系统。)

2004年03月27日

Crawl是我从《Python核心编程》上抄来的程序,用于抓网页,相应于离线下载工具。不过经过我的改造功能已经大增强。 现在2.0.2增加分析框架页面的能力,可以输入一个框架页面进行下载。


昨天在搞ConTex时,因为王垠的主页上有关于如何在ConTex上配置中文的文章,因此想下载下来在本地看。不过他使用的是框架页面,只好修改crawl,这样就将其抓下来了。没想到同时把王垠主页上别的东东也一同抓呀抓的,文件越来越多,而且好多的图片。连一个24小时学会Emacs的教程都抓下来了,好多东西呀。我只好中途把它停了,不过也证明了crawl运行还算稳定。


以后我想增加文件类型过滤选项。现在已经只能下载文本,CSS和图片,但我可以增加过滤选项,这样把程序什么的也包含进来。同时将所有链接信息保存,将过滤掉的信息单独保存,万一有人想用呢。这样的效果就是:



  • 首先把页面中所有可以下载的链接全部分析出来保存在down.txt中。

  • 然后在下载时,根据过滤选项将过滤的信息放在filter.txt中。

这样分析链接时不用直接进行过滤了,同时也可以看出有哪些过滤得有问题,以便及时调整。而且有了过滤清单的话,如果还想下载其中的东西,不用重新分析页面,直接下载即可。那么是否还应增加对于二进制文件不进行分析的功能。


To do list:



  1. 增加过滤选项功能。

  2. 增加配置文件功能,这样过滤选项不用每次现敲了。其实用批处理文件也是一样。不过这样可能会好些。

  3. 增加过滤信息保存文件功能。

  4. 增加下载二进制文件功能,同时不对其进行分析

这样功能就更全面了。为了方便区分二进制与文本文件也可以考虑将文件后缀规则放在配置文件中。那么还可以提供一个缺省的配置文件crawl.std,用户只要将其改为crawl.ini,再进行修改即可。



这几天被中文问题搞得焦头烂额时,我想还是学一学reportlab工具来直接生成pdf吧。reportlab是用python开发的生成pdf的工具包,它是一个开源软件。下面我说一下我的安装过程。其实这些东西在用户指南中都有,其中讲述了windows, unix, mac, jython下的安装。安装是在windows下进行的。


1.安装python


我装的是python 2.3


2.安装PIL(python image libaray)


可以从http://www.pythonware.com/products/pil/下载最新的1.1.4


3.安装reportlab


可以从http://www.reportlab.org下载1.19版。将安装包解后放在python安装目录的lib/site-pages目录下。


如果安装正确,可以进入它的test目录运行测试程序。


其中有一个多字节码生成的pdf测试文件,打开它你会看到一个汉字表。gb码的每个汉字都放在格子里面,很好看。我会用它做什么呢?这个东西不错。

真被中文搞死了。这不我在学了DocBook之后面临的一大问题是,在实际应用中如何支持中文。生成HTML文件还没什么关系,但生成pdf就乐不起来了。


FOP


只要加入新的字体即可支持中文,但中文的断字有问题。中文的断字是可以在任何汉字中间断开,但同时还要避免标点符号出现在句首。Fop生成的文档可能会中间断开,文档变得古怪。


Docbook in Contex(Tex)


Context中文本支持不错,但用了Docbook In Context包后,信息更乱了。中文是看得见,但效果就太差劲了。安装MikTex虽然不是太费力气,但也不容易。要下载字体包,修改ConTex的配置文件。好在有人写过中文配置说明,它装还顺利。可能定制的话会好些,但Tex可不是一个省油的灯,东西太多,太复杂了。而且ConTex是基于xml的,不是基于xsl-fo的,对于这个,我并不满意。


PassiveTex


又是一个Tex的实现。安装没什么问题,与Docbook in Contex不同,它处理的是xsl-fo文件,这个固然好,但现在还不知道如何使其支持中文。


头痛。


现在想一想,我要的其实是与HTML效果差不多就行了,那么有两种解决方案我是可以接受的:


HTML->PDF
Xsl-FO->PDF


对于第一种情况,等HTMLDOC 1.9出来再说吧


第二种情况,还没有好的方法或工具。如果能解决Fop的断字问题,我想,暂时我可以满足了。


实现不行,难道要我用Tex吗?

2004年03月25日

下面是从LUA主页上粘贴过来的,有兴趣的可以看一看。

Lua is a powerful light-weight programming language designed for extending applications. Lua is also frequently used as a general-purpose, stand-alone language. Lua is free software.

Lua combines simple procedural syntax with powerful data description constructs based on associative arrays and extensible semantics. Lua is dynamically typed, interpreted from bytecodes, and has automatic memory management with garbage collection, making it ideal for configuration, scripting, and rapid prototyping.

A fundamental concept in the design of Lua is to provide meta-mechanisms for implementing features, instead of providing a host of features directly in the language. For example, although Lua is not a pure object-oriented language, it does provide meta-mechanisms for implementing classes and inheritance. Lua’s meta-mechanisms bring an economy of concepts and keep the language small, while allowing the semantics to be extended in unconventional ways. Extensible semantics is a distinguishing feature of Lua.

Lua is a language engine that you can embed into your application. This means that, besides syntax and semantics, Lua has an API that allows the application to exchange data with Lua programs and also to extend Lua with C functions. In this sense, Lua can be regarded as a language framework for building domain-specific languages.

Lua is implemented as a small library of C functions, written in ANSI C, and compiles unmodified in all known platforms. The implementation goals are simplicity, efficiency, portability, and low embedding cost. The result is a fast language engine with small footprint, making it ideal in embedded systems too.


LUA 主页地址:http://www.lua.org/


我在windows(cygwin环境)下安装步骤:



  1. 将lua最新版5.0.2解压到一个目录

  2. 执行./configure

  3. 运行make

这样在lua安装目录的bin目录下就有两个程序lua.exe和luac.exe。lua是用来执行lua脚本的解释器。luac是用来将lua脚本编译成字节码。(现在是个脚本就提供编译成字节码的功能)


test目录下有一些例子可以试一试。很有趣!


如果可用的话,我的目标是将其应用到系统软件开发中,提供灵活的配置功能。

在网上找到关于unicode组织发表的关于如何断行的规范,有时间研究一下。


http://www.unicode.org/unicode/reports/tr14/