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.
Andras Timar 15a18fa56c Update git submodules 2 hours ago
.git-hooks git-hooks: show length of first line if it's too long 4 months ago
.github Add donation info for GitHub 2 months ago
UnoControls loplugin:duplicate-defines in UnoControls 2 weeks ago
accessibility move HAVE_FEATURE_DESKTOP/OPENCL to their dedicated headers 1 day ago
android Fixing '....' 1 month ago
animations tdf#39593 extract UnoTunnelId comparison to template function 1 month ago
apple_remote Fix typo 6 months ago
avmedia tdf#128057: convert file URIs to system path for IGraphBuilder::RenderFile 6 days ago
basctl tdf#62955 - Allow searching a name with typing the first letter 13 hours ago
basegfx cid#1454631 Logically dead code 1 week ago
basic new loplugin:bufferadd 1 day ago
bean Fixing '....' 1 month ago
bin add PCHs for more external libs 2 days ago
binaryurp Improved loplugin:stringconstant (now that GCC 7 supports it): binaryurp 2 months ago
bridges loplugin:bufferadd loosen some constraints 11 hours ago
canvas tdf#40534 correctly match page with memory slab 5 days ago
chart2 Removed duplicated include 5 hours ago
cli_ure Fix typos 1 month ago
codemaker loplugin:stringadd look for unnecessary temporaries 2 days ago
comphelper loplugin:stringadd look for unnecessary temporaries 2 days ago
compilerplugins loplugin:bufferadd loosen some constraints 11 hours ago
config_host move HAVE_FEATURE_DESKTOP/OPENCL to their dedicated headers 1 day ago
configmgr new loplugin:bufferadd 1 day ago
connectivity new loplugin:bufferadd 1 day ago
cppcanvas do not require $(SRCDIR) in every gb_Library_set_precompiled_header 3 weeks ago
cppu new loplugin:bufferadd 1 day ago
cppuhelper loplugin:stringadd look for unnecessary temporaries 2 days ago
cpputools Add version resource to executables where it was missing 1 month ago
cui loplugin:bufferadd loosen some constraints 11 hours ago
dbaccess loplugin:bufferadd loosen some constraints 11 hours ago
desktop Send 'INPLACE EXIT' on inplace deactivation 10 hours ago
dictionaries @ e2f020e6e2 Update git submodules 1 month ago
distro-configs use --disable-symbols with Jenkins Win/Mac builds that use dbgutil 12 hours ago
drawinglayer loplugin:redundantpointerops simplify *p.get() 1 week ago
dtrans loplugin:stringconstant (clang-cl) 2 weeks ago
editeng Resolves: tdf#127961 Add NBSP to quotation marks for all French except fr-CH 2 hours ago
embeddedobj tdf#42949 Fix IWYU warnings in embeddedobj/ 5 days ago
embedserv -Werror,-Wmicrosoft-exception-spec (clang-cl) 2 weeks ago
emfio ofz#17817 avoid OOM 2 weeks ago
eventattacher Improved loplugin:stringconstant (now that GCC 7 supports it): eventattacher 2 months ago
extensions loplugin:stringadd look through a couple more known-good methods 16 hours ago
external Allow building lcms2 with Windows SDK 8.1 3 hours ago
extras weld ConditionalFormattingDialog 3 days ago
filter Simplify insertion into string 14 hours ago
forms new loplugin:bufferadd 1 day ago
formula Resolves: tdf#128140 stabilize formula dialog width 1 day ago
fpicker new loplugin:bufferadd 1 day ago
framework loplugin:bufferadd loosen some constraints 11 hours ago
helpcompiler simplify "a = a +" to "a +=" 5 days ago
helpcontent2 @ 35cef5c725 Update git submodules 1 day ago
hwpfilter ofz#18116 Timeout 5 days ago
i18nlangtag loplugin:stringadd in helpcompiler..oox 2 weeks ago
i18npool loplugin:bufferadd loosen some constraints 11 hours ago
i18nutil Drop bogus memset 1 week ago
icon-themes tdf126796 percent stacked image fixed for colibre 11 hours ago
idl new loplugin:bufferadd 1 day ago
idlc loplugin:stringadd look for unnecessary temporaries 2 days ago
include tdf#106843 DOCX: export/import change tracking protection 11 hours ago
instsetoo_native tdf#127711 - A runtime-switch for the MiniCrashDump 2 weeks ago
io loplugin:stringadd in helpcompiler..oox 2 weeks ago
ios Use correct directory for some data files on iOS: share/filter, not filter 1 week ago
javaunohelper Fix typos 2 months ago
jurt Fix typos 1 month ago
jvmaccess tdf#42949 Fix IWYU warnings in jvmfwk/ & jvmaccess/ 5 months ago
jvmfwk loplugin:stringadd look for unnecessary temporaries 2 days ago
l10ntools loplugin:stringadd look for unnecessary temporaries 2 days ago
librelogo sanitize LibreLogo calls 4 months ago
libreofficekit enable -Wrange-loop-analysis on clang 1 week ago
lingucomponent New loplugin:getstr 2 days ago
linguistic use FastParser in linguistic 1 week ago
lotuswordpro simplify "a = a +" to "a +=" 5 days ago
m4 add -latomic configure check... 1 month ago
nlpsolver Fixing '....' 1 month ago
o3tl Introduce o3tl::unsafe_downcast for known-good dynamic_cast downcasts 1 week ago
odk rtl/stringconcat.hxx is not part of the URE interface 4 days ago
offapi Add document-level option to lock down content extraction 2 days ago
officecfg Add option to prevent graphic swap out 1 day ago
onlineupdate drop gtk2 support 2 weeks ago
oovbaapi Add ooo.vba.word.XDocument.SavePreviewPngAs() and implement 4 months ago
oox tdf#126060 Handle text camera z rotation while pptx import. 13 hours ago
opencl Fix misuse of OStringLiteral 2 days ago
osx Add missing source files in vcl/source/gdi 1 week ago
package new loplugin:bufferadd 1 day ago
pch add gbuild function for a common PCH and use it in sc/ and sax/ 1 week ago
postprocess split msi signing from creation to reduce number of singtool calls 1 month ago
pyuno new loplugin:bufferadd 1 day ago
qadevOOo tdf#45904 Remove/disable obsolete XText Java tests 1 month ago
readlicense_oo update credits 6 days ago
registry tdf#127766: Avoid ODR violation for class/struct FieldEntry 1 week ago
remotebridges Improved loplugin:stringconstant (now that GCC 7 supports it): remotebridges 2 months ago
reportbuilder Fix '..' 1 month ago
reportdesign new loplugin:bufferadd 1 day ago
ridljar Fix typos 2 months ago
sal loplugin:stringadd look through a couple more known-good methods 16 hours ago
salhelper tdf#42949 Fix IWYU warnings in salhelper/ 9 months ago
sax loplugin:stringadd look through a couple more known-good methods 16 hours ago
sc loplugin:bufferadd loosen some constraints 11 hours ago
scaddins add gbuild function for a common PCH and use it in sc/ and sax/ 1 week ago
sccomp loplugin:constmethod in sc 2 weeks ago
schema sw anchored object allow overlap: replace TODO with OASIS proposal 1 week ago
scp2 tdf#127711 - A runtime-switch for the MiniCrashDump 2 weeks ago
scripting loplugin:stringadd look through a couple more known-good methods 16 hours ago
sd loplugin:bufferadd loosen some constraints 11 hours ago
sdext loplugin:bufferadd loosen some constraints 11 hours ago
setup_native simplify "a = a +" to "a +=" 5 days ago
sfx2 tdf#42316 handle saving to template filters 10 hours ago
shell loplugin:stringadd look for unnecessary temporaries 2 days ago
slideshow new loplugin:bufferadd 1 day ago
smoketest Fix typos 2 months ago
solenv handle gracefully PCH reuse when there are no .pdb files 1 day ago
soltools gcc9.2.1 also warns about truncation here 1 month ago
sot convert WriteCharPtr..getStr to WriteOString 6 days ago
starmath loplugin:stringadd look through a couple more known-good methods 16 hours ago
stoc loplugin:bufferadd loosen some constraints 11 hours ago
store loplugin:sequentialassign in starmath..svl 6 months ago
svgio loplugin:unusedfields 1 week ago
svl new loplugin:bufferadd 1 day ago
svtools loplugin:bufferadd loosen some constraints 11 hours ago
svx tdf#126060 Handle text camera z rotation while pptx import. 13 hours ago
sw dbmgr.hxx: Drop "extra ';' after member function definition" 3 hours ago
swext Fix typos 2 months ago
sysui Add icons to New Document desktop file actions 1 month ago
test new loplugin:bufferadd 1 day ago
testtools Fix typos 1 month ago
toolkit new loplugin:bufferadd 1 day ago
tools loplugin:bufferadd loosen some constraints 11 hours ago
translations @ 4960b59e9c Update git submodules 2 hours ago
ucb new loplugin:bufferadd 1 day ago
ucbhelper use cppu::WeakImplHelper in CommandProcessorInfo 1 week ago
udkapi Fix typos 1 month ago
uitest name all Notebooks 'tabcontrol' 1 week ago
unodevtools loplugin:redundantpointerops simplify *p.get() 1 week ago
unoidl Deduplicate O(U)StringNumber definitions; add toAsciiUpperCase 2 weeks ago
unoil Use https instead of http 1 year ago
unotest WTF "WTF 255 return value?" 2 weeks ago
unotools new loplugin:bufferadd 1 day ago
unoxml loplugin:stringadd look through a couple more known-good methods 16 hours ago
ure remove more rtl::OUString and OString prefixes 11 months ago
uui new loplugin:bufferadd 1 day ago
vbahelper new loplugin:stringadd 2 weeks ago
vcl Related: tdf#124729 log any gtk_gl_area_get_error messages 3 hours ago
winaccessibility use common PCH for more libraries 2 days ago
wizards Access2Base - CurrentUser based in PathSubstitution 6 days ago
writerfilter tdf#106843 DOCX: export/import change tracking protection 11 hours ago
writerperfect use common PCH for more libraries 2 days ago
xmerge Fix typos 1 month ago
xmlhelp loplugin:stringadd look through a couple more known-good methods 16 hours ago
xmloff loplugin:bufferadd loosen some constraints 11 hours ago
xmlreader Revert "Optimize getNamespaceId (xmlreader)" 6 days ago
xmlscript loplugin:stringadd in writerfilter..xmloff 2 weeks ago
xmlsecurity tdf#42316 handle saving to template filters 10 hours 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
.git-blame-ignore-revs Add .git-blame-ignore-revs 1 month ago
.gitattributes Ignore schema files for src tarball generation 3 years ago
.gitignore Add QtCreator-specific file to .gitignore 4 months ago
.gitmodules uset https:// instead of git:// for submodules 10 months ago
.gitreview git-review: Use the hostname instead of alias. 5 months 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 bundle external: qrcodegen 3 months 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 1 week 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 10 months ago
README.md Android: document one NDK version that works 1 month ago
Repository.mk drop gtk2 support 2 weeks ago
RepositoryExternal.mk gbuild: treat $(DCONF_CFLAGS) as includes, not defines 2 weeks ago
RepositoryFixes.mk Rename Mac OS X to official name macOS in comments and documentation 10 months 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 1 week 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 6 months ago
config.guess Fixing '....' 1 month ago
config.sub Update config.{guess,sub} 5 months ago
config_host.mk.in aarch64 callVirtualFunction needs to be compiled w/o -fstack-clash-protection 4 days ago
config_host_lang.mk.in gbuild: allow to react on change in configured langs 4 years ago
configure.ac bump product version to 6.4.0.0.alpha1+ 8 hours ago
download.lst Update orcus to 0.15.3. 5 days ago
g ./g: don't exit early on ./g checkout -f 1 year ago
hardened_runtime.xcent macOS: enable hardened runtime when signing 4 months ago
install-sh Fix typos 2 months ago
leak-suppress.txt migrate to boost::gettext 2 years ago
lo.xcent No more need to generate lo.xcent from lo.xcent.in 10 months ago
logerrit Fixing '....' 1 month 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

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

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.