跳到主要内容
LibreOffice

开发者指南

把改动放进 LibreOffice

写扩展,或者直接改代码库。下面是两条路径的差别、最值得先读的模块,以及提交改动时会用到的约定。

两条开发路径

直接在代码库上开发

推荐路径

想给 LibreOffice 加一个普遍有用的功能,最佳方式还是在代码库上工作。这样更容易编译与构建自己的代码,避开了脚本 API 中种种任意的限制,对一名还算胜任的 C++ 程序员来说也简单直观得多。

用 SDK 写扩展

这条路相对不那么推荐。它复用极其通用的 UNO API,同一批 API 也被 StarBasic 宏脚本使用,适合在脚本层做扩展,或把现成功能打包成可分发的组件。

代码中的关键部分

仓库里有两百个模块,很多只对特定领域的专家才有意义。下面这些是最值得先读的几个。

核心基础设施

想理解套件怎么跑起来,从这几个目录读起。

  • sal/

    一层轻量的系统抽象层。

  • tools/

    基础内部类型,例如 Rectangle 与 Color。

  • vcl/

    部件工具包库与渲染抽象层,界面长什么样由它决定。

  • framework/

    UNO 框架,用 VCL 部件和 uiconfig 中的 XML 搭出菜单、工具栏与状态栏。

  • sfx2/

    Writer、Calc、Draw 共用的遗留核心框架:文档模型、载入保存与动作信号。

  • svx/

    绘图模型相关的辅助代码,Draw 与 Impress 的大部分实现在这里。

应用程序

六款应用各自的主战场。

  • desktop/

    程序的 main() 所在,负责初始化与启动引导。

  • sw/

    文字处理 Writer。

  • sc/

    电子表格 Calc。

  • sd/

    绘图 Draw 与演示 Impress。

图形库

想改渲染效果,从这几个目录下手。

  • basegfx/

    画布中图形的基础算法与数据类型。

  • canvas/

    全新的 UNO 画布渲染模型,带多种后端。

  • cppcanvas/

    使用 UNO 画布的 C++ 辅助类。

  • drawinglayer/

    把可绘制对象拆成更容易渲染的基本图元。

#include 指令规则

这一条规则看似琐碎,但它统一了整个仓库的风格,编译期就会检查。

仅当被包含文件与包含它的文件相邻时,才使用 "..." 形式。否则,使用 <...> 形式。
UNO API 的包含文件应当一致地使用双引号,以惠及该 API 的外部使用者。

规则讨论原文
includeform.cxx 约定的写法
#include "myhelper.hxx"                    // 与当前文件相邻,用双引号
#include <sal/macros.h>                        // 其他位置,用尖括号
#include <vcl/inc/vcl.h>
#include "com/sun/star/uno/XComponent.hxx"     // UNO API 统一用双引号
PVS-Studio
面向 C、C++、C# 与 Java 代码的静态分析器,LibreOffice 用它做 SAST 扫描。查看
loplugin:includeform
编译期强制执行头文件包含规则的插件,路径 compilerplugins/clang/includeform.cxx。查看