[译] 探索LibreOffice的源代码库

发表于

分类:

本文最初由 Eilidh McAdam 发表于 Lanedo 博客,由 LibreOffice 中文社区翻译。

初次查看LibreOffice的源代码,您会被它庞大的代码量所吓倒。本文列出了LibreOffice代码库中一些有用的目录结构,希望有助于您入门。

总体布局

LibreOffice 由100多个相互依赖的模块组成, 每个模块位于LibreOffice源代码根目录下的一个文件夹中。请注意,除非特别注明,以下提到的所有路径都是相对于这个根目录的。每个模块一般都遵循特定的规则,至少包含以下文件或目录:

moduledir/README
一般包含关于该模块用途以及内容的描述。您可以在docs.libreoffice.org 找到所有的LibreOffice模块以及这些模块README第一行内容的清单。
moduledir/*.mk
各种编译可能性下的 gbuild makefiles.
moduledir/source/
源代码(一般情况下是 C++)。经常会有源代码以子模块(submodules)的形式出现。

头文件 (headers)

您会在多个地方看到头文件,这取决于定义的接口需要的最小作用范围 (Scope)。

include/
模块间的头文件。
moduledir/inc/
模块内的头文件。
moduledir/source/submoduledir/inc/
仅某个子模块要求的头文件。

在偶然的情况下,头文件也有可能在它们的 .cxx 函数实现中一同出现。

UI(用户界面)

如果一个模块有关联的GUI,则主要存在两种情况。目前,将用户界面规范从老旧的.src/.hrc格式转换为基于xml的 Glade/Gtk3 .ui 格式的工作正在进行中。

moduledir/uiconfig/
新的Glade风格的 .ui 文件。
moduledir/source/ui/
其它的 .src 文件。

编译系统

有一个来自2013年米兰LibreOffice年会上的非正式幻灯片,探讨了LibreOffice的编译系统状况。以下部分只列出了简短的概要,该幻灯片对一些细节有更细致的描述。

solenv/
包含编译系统的很多重要部分。
solenv/gbuild
gbuild 实现。
solenv/bin ; solenv/bin/modules/
Perl 编译和打包工具。
scp2/
打包和安装的配置文件。

当使用 ./autogen.sh 以及 make 完成了LibreOffice的编译之后,一个可运行的完整安装可在以下位置找到:

instdir/program/

在那里您可以找到 soffice.bin 以及 soffice. 前者是LibreOffice的主要二进制程序。当首次运行时,它建立用户配置文件 (user profile) 并退出,之后就可以再次以正常方式运行了。要避免该过程,应当使用包装程序 soffice 作为测试目的来运行LibreOffice。当以debugger模式运行LibreOffice时,应当直接使用 soffice.bin .

主要部件

LibreOffice Writer 文本文档

由于LibreOffice在历史上属于Sun的Star分支,它的主要部件位置包含了指向该legacy的提示。比如 ,Writer模块包含在 sw/ 目录中 (StarWriter)。

sw/
Writer的主要模块。
starmath/
数学公式编辑器。
swext/
内置的Writer扩展。

LibreOffice Calc 电子表格

sc/
Calc的主要代码。
chart2/
Calc的图表实现。

LibreOffice Draw 绘图(以及 LibreOffice Impress 演示文稿)

sd/
Draw和Impress共用一个模块以及这里的相当大一部分代码。
sdext/
Draw和Impress的扩展。

仅 LibreOffice Impress 演示文稿

slideshow/
Impress的幻灯片演示引擎。

图形模块

svx/
包含由几个主要模块共享的图形 (graphics) 辅助代码,尤其是Draw和Impress。
drawinglayer/
为绘图对象提供了一个API。

文档

sfx2/
包含被sw, sc和sd使用的用于调用document shells的框架。该模块包含文档载入及保存处理,文档载入和保存会分别激发正确的导入(import)和导出(export)筛选器。
writerfilter/
Writer .rtf 导入筛选器,以及部分的 .docx 导入筛选器。
writerperfect/
一个Writer导入筛选器家族,包含 WordPerfect, Microsoft Publisher 以及 Microsft Visio 文档格式导入筛选器。
oox/
对微软OOXML格式解析的支持 (.docx, .xlsx, etc.)

如果您想要解决Libreoffice的bug或者设计新的功能,通过以上的描述,希望您能知道该从何处下手。若需要更多帮助和资源,请参考我的 LibreOffice Development Howto 。如果需要专业支持,请随时联系我们


评论:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注