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.
andreas kainz d1730033b4 calc cell alignment sizegroup update 11 hours ago
.git-hooks Don't count terminating newline when determining line length 1 month ago
.github Add donation info for GitHub 5 months ago
UnoControls tdf#124176: Use "pragma once" on UnoControls/* 3 weeks ago
accessibility tdf#88205 Adapt uses of css::uno::Sequence to use initializer_list ctor 4 days ago
android android: Fix linking of liblo-native-code.so on x86_64 2 days ago
animations Extend loplugin:external to warn about classes 1 month ago
apple_remote Fix typo 9 months ago
avmedia clang-tidy modernize-concat-nested-namespace in avmedia 5 days ago
basctl tdf#129360: don't try to use uninitialized objects 5 days ago
basegfx clang-tidy modernize-concat-nested-namespace in basegfx 5 days ago
basic can use LogicToLogic here 3 days ago
bean cid#1448230 Dereference null return value 2 months ago
bin document output is pdf, not ps 3 days ago
binaryurp Improved loplugin:stringconstant (now that GCC 7 supports it): binaryurp 5 months ago
bridges clang-tidy modernize-concat-nested-namespace in basic..canvas 5 days ago
canvas clang-tidy modernize-concat-nested-namespace in basic..canvas 5 days ago
chart2 Resolves: tdf#130045 dial control frame not hidden along with the control 2 days ago
cli_ure Fix typos 4 months ago
codemaker clang-tidy modernize-concat-nested-namespace in codemaker..configmgr 5 days ago
comphelper tdf#88205 Adapt uses of css::uno::Sequence to use initializer_list ctor 3 days ago
compilerplugins Adapt loplugin:duplicatedefines to include/premac.h 2 days ago
config_host add setting to config_skia.h whether to use 32bpp bitmaps 1 week ago
configmgr clang-tidy modernize-concat-nested-namespace in codemaker..configmgr 5 days ago
connectivity tdf#88205 Adapt uses of css::uno::Sequence to use initializer_list ctor 3 days ago
cppcanvas clang-tidy modernize-concat-nested-namespace in cppcanvas..cppuhelper 5 days ago
cppu clang-tidy modernize-concat-nested-namespace in cppcanvas..cppuhelper 5 days ago
cppuhelper Use std::vector in OInterfaceContainerHelper instead of Sequence 2 days ago
cpputools sal_Char->char in cppcanvas..cui 1 month ago
cui calc cell alignment sizegroup update 10 hours ago
dbaccess tdf#88205 Adapt uses of css::uno::Sequence to use initializer_list ctor 3 days ago
desktop clang-tidy modernize-concat-nested-namespace in dbaccess..desktop 4 days ago
dictionaries @ 3097066a2e Update git submodules 1 week ago
distro-configs ofz#19296 disable skia for oss-fuzz 1 month ago
drawinglayer tweak GetBitmap methods in BitmapEx 4 days ago
dtrans Fix a random crash on paste from clipboard on Windows 2 weeks ago
editeng flush out unused Font objects 3 days ago
embeddedobj sal_Char->char in editeng..eventattacher 1 month ago
embedserv sal_Char->char in editeng..eventattacher 1 month ago
emfio tweak GetBitmap methods in BitmapEx 4 days ago
eventattacher sal_Char->char in editeng..eventattacher 1 month ago
extensions tdf#88205 Adapt uses of css::uno::Sequence to use initializer_list ctor 3 days ago
external external/pdfium: C++20 comparison operator fix 2 days ago
extras can replace SwNavHelpToolBox with basic ToolBox now 3 days ago
filter ofz#20160 Integer-overflow 3 days ago
forms Improve loplugin:redundantcast for sal_Int... vs. ::sal_Int... 1 week ago
formula sal_Char->char in formula..i18npool 1 month ago
fpicker tdf#96505:Get rid of cargo cult long integer literals 1 week ago
framework m_aListenerContainer is effectively unused here 2 days ago
helpcompiler Avoid -Werror,-Wdeprecated-enum-enum-conversion 3 weeks ago
helpcontent2 @ b63d130b4e Update git submodules 17 hours ago
hwpfilter tdf#96505:Get rid of cargo cult long integer literals 1 week ago
i18nlangtag sal_Char->char in formula..i18npool 1 month ago
i18npool tdf#88205 Adapt uses of css::uno::Sequence to use initializer_list ctor 4 days ago
i18nutil Fix Osage lowercase-to-uppercase mappings 1 week ago
icon-themes Sifr: Add more 32px icons (tdf#129846) 5 days ago
idl loplugin:finalclasses in i18npool..linguistic 6 days ago
idlc loplugin:finalclasses in i18npool..linguistic 6 days ago
include flush out unused OutputDevices 12 hours ago
instsetoo_native Remove a hardcoded product name from a translatable string 1 day ago
io sal_Char->char in idlc..linguistic 1 month ago
ios android: Avoid throwing exceptions through the bridges. 1 month ago
javaunohelper sal_Char->char in idlc..linguistic 1 month ago
jurt cid#1448367 Explicit null dereferenced 2 months ago
jvmaccess tdf#42949 Fix IWYU warnings in jvmfwk/ & jvmaccess/ 8 months ago
jvmfwk loplugin:finalclasses in i18npool..linguistic 6 days ago
l10ntools loplugin:finalclasses in i18npool..linguistic 6 days ago
librelogo sanitize LibreLogo calls 7 months ago
libreofficekit Prefer O3TL_UNREACHABLE over assert(false) 1 month ago
lingucomponent Use only the 'MacOSXSpell' component on iOS, not the 'spell' one 2 weeks ago
linguistic return nullptr from Create*Context methods in nullptr subclasses 3 days ago
lotuswordpro ofz#19961 Invalid-enum-value 1 week ago
m4 add -latomic configure check... 4 months ago
nlpsolver Fixing '....' 4 months ago
o3tl Adapt o3tl::span to P1872R0 1 month ago
odk odk: docs: remove the confusing sentence about "user installation" 2 days ago
offapi offapi: misleadingly named ParaHyphenationMaxLeadingChars/Trailing 6 days ago
officecfg Remove misused hyphens 1 day ago
onlineupdate drop gtk2 support 3 months ago
oovbaapi Fix typo 1 month ago
oox clang-tidy modernize-concat-nested-namespace in oox 5 days ago
opencl pickBestDevice return is ignored 1 month ago
osx Add some more source files for breakpointing convenience 2 months ago
package loplugin:finalclasses in package..sfx2 6 days ago
pch Removed duplicated includes 1 month ago
postprocess Use only the 'MacOSXSpell' component on iOS, not the 'spell' one 2 weeks ago
pyuno pyuno: remove racy debug check 1 week ago
qadevOOo Fix typo 1 month ago
readlicense_oo python3: bundle libffi for GNU/Linux builds 1 week ago
registry sal_Char->char in oox..registry 1 month ago
remotebridges sal_Char->char in remotebridges..sax 1 month ago
reportbuilder Fix '..' 4 months ago
reportdesign remove some unneeded includes 3 days ago
ridljar Fix typos 5 months ago
sal Removed redundant semicolon 1 day ago
salhelper tdf#42949 Fix IWYU warnings in salhelper/ 1 year ago
sax tdf#88205 Adapt uses of css::uno::Sequence to use initializer_list ctor 4 days ago
sc calc sidebar cellappearance simplyfication 1 day ago
scaddins Make OPT_ functions string more meaningful. 1 week ago
sccomp tdf#88205 Adapt uses of css::uno::Sequence to use initializer_list ctor 4 days ago
schema tdf#121658 Add option to not hyphenate words in CAPS 1 month ago
scp2 Merge both x64 and x86 CRT merge modules into x64 MSI 6 days ago
scripting Fix typo 1 week ago
sd tdf#123841 unfilled rectangles would make filled rectangles 1 day ago
sdext use more std::make_shared 1 week ago
setup_native Improve logging of feature states 1 week ago
sfx2 tdf#129788: Revert "no need to use AlphaMask in RecentDocsViewItem" 2 days ago
shell Clean up computation of preprocessed_command passed to ShellExecuteExW 2 days ago
slideshow make Library_slideshow explicitly link svl 1 day ago
smoketest Fix typos 5 months ago
solenv use -Wl,-dead_strip on Mac, its linker doesn't know -Wl,--gc-sections 1 day ago
soltools cid#1448469 Out-of-bounds access 2 months ago
sot tdf#96505 Get rid of cargo cult long integer literals 2 weeks ago
starmath rework SvxUndoRedoControl to be a PopupWindowController 4 days ago
stoc tdf#88205 Adapt uses of css::uno::Sequence to use initializer_list ctor 4 days ago
store sal_Char->char in sot..store 4 weeks ago
svgio loplugin:finalclasses in svgio 1 week ago
svl tdf#88205 Adapt uses of css::uno::Sequence to use initializer_list ctor 4 days ago
svtools rename a createPopupWindow so we can remove 'using createPopupWindow' 3 days ago
svx Sidebar text panel spacing update 1 day ago
sw tdf#128290 add tblLayout element to docx export 10 hours ago
swext Fix typos 5 months ago
sysui sysui: Add C header to libreofficekitgtk introspection 2 months ago
test sal_Char->char in test..testtools 3 weeks ago
testtools tdf#88205 Adapt uses of css::uno::Sequence to use initializer_list ctor 6 days ago
toolkit tdf#88205 Adapt uses of css::uno::Sequence to use initializer_list ctor 6 days ago
tools loplugin:redundantcast (size_t vs. std::size_t) 2 days ago
translations @ 6d4072204c Update git submodules 2 months ago
ucb Fix typo in comment 1 day ago
ucbhelper remove some useless comment lines 1 month ago
udkapi Revert "tdf#124176: Use "pragma once" on udkapi/*" 3 weeks ago
uitest UITest: fix spellDialog.SpellingAndGrammarDialog.test_tdf46852 3 weeks ago
unodevtools sal_Char->char in unoxml 3 weeks ago
unoidl size some stringbuffer to prevent re-alloc 3 months ago
unoil Use https instead of http 1 year ago
unotest Clean up duplicated command dispatch test functionality 2 days ago
unotools fix unotools/source/i18n/resmgr.cxx build with PCH on Mac 1 day ago
unoxml unoxml: CDocumentBuilder::parseURI should handle non-file:/// URIs. 3 days ago
ure remove more rtl::OUString and OString prefixes 1 year ago
uui sal_Char->char in vcl 3 weeks ago
vbahelper sal_Char->char in vcl 3 weeks ago
vcl refactor CreateFromClipboard to support not passing in a vcl::Window 13 hours ago
winaccessibility Fix typo 1 month ago
wizards Fix typo 1 month ago
writerfilter ofz#20169 Integer-overflow 2 days ago
writerperfect use more std::make_shared 1 week ago
xmerge Fix typo 1 month ago
xmlhelp sal_Char->char in xmloff..xmlsecurity 3 weeks ago
xmloff inline some Create methods 15 hours ago
xmlreader Revert "Optimize getNamespaceId (xmlreader)" 3 months ago
xmlscript use more std::make_shared 1 week ago
xmlsecurity tdf#88205 Adapt uses of css::uno::Sequence to use initializer_list ctor 6 days 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 2 months ago
.editorconfig We have some Objective-C source files, too 2 years ago
.git-blame-ignore-revs Add commit to ignore list 1 month ago
.gitattributes Ignore schema files for src tarball generation 3 years ago
.gitignore Add QtCreator-specific file to .gitignore 7 months ago
.gitmodules uset https:// instead of git:// for submodules 1 year ago
.gitreview git-review: Use the hostname instead of alias. 8 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 python3: bundle libffi for GNU/Linux builds 1 week ago
Makefile.gbuild updater: workaround cygwin python bug around command line arguments 2 years ago
Makefile.in allow root under podman 2 weeks 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 2 months ago
Repository.mk add support for Clang's -building-pch-with-obj 1 day ago
RepositoryExternal.mk python3: bundle libffi for GNU/Linux builds 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 tdf#129375: Avoid crash when inserting bibliography entry on iOS 2 weeks ago
TEMPLATE.SOURCECODE.HEADER Add fill-column: 100 to the Emacs mode line 3 years ago
autogen.sh Remove "--clean" option from autogen.sh 1 month ago
config.guess Fixing '....' 4 months ago
config.sub Update config.{guess,sub} 8 months ago
config_host.mk.in use -Wl,-dead_strip on Mac, its linker doesn't know -Wl,--gc-sections 1 day ago
config_host_lang.mk.in gbuild: allow to react on change in configured langs 4 years ago
configure.ac use -Wl,-dead_strip on Mac, its linker doesn't know -Wl,--gc-sections 1 day ago
download.lst external: update pdfium to 4021 4 days ago
g ./g: don't exit early on ./g checkout -f 1 year ago
hardened_runtime.xcent macOS: enable hardened runtime when signing 7 months ago
install-sh Fix typos 5 months ago
leak-suppress.txt fix doc 2 months ago
lo.xcent No more need to generate lo.xcent from lo.xcent.in 1 year ago
logerrit logerrit: Upgrade URIs to https:// 4 days 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.