You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Stephan Bergmann c1fbdc8717 Document fishy loplugin:fakebool behavior 1 week ago
.git-hooks Don't count terminating newline when determining line length 3 days ago
.github Add donation info for GitHub 4 months ago
UnoControls Extend loplugin:external to warn about enums 2 weeks ago
accessibility remove some unnecessary includes and update pches 2 days ago
android android: Allow zooming for Calc as well 2 days ago
animations Extend loplugin:external to warn about classes 2 weeks ago
apple_remote Fix typo 7 months ago
avmedia loplugin:mergeclasses SoundHandler 6 days ago
basctl remove some unnecessary includes and update pches 2 days ago
basegfx Adapt SAL_WARN to C++20 deleted ostream << for sal_Unicode (aka char16_t) 3 days ago
basic tdf#129227: this was always appending, not prepending 16 hours ago
bean cid#1448230 Dereference null return value 2 weeks ago
bin make some classes module private 1 day ago
binaryurp Improved loplugin:stringconstant (now that GCC 7 supports it): binaryurp 4 months ago
bridges loplugin:external (macOS) 9 hours ago
canvas loplugin:external (clang-cl) 1 day ago
chart2 Fix typo 1 day ago
cli_ure Fix typos 2 months ago
codemaker loplugin:stringadd improve detection 1 month ago
comphelper remove some useless comment lines 3 days ago
compilerplugins Document fishy loplugin:fakebool behavior 5 hours ago
config_host Qt5 fix missing XCB_ICCCM_WM_HINT_WINDOW_GROUP 12 hours ago
configmgr use std::move when popping stuff off stacks 3 weeks ago
connectivity Fix some new dependencies on boost_headers 7 hours ago
cppcanvas Introduce o3tl::optional as an alias for std::optional 5 days ago
cppu Adapt CPPUNIT_ASSERT to C++20 deleted ostream << for sal_Unicode (aka char16_t) 3 days ago
cppuhelper Fix typo 1 day ago
cpputools Extend loplugin:external to warn about classes 2 weeks ago
cui Resolves: tdf#128923 should be able to change attributes of multiple lines... 7 hours ago
dbaccess drop some unnecessary includes 3 days ago
desktop LO extension Dialog move Header and filters to the top 1 day ago
dictionaries @ 4fb010374f Update git submodules 3 weeks ago
distro-configs Disable skia for online 1 week ago
drawinglayer drawinglayer: improve logging for EmfPlusSetPixelOffsetMode records 14 hours ago
dtrans loplugin:external (clang-cl) 1 day ago
editeng tdf#121658 Add option to not hyphenate words in CAPS 17 hours ago
embeddedobj loplugin:external (clang-cl) 1 day ago
embedserv loplugin:external (clang-cl) 1 day ago
emfio Fix some new dependencies on boost_headers 7 hours ago
eventattacher Extend loplugin:external to warn about classes 2 weeks ago
extensions loplugin:external (clang-cl) 1 day ago
external external/icu: Fix -Werror=deprecated-copy-dtor 2 days ago
extras Resolves tdf# 129052 - Misspelled gradient 1 week ago
filter Fix refs to tdf#124029 1 day ago
forms some std::set->o3tl::sorted_vector 2 days ago
formula remove some useless comment lines 3 days ago
fpicker loplugin:external (macOS) 9 hours ago
framework -Werror=maybe-uninitialized 2 days ago
helpcompiler make some classes module private 1 day ago
helpcontent2 @ e2d9552558 Update git submodules 8 hours ago
hwpfilter cppcheck: performing init in init list (hwpfilter, i., l.) 1 week ago
i18nlangtag Resolves: tdf#129045 add Guadeloupean Creole French [gcf-GP] to language list 1 week ago
i18npool Adapt CPPUNIT_ASSERT to C++20 deleted ostream << for sal_Unicode (aka char16_t) 3 days ago
i18nutil Extend loplugin:external to warn about classes 2 weeks ago
icon-themes Colibre: Fix for tdf#127415 2 days ago
idl Extend loplugin:external to warn about classes 2 weeks ago
idlc Introduce o3tl::optional as an alias for std::optional 5 days ago
include Test results across all imported and inserted sheets. 5 hours ago
instsetoo_native MSI: Disable creation of system restore points during installation 6 days ago
io cppcheck: performing init in init list (hwpfilter, i., l.) 1 week ago
ios android: Avoid throwing exceptions through the bridges. 1 day ago
javaunohelper Extend loplugin:salbool to loplugin:fakebool 3 weeks ago
jurt cid#1448367 Explicit null dereferenced 2 weeks ago
jvmaccess tdf#42949 Fix IWYU warnings in jvmfwk/ & jvmaccess/ 7 months ago
jvmfwk Fix typo 1 day ago
l10ntools remove some useless comment lines 3 days ago
librelogo sanitize LibreLogo calls 6 months ago
libreofficekit Silence -Werror=maybe-uninitialized 2 days ago
lingucomponent tdf#121658 Add option to not hyphenate words in CAPS 17 hours ago
linguistic tdf#121658 Add option to not hyphenate words in CAPS 17 hours ago
lotuswordpro cppcheck: performing init in init list (hwpfilter, i., l.) 1 week ago
m4 add -latomic configure check... 3 months ago
nlpsolver Fixing '....' 3 months ago
o3tl Extend loplugin:external to warn about classes 2 weeks ago
odk Fix typo 1 day ago
offapi tdf#121658 Add option to not hyphenate words in CAPS 17 hours ago
officecfg drop dbgutil SdrItemBrowser FloatingWindow 2 days ago
onlineupdate drop gtk2 support 2 months ago
oovbaapi Fix typo 1 week ago
oox tdf#127237 fix table background color in Impress import 14 hours ago
opencl Remove unused OpenCLEnv::mpOclCmdQueue 1 week ago
osx Add some more source files for breakpointing convenience 2 weeks ago
package check crcs when fuzzing after all 1 week ago
pch Removed duplicated includes 2 days ago
postprocess tdf#128974: TB Addressbook not available directly as existing database (Win) 1 week ago
pyuno tdf#97361: Removed getByTindex in Pyuno pytests 1 day ago
qadevOOo Fix typo 1 day ago
readlicense_oo update credits 1 day ago
registry Fix typo 1 day ago
remotebridges Extend loplugin:external to warn about classes 2 weeks ago
reportbuilder Fix '..' 3 months ago
reportdesign Fix typo 1 day ago
ridljar Fix typos 3 months ago
sal Remove spurious #include 19 hours ago
salhelper tdf#42949 Fix IWYU warnings in salhelper/ 11 months ago
sax cleanup "tdf#117274 XLSX export: fix VML comment shape type id" 20 hours ago
sc Test results across all imported and inserted sheets. 5 hours ago
scaddins tdf#129098: parameters mixed in OPT_PROB_INMONEY (scaddins) 1 week ago
sccomp Extend loplugin:external to warn about classes 2 weeks ago
schema tdf#121658 Add option to not hyphenate words in CAPS 17 hours ago
scp2 tdf#126192 tdf#126030 (related) Package translations of oox 20 hours ago
scripting remove some useless comment lines 3 days ago
sd tdf#127237 fix table background color in Impress import 14 hours ago
sdext Fix build with poppler-0.83 2 days ago
setup_native loplugin:consttobool (clang-cl) 1 week ago
sfx2 loplugin:external (macOS) 9 hours ago
shell loplugin:external (macOS) 9 hours ago
slideshow Fix typo 1 day ago
smoketest Fix typos 3 months ago
solenv Honor BISON passed into configure 9 hours ago
soltools cid#1448469 Out-of-bounds access 2 weeks ago
sot cppcheck: performing init in init list (sot/svl/svtools/svx) 1 week ago
starmath some std::set->o3tl::sorted_vector 2 days ago
stoc use scoped enum 2 days ago
store loplugin:nullptr 9 hours ago
svgio Use initializer instead of using several inserts (svgio/svgtoken) 3 days ago
svl Adapt CPPUNIT_ASSERT to C++20 deleted ostream << for sal_Unicode (aka char16_t) 3 days ago
svtools tdf#128468: Add Ruler::GetTabs() 1 day ago
svx make some classes module private 1 day ago
sw UI test for tdf#127652 6 hours ago
swext Fix typos 3 months ago
sysui sysui: Add C header to libreofficekitgtk introspection 2 weeks ago
test Test results across all imported and inserted sheets. 5 hours ago
testtools Extend loplugin:external to warn about classes 2 weeks ago
toolkit remove some useless comment lines 3 days ago
tools remove some useless comment lines 3 days ago
translations @ 6d4072204c Update git submodules 3 weeks ago
ucb remove some useless comment lines 3 days ago
ucbhelper remove some useless comment lines 3 days ago
udkapi Fix typos 2 months ago
uitest Fix 'is' operator for comparison 2 weeks ago
unodevtools loplugin:redundantpointerops simplify *p.get() 1 month ago
unoidl size some stringbuffer to prevent re-alloc 1 month ago
unoil Use https instead of http 1 year ago
unotest WTF "WTF 255 return value?" 2 months ago
unotools remove some useless comment lines 3 days ago
unoxml Introduce o3tl::optional as an alias for std::optional 5 days ago
ure remove more rtl::OUString and OString prefixes 1 year ago
uui Remove nonsense check 1 week ago
vbahelper Introduce o3tl::optional as an alias for std::optional 5 days ago
vcl loplugin:redundantcast (macOS) 9 hours ago
winaccessibility loplugin:external (clang-cl) 1 day ago
wizards Fix 'is' operator for comparison 2 weeks ago
writerfilter Related: tdf#115719 DOCX import: fix increased spacing vs left-aligned objects 8 hours ago
writerperfect Extend loplugin:external to warn about classes 2 weeks ago
xmerge Fix typo 1 day ago
xmlhelp remove some useless comment lines 3 days ago
xmloff tdf#121658 Add option to not hyphenate words in CAPS 17 hours ago
xmlreader Revert "Optimize getNamespaceId (xmlreader)" 1 month ago
xmlscript remove some useless comment lines 3 days ago
xmlsecurity loplugin:external (clang-cl) 1 day ago
.buckconfig Add build toolchain to upload LibreOffice API to Maven Central 4 years ago
.buckversion Add build toolchain to upload LibreOffice API to Maven Central 4 years ago
.clang-format clang-format: don't fix up namespace comments 3 weeks ago
.editorconfig We have some Objective-C source files, too 2 years ago
.git-blame-ignore-revs Add .git-blame-ignore-revs 3 months ago
.gitattributes Ignore schema files for src tarball generation 3 years ago
.gitignore Add QtCreator-specific file to .gitignore 6 months ago
.gitmodules uset https:// instead of git:// for submodules 11 months ago
.gitreview git-review: Use the hostname instead of alias. 6 months ago
BUCK Add build toolchain to upload LibreOffice API to Maven Central 4 years ago
COPYING Licencing files 9 years ago
COPYING.LGPL Licencing files 9 years ago
COPYING.MPL Targetted text updates, with seasonable changes before l10n freeze. 6 years ago
Library_merged.mk gbuild: Remove MSVC 2013 legacy code 2 years ago
Makefile.fetch initial build of the Skia library 1 week ago
Makefile.gbuild updater: workaround cygwin python bug around command line arguments 2 years ago
Makefile.in Makefile comments need to start in the first column 2 months ago
README.Solaris remove use of Archive::Zip 3 years ago
README.cross Rename Mac OS X to official name macOS in comments and documentation 1 year ago
README.md README: Add Weblate badge for core l10n 1 month ago
Repository.mk drop gtk2 support 2 months ago
RepositoryExternal.mk make SkiaSalGraphicsImpl use GPU-backed SkSurface also for offscreen 1 week ago
RepositoryFixes.mk Rename Mac OS X to official name macOS in comments and documentation 1 year ago
RepositoryModule_build.mk migrate to boost::gettext 2 years ago
RepositoryModule_host.mk add "system" PCH that contains often used system headers such as STL 2 months ago
TEMPLATE.SOURCECODE.HEADER Add fill-column: 100 to the Emacs mode line 3 years ago
autogen.sh autogen.sh: add --help description about the --with-distro switch 8 months ago
config.guess Fixing '....' 3 months ago
config.sub Update config.{guess,sub} 6 months ago
config_host.mk.in Honor BISON passed into configure 9 hours ago
config_host_lang.mk.in gbuild: allow to react on change in configured langs 4 years ago
configure.ac Honor BISON passed into configure 9 hours ago
download.lst update Skia to chrome-m79 1 week ago
g ./g: don't exit early on ./g checkout -f 1 year ago
hardened_runtime.xcent macOS: enable hardened runtime when signing 6 months ago
install-sh Fix typos 3 months ago
leak-suppress.txt fix doc 3 weeks ago
lo.xcent No more need to generate lo.xcent from lo.xcent.in 11 months ago
logerrit Fixing '....' 3 months ago
sanitize-ubsan-blacklist file for ci-based ubsan build 4 years ago
setup.cfg pep8 -> pycodestyle 1 year ago

README.md

LibreOffice

Coverity Scan Build Status CII Best Practices Translation status

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 version 15.7
  • macOS:
    • Runtime: 10.10
    • Build: 10.13.2 + Xcode 9.3
  • Linux:
    • Runtime: RHEL 7 or CentOS 7
    • 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
  • Android:
    • Build: NDK r19c and SDK 22.6.2

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.