No Description
andreas kainz b91a8dc835 tdf#107144 make notes icons yellow in colibre 10 hours ago
.git-hooks Remove unhelpful "Check for whitespace in front of *'s" from .git-hooks 2 months ago
UnoControls Use osl_atomic_increment/osl_atomic_decrement to change m_refCount 2 weeks ago
accessibility Exit from search loop when condition is satisfied 4 days ago
android update references about selective debuginfo in android/README 1 week ago
animations clang-tidy modernize-avoid-c-arrays in animations 2 weeks ago
apple_remote Fix typo 2 weeks ago
avmedia use more std::make_unique 1 week ago
basctl tdf#123043 make type character detection unicode-aware 2 days ago
basegfx loplugin:sequentialassign in accessiblity..canvas 1 week ago
basic Fix typo 19 hours ago
bean Fix typo 5 days ago
bin node.firstChild seen as None 6 days ago
binaryurp Some uses of C++17 class template argument deduction 2 months ago
bridges optimise find/insert pattern 6 days ago
canvas Cut down on -pthread/-lpthread proliferation 4 hours ago
chart2 WIP: Further preparations for deeper Item changes 6 hours ago
cli_ure Fix typo 1 week ago
codemaker tdf#120703 PVS: Silence V522 warnings 1 week ago
comphelper Fix typo 4 days ago
compilerplugins tdf#89522 PERF FILEOPEN xlsx, part 1 1 day ago
config_host build: support disabling poppler 1 month ago
configmgr optimise find/insert pattern 6 days ago
connectivity Resolves: rhbz#1702810 Prepare for upcoming libebook soname version bump 3 hours ago
cppcanvas Fix typo 5 days ago
cppu Fix typo 3 days ago
cppuhelper Fix typo 5 days ago
cpputools Fix typo 5 days ago
cui WIP: Further preparations for deeper Item changes 6 hours ago
dbaccess WIP: Further preparations for deeper Item changes 6 hours ago
desktop Cut down on -pthread/-lpthread proliferation 4 hours ago
dictionaries @ 5fe575dbcf Update git submodules 5 days ago
distro-configs There is no --disable-ext-mariadb-connector option any longer 1 month ago
drawinglayer Fix typo 2 days ago
dtrans Don't use resettable/clearable guard where plain guard is enough 2 weeks ago
editeng WIP: Further preparations for deeper Item changes 6 hours ago
embeddedobj loplugin:sequentialassign in embeddedobj..l10ntools 1 week ago
embedserv clang-tidy: Fix suspicious catches of WIP unhandled-self-assignment check 2 weeks ago
emfio loplugin:sequentialassign in editeng..extensions 1 week ago
eventattacher tdf#120703 PVS: remove redundant static casts 2 months ago
extensions tdf#42949 Fix IWYU warnings in comphelper 6 days ago
external Cut down on -pthread/-lpthread proliferation 4 hours ago
extras weld ScOptSolverDlg 1 week ago
filter Fix typo 7 hours ago
forms Fix typo 4 days ago
formula drop some unneeded includes 6 days ago
fpicker loplugin:sequentialassign in filter..fpicker 1 week ago
framework tdf#45904 Move TableColumn Java tests to C++ 1 day ago
helpcompiler std::string has a std::hash specialisation since C++11 2 weeks ago
helpcontent2 @ f52790876d Update git submodules 2 days ago
hwpfilter clang-tidy: Fix suspicious catches of WIP unhandled-self-assignment check 2 weeks ago
i18nlangtag Re-generate from 3/13/2019 13.0 revision 4 hours ago
i18npool improve loplugin simplifyconstruct 1 week ago
i18nutil loplugin:indentation in helpcompiler..io 2 months ago
icon-themes tdf#107144 make notes icons yellow in colibre 3 hours ago
idl loplugin:unusedfields look for classes where we can make all the.. 1 month ago
idlc loplugin:cstylecast 1 month ago
include Add LANGUAGE_reserved_0xEEEE and LANGUAGE_reserved_0xF2EE 3 hours ago
instsetoo_native tdf#122302: Set status message when installing KB2999226 4 months ago
io tdf#42949 Fix IWYU warnings in io/ 14 hours ago
ios tdf#124449: We need also share/gallery for the iOS app 1 week ago
javaunohelper tdf#120703 PVS: Silence V522 warnings 3 weeks ago
jurt Cut down on -pthread/-lpthread proliferation 4 hours ago
jvmaccess Improve re-throwing of UNO exceptions 11 months ago
jvmfwk improve loplugin simplifyconstruct 1 week ago
l10ntools tdf#124791: Fix Gaelic (Scotland) (gd-GB) LCID in MSI installer 1 day ago
librelogo LibreLogo: fix RANGE with a single function argument 5 hours ago
libreofficekit Cut down on -pthread/-lpthread proliferation 4 hours ago
lingucomponent The iOS sv_SE dictionary surely works for sv_FI, too 1 day ago
linguistic improve loplugin simplifyconstruct 1 week ago
lotuswordpro tdf#120703 PVS: Silence V522 warnings 1 week ago
m4 Fix typos 1 year ago
nlpsolver tdf#43388: add missing info for Evolutionary Algorithm Solver 10 months ago
o3tl o3tl::make_unique -> std::make_unique in include/ & o3tl/ 2 months ago
odk fix usage of successful/successfully in comments 1 week ago
offapi Fix typo in code 5 days ago
officecfg tdf#120273 Ctrl-N should open a new document when a chart is selected 1 week ago
onlineupdate Cut down on -pthread/-lpthread proliferation 4 hours ago
oovbaapi Add XWordBasic.FileSaveAs() and implement 6 days ago
oox ofz#14422 null deref 10 hours ago
opencl Simplify containers iterations in oox, opencl, package 2 months ago
osx Rename Mac OS X to official name macOS in comments and documentation 4 months ago
package optimise find/insert pattern 6 days ago
postprocess Use sort on finds to improve deterministic build 2 weeks ago
pyuno loplugin:sequentialassign in oox..reportdesign 1 week ago
qadevOOo tdf#45904 Move TableColumn Java tests to C++ 1 day ago
readlicense_oo update credits 11 hours ago
registry optimise find/insert pattern 6 days ago
remotebridges New loplugin:external 7 months ago
reportbuilder Fix typos 3 weeks ago
reportdesign tdf#113266 slow opening XLS with 45 MB drawing 2 days ago
ridljar Fix typo 9 months ago
sal Cut down on -pthread/-lpthread proliferation 4 hours ago
salhelper tdf#42949 Fix IWYU warnings in salhelper/ 3 months ago
sax Further cleanup of FastSerializerHelper's startElement/singleElement[NS] 6 days ago
sc Cut down on -pthread/-lpthread proliferation 4 hours ago
scaddins re-land "new loplugin typedefparam"" 1 month ago
sccomp o3tl::make_unique -> std::make_unique in include/ & o3tl/ 2 months ago
schema tdf#123557 PPTX: Export timenode condition targets. 1 month ago
scp2 tdf#114311 Translate "LibreOffice Extension" file type in Windows 3 weeks ago
scripting loplugin:sequentialassign in sd 6 days ago
sd WIP: Further preparations for deeper Item changes 6 hours ago
sdext loplugin:sequentialassign in sd 6 days ago
setup_native tdf#124794: Wait for WU service stopped before launching wusa.exe 3 days ago
sfx2 WIP: Further preparations for deeper Item changes 6 hours ago
shell Stop qt event loop after KDE settings have been read 1 week ago
slideshow tdf#124756 slideshow: avoid mbPaintDisabled for media windows 1 week ago
smoketest Cut down on -pthread/-lpthread proliferation 4 hours ago
solenv Cut down on -pthread/-lpthread proliferation 4 hours ago
soltools tdf#120703 PVS: Silence V522 warnings 3 weeks ago
sot Use osl_atomic_increment/osl_atomic_decrement to change m_refCount 2 weeks ago
starmath Further cleanup of FastSerializerHelper's startElement/singleElement[NS] 6 days ago
stoc loplugin:sequentialassign in starmath..svl 1 week ago
store loplugin:sequentialassign in starmath..svl 1 week ago
svgio loplugin:sequentialassign in starmath..svl 1 week ago
svl Cut down on -pthread/-lpthread proliferation 4 hours ago
svtools tdf#124572 TabBar new look, protected icon, width and height 17 hours ago
svx Cut down on -pthread/-lpthread proliferation 4 hours ago
sw UITest_writer_tests5: disable flaky print preview test 5 hours ago
swext Help files: http -> https 5 months ago
sysui tdf#122244 Put InfoPlist.strings files at correct places on macOS 12 hours ago
test assertXPath: disallow passing rAttribute without rExpectedValue 11 hours ago
testtools re-land "new loplugin typedefparam"" 1 month ago
toolkit Fix uses of variables before their lifetimes begin 1 week ago
tools cleanup and rename COLORDATA_RGB to color::extractRGB 3 days ago
translations @ 926f46dde8 Update git submodules 11 hours ago
ucb tdf#124635 MountOperation::Mount can be called with SolarMutex unlocked 2 days ago
ucbhelper Removed duplicated includes 1 week ago
udkapi Fix typos 2 weeks ago
uitest Fix one more get_url_for_data_file 2 weeks ago
unodevtools optimise find/insert pattern 6 days ago
unoidl loplugin:includeform 1 month ago
unoil Use https instead of http 1 year ago
unotest tdf#42949 Fix IWYU warnings in include/comphelper/[m-z]* 6 months ago
unotools optimise find/insert pattern 6 days ago
unoxml optimise find/insert pattern 6 days ago
ure remove more rtl::OUString and OString prefixes 6 months ago
uui Resolves: tdf#115964 force password dialog to center on parent size request 1 week ago
vbahelper Fix typo 2 days ago
vcl Cut down on -pthread/-lpthread proliferation 4 hours ago
winaccessibility tdf#120703: partially revert commit 85456fae54 2 weeks ago
wizards tdf#124197 Improve "Unexpected error" user-visible error message wording 1 day ago
writerfilter related tdf#123636 writerfilter: split newline also if PAGE_BREAK 19 hours ago
writerperfect fix filename of a test file in writerperfect 1 day ago
xmerge Fix typos 9 months ago
xmlhelp improve loplugin simplifyconstruct 1 week ago
xmloff xmloff: create XMLImpressMetaExportOasis instances with an uno constructor 17 hours ago
xmlreader tdf#42949 Fix IWYU warnings in xmlreader/ 2 months ago
xmlscript tdf#120703 PVS: remove redundant static casts 3 weeks ago
xmlsecurity Properly initialize gpgme-w32spawn.exe path on Windows 4 days ago
.buckconfig Add build toolchain to upload LibreOffice API to Maven Central 3 years ago
.buckversion Add build toolchain to upload LibreOffice API to Maven Central 3 years ago
.clang-format Retrofit "KeepEmptyLinesAtTheStartOfBlocks: false" into .clang-format 1 year ago
.editorconfig We have some Objective-C source files, too 1 year ago
.gitattributes Ignore schema files for src tarball generation 2 years ago
.gitignore No more need to generate lo.xcent from lo.xcent.in 4 months ago
.gitmodules uset https:// instead of git:// for submodules 4 months ago
.gitreview git-review integration: .gitreview for core repository added 6 years ago
BUCK Add build toolchain to upload LibreOffice API to Maven Central 3 years ago
COPYING Licencing files 8 years ago
COPYING.LGPL Licencing files 8 years ago
COPYING.MPL Targetted text updates, with seasonable changes before l10n freeze. 5 years ago
Library_merged.mk gbuild: Remove MSVC 2013 legacy code 2 years ago
Makefile.fetch cURL: follow redirects 1 month ago
Makefile.gbuild updater: workaround cygwin python bug around command line arguments 1 year ago
Makefile.in That bin directory should no longer be there 9 hours ago
README.Solaris remove use of Archive::Zip 2 years ago
README.cross Rename Mac OS X to official name macOS in comments and documentation 4 months ago
README.md Bump (Linux) GCC baseline to 7.0.0 4 months ago
Repository.mk tdf#124238 - Show a Tip-Of-The-Day dialog on startup 2 weeks ago
RepositoryExternal.mk build: support disabling poppler 1 month ago
RepositoryFixes.mk Rename Mac OS X to official name macOS in comments and documentation 4 months ago
RepositoryModule_build.mk migrate to boost::gettext 1 year ago
RepositoryModule_host.mk Moving mysqlc into connectivity as a library 8 months ago
TEMPLATE.SOURCECODE.HEADER Add fill-column: 100 to the Emacs mode line 2 years ago
autogen.sh autogen.sh: add --help description about the --with-distro switch 1 month ago
config.guess Update config.{guess,sub} 1 year ago
config.sub Update config.{guess,sub} 1 year ago
config_host.mk.in merge --enable-selective-debuginfo into --enable-symbols 2 weeks ago
config_host_lang.mk.in gbuild: allow to react on change in configured langs 4 years ago
configure.ac Allow to pass JAVA_SOURCE/TARGET_VER into configure 1 day ago
download.lst extern: update xmlsec to 1.2.28 1 day ago
g ./g: don't exit early on ./g checkout -f 9 months ago
install-sh update install-sh to the automake-1.11 version 7 years ago
leak-suppress.txt migrate to boost::gettext 1 year ago
lo.xcent No more need to generate lo.xcent from lo.xcent.in 4 months ago
logerrit Fix typo 1 month ago
sanitize-ubsan-blacklist file for ci-based ubsan build 3 years ago
setup.cfg pep8 -> pycodestyle 6 months ago

README.md

LibreOffice

Coverity Scan Build Status CII Best Practices

LibreOffice is an integrated office suite based on copyleft licenses and compatible with most document formats and standards. Libreoffice is backed by The Document Foundation, which represents a large independent community of enterprises, developers and other volunteers moved by the common goal of bringing to the market the best software for personal productivity. LibreOffice is open source, and free to download, use and distribute.

A quick overview of the LibreOffice code structure.

Overview

You can develop for LibreOffice in one of two ways, one recommended and one much less so. First the somewhat less recommended way: it is possible to use the SDK to develop an extension, for which you can read the API docs here and here. This re-uses the (extremely generic) UNO APIs that are also used by macro scripting in StarBasic.

The best way to add a generally useful feature to LibreOffice is to work on the code base however. Overall this way makes it easier to compile and build your code, it avoids any arbitrary limitations of our scripting APIs, and in general is far more simple and intuitive - if you are a reasonably able C++ programmer.

The build chain and runtime baselines

These are the current minimal operating system and compiler versions to run and compile LibreOffice, also used by the TDF builds:

  • Windows:
    • Runtime: Windows 7
    • Build: Cygwin + Visual Studio 2017
  • macOS:
    • Runtime: 10.10
    • Build: 10.13.2 + Xcode 9.3
  • Linux:
    • Runtime: RHEL 6 or CentOS 6
    • Build: either GCC 7.0.0; or Clang 5.0.2 with libstdc++ 7.3.0
  • iOS (only for LibreOfficeKit):
    • Runtime: 11.4 (only support for newer i devices == 64 bit)
    • Build: Xcode 9.3 and iPhone SDK 11.4

If you want to use Clang with the LibreOffice compiler plugins, the minimal version of Clang is 5.0.2. Since Xcode doesn’t provide the compiler plugin headers, you have to compile your own Clang to use them on macOS.

You can find the TDF configure switches in the distro-configs/ directory.

To setup your initial build environment on Windows and macOS, we provide the LibreOffice Development Environment (LODE) scripts.

For more information see the build instructions for your platform in the TDF wiki.

The important bits of code

Each module should have a README file inside it which has some degree of documentation for that module; patches are most welcome to improve those. We have those turned into a web page here:

https://docs.libreoffice.org/

However, there are two hundred modules, many of them of only peripheral interest for a specialist audience. So - where is the good stuff, the code that is most useful. Here is a quick overview of the most important ones:

Module Description
sal/ this provides a simple System Abstraction Layer
tools/ this provides basic internal types: ‘Rectangle’, ‘Color’ etc.
vcl/ this is the widget toolkit library and one rendering abstraction
framework UNO framework, responsible for building toolbars, menus, status bars, and the chrome around the document using widgets from VCL, and XML descriptions from /uiconfig/ files
sfx2/ legacy core framework used by Writer/Calc/Draw: document model / load/save / signals for actions etc.
svx/ drawing model related helper code, including much of Draw/Impress

Then applications

Module Description
desktop/ this is where the ‘main’ for the application lives, init / bootstrap. the name dates back to an ancient StarOffice that also drew a desktop
sw/ Writer
sc/ Calc
sd/ Draw / Impress

There are several other libraries that are helpful from a graphical perspective:

Module Description
basegfx/ algorithms and data-types for graphics as used in the canvas
canvas/ new (UNO) canvas rendering model with various backends
cppcanvas/ C++ helper classes for using the UNO canvas
drawinglayer/ View code to render drawable objects and break them down into primitives we can render more easily.

Rules for #include directives (C/C++)

Use the "..." form if and only if the included file is found next to the including file. Otherwise, use the <...> form. (For further details, see the mail Re: C[++]: Normalizing include syntax (“” vs <>).)

The UNO API include files should consistently use double quotes, for the benefit of external users of this API.

loplugin:includeform (compilerplugins/clang/includeform.cxx) enforces these rules.

Finding out more

Beyond this, you can read the README files, send us patches, ask on the mailing list libreoffice@lists.freedesktop.org (no subscription required) or poke people on IRC #libreoffice-dev on irc.freenode.net - we’re a friendly and generally helpful mob. We know the code can be hard to get into at first, and so there are no silly questions.