No Description
Zdeněk Crhonek 99e12aed50 uitest for Chart X axis dialog 17 hours ago
.git-hooks Remove unhelpful "Check for whitespace in front of *'s" from .git-hooks 4 days ago
UnoControls loplugin:indentation in UnoControls..accessibility 1 week ago
accessibility tdf#120703 PVS: remove redundant static casts 5 days ago
android Fix typo 3 weeks ago
animations New loplugin:external 5 months ago
apple_remote Fix typo 1 week ago
avmedia tdf#40780 extend default media duration from 0.01s to 0.3s. 2 days ago
basctl Pointer is pointless 4 days ago
basegfx loplugin:indentation in basctl..bridges 1 week ago
basic tdf#112689: Replace chained O(U)StringBuffer::append() with operator+ 6 days ago
bean Fix typo 2 weeks ago
bin VisualStudioIntegrationGenerator: put CXXFLAGS to AdditionalOptions 3 days ago
binaryurp Use C++17 nested namespace definitions (in binaryurp) 1 month ago
bridges Revert "tdf#112689: Replace changed O(U)StringBuffer::append() with operator+" 6 days ago
canvas loplugin:indentation in canvas..chart2 1 week ago
chart2 These items are of type SfxUInt32Item 1 day ago
cli_ure Fix typo 1 week ago
codemaker loplugin:indentation in codemaker..comphelper 1 week ago
comphelper Fix typo 5 days ago
compilerplugins drop newly unused code 23 hours ago
config_host kde5: remove older kde/tde plugins, and references to that 2 months ago
configmgr Replace uses of rtl/instance.hxx with plain local static vars in configmgr 1 month ago
connectivity loplugin:simplifybool extend to !(a == b) where comparison an overloaded op 2 days ago
cppcanvas CppunitTest_cppcanvas_emfplus: use CPPUNIT_TEST_FIXTURE() 1 week ago
cppu loplugin:indentation in cppu..cui 1 week ago
cppuhelper tdf#42949 Fix IWYU warnings in cppuhelper/ 3 days ago
cpputools Reduce OUString operations and use indexed getToken 1 month ago
cui Options pops up a dialog, so add ... to it 18 hours ago
dbaccess loplugin:simplifybool extend to !(a == b) where comparison an overloaded op 2 days ago
desktop Mention that temporaryHackToInvokeCallbackHandlers() is for LibreOfficeLight 1 day ago
dictionaries @ 6811c96b9d Update git submodules 3 weeks ago
distro-configs no usable KDE5 on gandalf 3 days ago
drawinglayer CppunitTest_drawinglayer_border: use CPPUNIT_TEST_FIXTURE() 3 days ago
dtrans Win64 fixes for dtrans. 6 days ago
editeng Pointer is pointless 4 days ago
embeddedobj loplugin:indentation in editeng..extensions 1 week ago
embedserv Clean up dead uses of DISABLE_ATL 3 weeks ago
emfio move and extend primitive2dxmldump to drawinglayer 1 week ago
eventattacher tdf#120703 PVS: remove redundant static casts 5 days ago
extensions weld DBChangeDialog_Impl 18 hours ago
external The ARM Neon stuff is needed for ARM64, too (iOS at least) 5 days ago
extras tdf#113020 Change horizontal-align to justify 1 day ago
filter [API CHANGE] add setParentWindow to XDocumentDigitalSignatures 3 days ago
forms Pointer is pointless 4 days ago
formula o3tl::make_unique -> std::make_unique in dbaccess...framework 3 weeks ago
fpicker Pointer is pointless 4 days ago
framework MSForms: Introduce a new Forms menu which is compatible with MS Word 22 hours ago
helpcompiler loplugin:indentation in helpcompiler..io 1 week ago
helpcontent2 @ f31eae3b62 Update git submodules 1 day ago
hwpfilter loplugin:indentation in helpcompiler..io 1 week ago
i18nlangtag Turn LanguageTag::ScriptType into scoped enum 4 months ago
i18npool tdf#120703 PVS: V560 A part of conditional expression is always true/false 6 days ago
i18nutil loplugin:indentation in helpcompiler..io 1 week ago
icon-themes Sifr icon theme sc_ icon update 3 days ago
idl loplugin:indentation in helpcompiler..io 1 week ago
idlc loplugin:indentation in helpcompiler..io 1 week ago
include MSForms: Make Drop-Down form field to have a default size 20 hours ago
instsetoo_native tdf#122302: Set status message when installing KB2999226 1 month ago
io loplugin:indentation in helpcompiler..io 1 week ago
ios Drop unnecessary gb_DEBUG_CFLAGS 3 weeks ago
javaunohelper HTML tt -> code in JavaDoc comments 4 months ago
jurt Adapt jurt/source/pipe/staticsalhack.cxx 1 week ago
jvmaccess Improve re-throwing of UNO exceptions 8 months ago
jvmfwk Javavendors: Set minimum version to 1.6 4 days ago
l10ntools new loplugin writeonlyvars 6 days ago
librelogo Adapt LibreLogo.py to Python 3.7 re.sub change 3 months ago
libreofficekit lok: keystroke attribution issue. 4 days ago
lingucomponent loplugin:indentation in lingucomponent..tools 6 days ago
linguistic loplugin:indentation in jvmfwk..lotuswordpro 1 week ago
lotuswordpro tdf#120703 PVS: V560 A part of conditional expression is always true/false 6 days ago
m4 Fix typos 1 year ago
nlpsolver tdf#43388: add missing info for Evolutionary Algorithm Solver 7 months ago
o3tl array_view was changed to span in upcoming C++20 1 month ago
odk Adopt odk configure to new java 6 baseline 2 days ago
offapi [API CHANGE] add setParentWindow to XDocumentDigitalSignatures 3 days ago
officecfg MSForms: Rework the MS compatible Forms menu a bit 20 hours ago
onlineupdate work around Werror=format-truncation in onlineupdate for now 1 day ago
oovbaapi The WindowName param to WordBasic.AppMaximize() is optional and must be an Any 1 week ago
oox Simplify containers iterations in oox, opencl, package 2 days ago
opencl Simplify containers iterations in oox, opencl, package 2 days ago
osx Rename Mac OS X to official name macOS in comments and documentation 2 months ago
package Simplify containers iterations in oox, opencl, package 2 days ago
postprocess Make LDAP support optional 1 week ago
pyuno replace double-checked locking patterns with thread safe local statics 3 months ago
qadevOOo tdf#45904 Move XEnumerationAccess Java tests to C++ 5 days ago
readlicense_oo It's called libatomic_ops not libatomic-ops 2 weeks ago
registry tdf#42949 Fix IWYU warnings in registry/ 2 days ago
remotebridges New loplugin:external 5 months ago
reportbuilder Resolves: tdf#94446 if this is a SQLException in disguise, throw that instead 2 months ago
reportdesign Pointer is pointless 4 days ago
ridljar Fix typo 7 months ago
sal Simplify containers iterations in reportdesign, sal, sax 5 days ago
salhelper tdf#42949 Fix IWYU warnings in salhelper/ 1 month ago
sax Simplify containers iterations in reportdesign, sal, sax 5 days ago
sc uitest for Chart X axis dialog 16 hours ago
scaddins loplugin:indentation in sd 1 week ago
sccomp Fix order of CPPUNIT_ASSERT_EQUAL expected vs. actual arguments 3 weeks ago
schema sw btlr writing mode: add odf spec proposal URL 3 days ago
scp2 tdf#122302: Set status message when installing KB2999226 1 month ago
scripting tdf#120703 PVS: remove redundant static casts 5 days ago
sd Fix build without HAVE_FEATURE_AVMEDIA 2 days ago
sdext Indexing is not needed for single getToken() call 4 days ago
setup_native loplugin:redundantinline (clang-cl) 2 weeks ago
sfx2 drop newly unused code 23 hours ago
shell tdf#119890 Lookup XDG_(DOCUMENTS|TEMPLATES)_DIR correctly 4 days ago
slideshow Pointer is pointless 4 days ago
smoketest tdf#120703 PVS: V560 A part of conditional expression is always true/false 2 months ago
solenv drop newly unused code 23 hours ago
soltools new loplugin writeonlyvars 6 days ago
sot loplugin:indentation in soltools..svl 1 week ago
starmath loplugin:indentation in soltools..svl 1 week ago
stoc Avoid index for single getToken() call 4 days ago
store loplugin:flatten in stoc..store 2 weeks ago
svgio move and extend primitive2dxmldump to drawinglayer 1 week ago
svl Use indexed getToken() 4 days ago
svtools MSForms: Show restart dialog when MS compatible Forms menu setting is changed 22 hours ago
svx weld ScImportOptionsDlg 1 day ago
sw MSForms: Rework the MS compatible Forms menu a bit 20 hours ago
swext Help files: http -> https 3 months ago
sysui kde5: remove older kde/tde plugins, and references to that 2 months ago
test move and extend primitive2dxmldump to drawinglayer 1 week ago
testtools Fix typos 3 months ago
toolkit tdf#123439 Assert wrt PointerStyle fails when moving cursor over toolbar 3 days ago
tools loplugin:indentation in lingucomponent..tools 6 days ago
translations @ 46a65ed743 Update git submodules 1 month ago
ucb tdf#120703 PVS: remove redundant static casts 5 days ago
ucbhelper loplugin:indentation in ucb..ucbhelper 6 days ago
udkapi Fix typo 1 month ago
uitest eliminate some noise from uitest failure 1 month ago
unodevtools Take advantage of known index to avoid an OUString copy 2 weeks ago
unoidl tdf#42949 Fix IWYU warnings in unoidl/ 4 days ago
unoil Use https instead of http 10 months ago
unotest tdf#42949 Fix IWYU warnings in include/comphelper/[m-z]* 4 months ago
unotools MSForms: Introduce a new compatibility flag to enable MS compatible Forms menu 23 hours ago
unoxml tdf#120703 PVS: remove redundant static casts 5 days ago
ure remove more rtl::OUString and OString prefixes 3 months ago
uui [API CHANGE] add setParentWindow to XDocumentDigitalSignatures 3 days ago
vbahelper Add a FIXME note 2 days ago
vcl Fix typos 1 day ago
winaccessibility loplugin:implicitboolconversion (clang-cl) 2 weeks ago
wizards complete the univerbation of E-mail to Email in the ui 1 week ago
writerfilter sw btlr writing mode: implement DOCX filter 1 day ago
writerperfect o3tl::make_unique -> std::make_unique in tools..xmloff 1 week ago
xmerge Fix typos 7 months ago
xmlhelp new loplugin writeonlyvars 6 days ago
xmloff xmloff: create XMLImpressStylesExportOasis instances with an uno constructor 2 days ago
xmlreader tdf#42949 Fix IWYU warnings in xmlreader/ 1 week ago
xmlscript new loplugin indentation 6 days ago
xmlsecurity drop unneeded vcl includes, update pch 3 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 2 months ago
.gitmodules uset https:// instead of git:// for submodules 1 month 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 1 year ago
Makefile.fetch tdf#79022 - Please bundle Source Serif Pro 5 months ago
Makefile.gbuild updater: workaround cygwin python bug around command line arguments 1 year ago
Makefile.in No more need to generate lo.xcent from lo.xcent.in 2 months 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 2 months ago
README.md Bump (Linux) GCC baseline to 7.0.0 2 months ago
Repository.mk Make LDAP support optional 1 week ago
RepositoryExternal.mk Make LDAP support optional 1 week ago
RepositoryFixes.mk Rename Mac OS X to official name macOS in comments and documentation 2 months ago
RepositoryModule_build.mk migrate to boost::gettext 1 year ago
RepositoryModule_host.mk Moving mysqlc into connectivity as a library 5 months ago
TEMPLATE.SOURCECODE.HEADER Add fill-column: 100 to the Emacs mode line 2 years ago
autogen.sh don't require /autoconf/ to be 2.68 (also allow e.g. autoconf268) 2 weeks ago
config.guess Update config.{guess,sub} 1 year ago
config.sub Update config.{guess,sub} 1 year ago
config_host.mk.in Drop unnecessary gb_DEBUG_CFLAGS 3 weeks ago
config_host_lang.mk.in gbuild: allow to react on change in configured langs 3 years ago
configure.ac Remove outdated comment 4 days ago
download.lst curl: upgrade to release 7.64.0 1 week ago
g ./g: don't exit early on ./g checkout -f 7 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 2 months ago
logerrit Improve error message on ssh login failure. 1 year ago
sanitize-ubsan-blacklist file for ci-based ubsan build 3 years ago
setup.cfg pep8 -> pycodestyle 4 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.