Welcome to The Document Foundation Planet

This is a feed aggregator that collects what LibreOffice and Document Foundation contributors are writing in their respective blogs.

To have your blog added to this aggregator, please mail the website@global.libreoffice.org mailinglist or file a ticket in Redmine.

02 March, 2021


In July last year, we launched a tender to implement a dedicated, built-in UNO object inspection tool in LibreOffice. UNO refers to Unified Network Objects, the component model used by the software.

Tomaž Vajngerl was assigned to work on the tender, and has blogged about his progress. He discusses the point-and-click functionality to inspect selected objects in the document, and his next steps.

If you’re interested in the technology “under the hood” in LibreOffice, check it out!


LibreOffice is an open source office suite full of tricky secrets. One of my favorites is the possibility to export a text document to XHTML or HTML5, both are W3C standards supported by most modern web browsers.

But you, the reader, will certainly ask: If I have the Guides in ODT and PDF file format why do I need another format? Why spend energy adding another medium for the LibreOffice Guides? 

There are advantages and drawbacks for the endeavor. On the thumbs up side, the community get a way to read the guides without actually downloading the PDF or ODT file and contents can be accessed with the browser's navigation tools (including bookmarking and more). One example is the current ODF Standard files exported to XHTML, available at the OASIS website.

A second advantage is that (X)HTML pages can be crawled and indexed by search engines robots and the LibreOffice Guides can be found on the search results pages of Bing, Google, DuckDuckGo and others.

Another exciting possibility for distributing the guides in (X)HTML format is that they could be installed on the intranets of schools, colleges and universities, public libraries, also community, public administrationand private company websites. The files are static and don't need a server side scripting languages such as php or asp. Distributing the rich contents of the LibreOffice Guides in a browser readable format will add value to every LibreOffice migration project.

One critical factor in the success of a LibreOffice migration project is how quickly users can transition to the new software and having readily available, easily accessible documentation in different forms should not be underestimated.

How difficult is to convert the Guides to an (X)HTML format?

My experience is that there are some work to do in the ODT side, and some work on the exported (X)HTML. The nice part is that these changes are small and can be partially automated.

LibreOffice has an interesting XHTML export filter. The developers did their best to preserve formatting and document fidelity between different rich text output formats. A second tool I tried is the nice extension writer2xhtml, which also have interesting features.

However reading contents in a browser (or even a tablet and a mobile phone) requires scrolling instead of the usual page turning, as in a printed book.

The layout of the document's content must be adapted to the browser's navigation actions. This requires the layout to be adjusted for on-screen viewing. Besides, it is interesting to also adapt the contents to tablets and perhaps mobile phones.

Luckily, all elements for navigation exist in the ODT file, they are just in the wrong position when exported to XHTML. The approach is to wrap these elements in sections with specific names. After being exported to XHTML these sections are mapped in <div id="name">...</div> and can be accessed by both a CSS and Javascript for pagination and layout.

Here is one layout among many alternatives


Two more volumes of LO 7.0 user guides were published in January: Getting Started Guide and Impress Guide. They are available in free PDF downloads and in low-cost print editions. See this page for links.


On 3 February, The Document Foundation announced the release of LibreOffice 7.1 Community, the volunteer-supported version of the office suite. The Community label emphasises the fact that the software is not targeted at enterprises, and not optimised for their support needs. Blog post with more information.

For enterprise-class deployments, TDF has strongly recommended the LibreOffice Enterprise family of applications from ecosystem partners—for desktop, mobile and cloud—with long-term support options, professional assistance, custom features and other benefits. See LibreOffice in business.

01 March, 2021


Since my last blog post I've been continuing the work on DevTools and since then a lot of things have progressed. Point & click has been implemented and the object inspector view has been greatly improved to show current object’s properties and methods. In this part I will mainly talk about the point & click and a bit about the current state, and in the next blog I will extensively talk about the object inspector.

Point & click

Figure 1: Current selection button

The idea of this functionality is to provide a way to inspect selected objects in the document, for example an image or a shape. For this, I have implemented a selection change listener (sfx2/source/devtools/SelectionChangeHandler.hxx), whose purpose is to listen to the selection changes that happen in the document and store the latest selection object. It is started when the DevTools docking window is instantiated and shown. I have added a new toggle button “Current Selection” (see Figure 1) to the UI. When the button is selected, it automatically shows the current selected object (gathered with the selection change listener) in the object inspector. 

Figure 2: Current selected shape's properties shown in the object inspector

In the example shown in Figure 2, we can see the shape is selected in the document and its properties are shown in the object inspector. If the "Current Selection" button wouldn't be toggled, then the document top-level object would be shown in the object inspector or the selected object in the DOM tree view.

While the "Current Selection" button is toggled, selecting any object in the DOM tree view (left-hand side tree view) has no effect, however if the current selected object is also present in the current DOM tree view, it will be selected. Note that if the object is not present in the tree, it won't be selected, because the DOM tree view will not force creation of on-demand object because of performance considerations.

Figure 3: "Inspect Object" command in "Customize" dialog 

In addition to showing the selected object, I have added a UNO command named “Inspect Object” (.uno:InspectSelectedObject), which can be added to context menus for objects (See Figure 3). The purpose of this command is to provide a way to open the DevTools docking window and automatically show the current selected object. If a user regularly uses the object inspector, this may be a more convenient way for them to access DevTools. Note that by default the command isn't added to any context menu, this is up to the user. However, if there will be demand to add this to context menus, it can be easily added. 

Figure 4: "Inspect Object" context menu entry on a shape object

The example in Figure 4 shows the context menu of a shape object, where the selected entry is the added "Inspect Object". 

From the implementation standpoint, it was necessary to move the whole DevTools from svx to sfx2 module. This was mainly


Today we’re talking to Rafael Lima, who helps the LibreOffice project by updating its documentation…

To start with, tell us a bit about yourself!

I am a university professor in Brazil, and I teach and research optimization applied to management sciences. In my work I often need to write papers and prepare spreadsheets to analyze data, and for that I’ve been using LibreOffice for over a year now. I have been working with supply chain optimization problems such as vehicle routing, network design and facility location.

I have always been an enthusiast of Open Source, since my undergraduate days in 2001. At the time I started using Linux and most of my current research work is done using FOSS tools. The dynamics of how open source software is developed is a topic that has always caught my attention.

Outside of work, I like to spend my free time practicing sports (mostly playing tennis) and whenever I have the opportunity I like to travel to new places. And obviously, like many tech enthusiasts, I like gaming too!

What are you working on in the documentation project right now?

The Documentation Team is currently working on the guides for the LibreOffice 7 series, and I am helping update and review some chapters in these guides. I have recently updated the Getting Started Guide chapters on Math and Macros.

Besides that, I have recently started writing a Macro tutorial focused on LibreOffice Calc, to help Calc users to get started with Basic programming and develop their own macros and functions. I hope to cover many aspects of Basic programming in Calc, ranging from reading and writing data from cells, formatting, dialog creation and writing extensions. If all goes well, I hope to finish the tutorial by February and release it to the community. If anyone wants to follow the development of the tutorial, it is available on my GitHub page.

How did you get started in the LibreOffice community? What was the experience like?

I started contributing to the Documentation Team after I read a blog post by TDF saying that they were looking for volunteers to help update the guides for LibreOffice 7. Then I joined the mailing list and I was welcomed and instructed by Olivier Hallot on the workflow of the Documentation Team.

After going over the Wiki and the Contributor’s Guide, I started updating the Math Guide. It was a very nice experience, because all questions I had were promptly answered by other members of the team and I was able to learn quickly how work gets done.

After finishing the Math guide I kept on contributing with other guides, mainly the Getting Started Guide and the Writer’s Guide.

Anything you’d recommend to newcomers in the docs project?

My work in the Documentation Team was my first real experience with an open source project, and it was a great opportunity to learn how open source really works. It’s amazing to see how the

26 February, 2021

  • Short TDF board call; partner / sales call, admin. Out for a run with J.
  • Finally got around to posting my FOSDEM slides, first an update for the Collaboration dev-room on integrating (with video)
  • And also for the work we did to integrate COOL into an app-image for easy installation as part of Nextcloud Hub (with video)

25 February, 2021

  • TDF budget ranking, calls, day of admin. COOL community roundup. Some perf / profiling of COOL - nice N^3 algorithm in writer affecting huge docs found.
  • Idle Freeze Pane fix, product management pieces, late partner call.


The Firebird Documentation Team is proud to announce the first release of the English Firebird 3.0 Language Reference (HTML, PDF). You can also find it on the Documentation page. This new Language Reference covers all SQL syntax of Firebird 3.0.The new English Firebird 3.0 Language Reference is based in part on the Russian Firebird 3.0 Language Reference, but is not a direct translation (though

24 February, 2021

  • Sales calls with Eloy, Kara, Miklos. Planning call, catch-up with Philippe. Poked at a bug.

23 February, 2021

  • Early morning blood-letting at the hospital. Catch up with Kendy, mail chew & admin. Interview.
  • Cut out a rather rough letterbox in the new door; cheap pendulum jigsaw produces rather a different on the other side; hmm.


New version of RedExpert 2021.02 is available with a few fixes


Get the LibreOffice introductory Guide and start producing professional documents.

The Documentation Team is happy to announce the immediate availability of the LibreOffice 7.0 Getting Started Guide, updated to include all LibreOffice 7.0 features.

The guide is written for anyone who wants to get up to speed quickly with LibreOffice. Readers may be new to office software, or may be familiar with another office suite. This guide is a valuable asset for all users.

LibeOffice Getting started Guide 7.0

The book introduces the main components of LibreOffice:

  • Writer (word processing)
  • Calc (spreadsheets)
  • Impress (presentations)
  • Draw (vector graphics)
  • Base (database)
  • Math (equation editor)

It also covers some of the features common to all components, including setup and customization, styles and templates, macro recording, digital signature, and printing.

The guide is an effort of the documentation team, and in special thanks to Jean Hollis Weber, Leo Moons and Kees Kriek. Meet the documentation team page!

Happy documenting!


22 February, 2021

  • Planning call, status report, worked through E-mail. Enjoyed some nice data from Lubos tracing COW page duplications in Online.
  • Catch up with Thorsten, worked on bug analysis & started slowly getting through the E-mail mountain.

21 February, 2021

  • Singing & Sermon on Judges / Jael. Relaxed variously, out for a walk with J. Watched some Black Mirror with H. - thought provoking.


We have many data structure classes in Collabora Online. Most of them are complex enough to warrant unit tests for their correctness. We already have cypress tests in Online which does integration testing, but we need unit tests for the internal data structure classes too. Mocha testing framework is a good match for this. With this we can do asserts via its BDD interface. In fact we could use any assertion library like Chai or Expect.js. You can now add Mocha tests in Online to test its any existing typescript classes or functions.

Here is a sample mocha test written for CPointSet typescript class:

/// <reference path="../src/layer/vector/CPoint.ts" />
/// <reference path="../src/layer/vector/CPointSet.ts" />

var assert = require('assert');

describe('CPointSet empty() tests', function () {

	describe('new CPointSet()', function () {
		it('should be empty', function () {

How to add a new Mocha test to Online?

Lets write a new test for the function CBounds.parse() as an example:

  • Create a new test file for tests related to CBounds class under loleaflet/mocha_tests/. Lets name it CBounds.test.ts
  • Reference the needed types from CBounds.ts by adding these lines.
/// <reference path="../src/layer/vector/CPoint.ts" />
/// <reference path="../src/layer/vector/CBounds.ts" />
  • Import Nodejs assert.
var assert = require('assert').strict;
  • Add a BDD style description of the set of tests we are going to write for CBounds.parse().
describe('CBounds parse() tests', function () {
    // Write unit tests here.
  • Inside that add a few test cases with descriptions like below:
describe('CBounds.parse() call with an empty string argument',
    function () {
	it('should return undefined', function () {
		assert.equal(CBounds.parse(''), undefined);
  • Now run ‘make check’ inside the loleaflet/ dir to see these tests in action. In current master branch you should see something like below along with the results for the new test you have added.

If interested, do take a look at the commit 8b2eae423cf77e7c725843061898c3968a72c547 that integrated Mocha framework to Online.

20 February, 2021

  • D. over, together got water-tank breathing sealed up and out to a sofit vent, rather than having a waterfall ambience in the workshop.
  • Leveled and screwed workbench bench to the wall. Tidied up and unpacked lots of tools, ground off rust, oiled metal left & right. Somehow with a functional workbench it feels more like home.


Jaybird 4.0.2 and 3.0.10 have been released.

19 February, 2021

  • Cut out a hole to put up the washing line temporarily. Removed more builders rubble / scrap concrete etc. from flower-beds.
  • Had a brain-wave / simpler design for tank breathing; cut whole; visited a PPE clad Doctor too for good measure.


You can use and test Firebird 4.0 RC1 Docker image based on Debian buster

18 February, 2021

  • Played with E. making a rope-ladder for her attic; she sawed up lots of rungs, drilled them out, I routed the sides, and (eventually) we got it setup. As expected far harder to climb than anticipated - practice required.
  • Managed to finally get to dis-assembling the floating electricity meter with awful mini-roof that was plaguing the front flower bed. Rescued some conduit with M. and helped J. a little digging the flower bed.


As part of my recent work in upgrading our partner & customer ticketing system to make things sweeter for all our users I have been assigned a task involving importing data from a CSV that was generated using MySQL’s SELECT ... INTO OUTFILE. The problem was that the source table contained BLOB fields.

The resulting CSV was quite non-standard. MySQL simply does not allow to produce CSVs conforming to RFC 4180: it would not escape double quotes by duplicating them, but would use a dedicated escapement symbol (backslash \ by default); and when using that escapement symbol, it will escape byte 0x00 as two characters: \0 (backslash + character “0”). This needs a non-standard processing – e.g., Python’s csv module can’t restore the binary from such a file, no matter which encoding (like latin_1) you use to read file (Python’s csv module only works with files opened in text mode), or which settings you pass to reader. MySQL may be instructed to not use the escapement symbol (using FIELDS ESCAPED BY ''), and then zero bytes will be output as is, but then the double quotes (byte 0x22) inside all fields (including blobs) will be completely not escaped, making the CSV invalid and unreadable. MySQL should just duplicate double-quotes in this case, and it would work out of the box… But for now, I needed to read from the file with escaping by \ and all the quirks.

I hadn’t had time to look for a CSV reader capable of dealing with such a syntax (actually, I did a brief search, but of course not exhaustive). So I had to come with a home-grown Python code for this:

def readMySQL_CSVLine(binfile):
    rec = []
    field = bytearray()
    is_quoted = False # inside quoted field
    is_escaped = False # immediately after "\"
    is_after_quote = False # inside a quoted field, immediately after
                           # a double quote that is not an opening
                           # quote of a field
    while True:
        ch = binfile.read(1)
        if len(ch) == 0: # EOF
            if (is_after_quote): # There was an opening quote, then
                                 # closing quote, then EOF; the field
                                 # must be added, even if empty
            elif is_quoted or is_escaped: # Missing closing quote or a
                                          # character following "\"
                if is_escaped: # Invalid last "\"
                    field += b'\\'
            elif len(rec) > 0 or len(field) > 0: # Don't return records
                                                 # for empty last line
            return rec
        if is_escaped:
            is_escaped = False
            if ch == b'0':
                ch = b'\x00'
            elif ch not in b'\n"\\,': # "\" should only escape:
                                      # FIELDS ESCAPED BY,
                                      # FIELDS [OPTIONALLY] ENCLOSED BY,
                                      # FIELDS TERMINATED BY,
                                      # LINES TERMINATED BY,
                                      # and ASCII NUL.
                field += b'\\'
            field += ch
        if ch == b'\n' and (not is_quoted or is_after_quote): # EOL
            return rec
        if ch == b',' and (not is_quoted or is_after_quote): # End of field
            is_quoted = False
            is_after_quote = False
            field = bytearray() # no .clear() here, or else it will clear
                                # content inside rec
        if ch == b'"':
            if is_after_quote: # Normal case of two two consequent quotes -
                               # one escapes the other
                is_after_quote = False
                field += ch
            elif is_quoted:
                is_after_quote = True

17 February, 2021

  • Out for a run; chewed mail, product research, admin - customer call, CP all hands call, lunch.
  • Equipment arrived for stopping large water tank breathing into the garage & making everything damp (#1 suspected cause at least). Spent a while considering what to do there.


[Please see every image in this posting in new browser tab or window to see a more crisp and clear appearance]

Not having a coherent and consistent design system has been a big problem for LibreOffice Community. But a branding guideline could help to fill the empty room. At least with a brand guideline, I can be grateful that our products are not designed carelessly.

Talking about branding, TDF as the organization behind LibreOffice is not too strict in terms of technical implementation. In fact, LibreOffice has always carried the vision of having an interface that blends with the operating system. Something that sounds very familiar to the FLOSS desktop world. With this kind of vision, it feels like the brand's approach to many design elements - like the interface, for example - on the proprietary operating system becomes a bit strange in my opinion. Obviously, in the world of Windows and macOS, applications usually have their own unique design characteristics without even trying to pretend to be part of the operating system. For example, Microsoft Office, the 2007 version does not have the same interface approach (except maybe the Office button which looks like the Windows Start button) with the Windows XP and Windows Vista interfaces. MS 2010 is the same, even though MS 2013 both adopted a flat appearance like the era of Windows 8 and 8.1 but in terms of interface even icons and background knick-knacks in their windows are different. MS Office 2019 and 365 actually use an interface that has no resemblance to Windows 10 at all (except for the flat part which is trending).

The same is true for the macOS version of MS Office, each version no one really wants to appear like Finder. Before the era of MS Office 2019/365, the skeuomorphism characteristics were indeed maintained, but we can easily say that MS Office looks like MS Office completely.

In contrast to LibreOffice, which until now still wants to carry its FLOSS vision so that it looks like a Win32 application using a flat "skin". Fortunately the Colibre is quite helpful for Windows environment.

OK back to branding. After three years ago, the elementary icon theme was getting quite a massive update. I just realized one thing, it turned out that the icons I made used a color that I had taken out of nowhere. To be sure, I utilized some of the previous elementary icon colors and the rest from the Internet. Arriving at one of the bug report Heiko Tietze gave me a link to the elementary OS branding page which immediately got my attention:


Sweety Color Naming Scheme

I immediately realized that elementaryOS has been providing a collection of brand colors that have very unique and interesting names since when. Notice, to name a bunch of yellows they use the word "banana", for the purple they use the word "grapes". What a clever and very intriguing naming. Without saying what color people should have

16 February, 2021


Nine years ago, on February 17, 2012, The Document Foundation was registered in Berlin as a charitable foundation, the home of LibreOffice. Today, TDF Members can legitimately celebrate by picking a glass of champagne – there should be enough for everyone – for a virtual cheers. We look forward to the day we will be able to meet again in person, because the pandemics will be over. For the time being, stay safe, and enjoy the 9th anniversary of The Document Foundation. Cheers!!!

Picture by Gerhard G. from Pixabay

  • Monthly management call.
  • Did some wiring & hatch adjustment with E. Removed lots of rocks from the garden with M. - while waiting for the groundwork to be completed. Visit from the Barham and Sons chap around them multi-month delays for doors - hmm.
  • Watched Passengers with the family, a huge vista painted with almost no actors: great.

15 February, 2021

  • Holiday (on and off). Gave up waiting for the lead-work to be fixed, and attempted it with E's help. 100W soldering iron not up to the job; hmm. Unclear that the blow-lamp for lead guttering is a good idea. Siliconed everything up instead.
  • Re-visited last security camera mounting, and discovered we'd mis-wired the connector at one end; balanced on ladder at a great height & got everything connected up finally.


LibreOffice has extensive documentation in many languages, thanks to the great work of our worldwide docs community. Today we’re talking to Steve Fanning, who has been working on the updated LibreOffice Calc Guide

Hi Steve! Tell us a bit about yourself…

I live near Bolton in the North West of England with my wife and, sometimes, our adult son (he has recently been working in Australia for a year). I studied applied mathematics and theoretical physics at university and subsequently enjoyed a career mostly spent implementing and designing complex real-time software systems.

Passionate about improving the documentation for the company’s systems, I moved into specialist technical writer roles during the last few years of my employment. I retired around two years ago and now enjoy indulging in my main hobbies, which are bridge, computing, reading and coarse fishing. I guess that some readers might wonder about coarse fishing – it is angling for freshwater fish for pleasure and relaxation rather than food (all fish caught are returned to the water alive).

What are you doing in the LibreOffice project?

On retirement, I wanted to maintain and develop my technical writing skills and after some research, decided to join the LibreOffice Documentation Team. I immediately dived into the deep end, updating some of the more challenging chapters of the Calc Guide in preparation for the 6.2 issue. Since then I seem to have been digging deeper into Calc, coordinating the publication of the 6.4 Calc Guide, and updating many of the chapters for the 7.0 Calc Guide. I have also enjoyed creating an area on The Document Foundation’s wiki to describe Calc’s 500+ functions in more detail.

Why did you decide to become a member of The Document Foundation, the non-profit entity behind LibreOffice?

When the opportunity arose, I was delighted to become a member of TDF. I am hoping that it will make me more aware of the strategies of the organisation and, if appropriate, provide greater opportunity to influence those strategies. And who could resist the offer of a free @libreoffice.org email address?

What else are you working on, and is there any other area that interests you?

Currently most of my LibreOffice time is taken up supporting and mentoring Ronnie Gandhi, who is a technical writer helping us under the Google Season of Docs 2020 programme. His task is to populate many of the pages within the Calc Functions wiki area and I am reviewing his work and providing comments and other feedback as appropriate. Many of these functions are quite complex and require some research before raising comments but I am finding the whole experience very educational.

As for the future, it is hard to look too far ahead as we are all enduring the COVID-19 pandemic and the resulting restrictions and lockdowns. With lots of free time on my hands, I have been grateful to have interesting LibreOffice work to occupy myself and keep my brain ticking over. In

14 February, 2021

  • Valentines day, cards appreciated variously - out for a walk. Babes & Julie decided to put together a romantic dinner for the parents - just lovely. Hand-cut paper hearts, amazing food, georgeous waitresses, fine menus, and some time with just J. Teen girls rock.
  • Watched 'Parasite' with J. while waiting - an interesting film indeed.


Today we’re celebrating I love Free Software Day, where we say a big thank you to the developers and maintainers of free software projects around the world. You are awesome!

One such project is LibreOffice, of course – but what does “free software” actually mean?

Well, from a purely practical perspective, it means that you can get it without paying for it. That’s nice, but free software doesn’t come out of nowhere: certified developers in the LibreOffice ecosystem need funding to keep adding new features, and The Document Foundation (the non-profit that oversees LibreOffice) appreciates donations to manage the project, organise events and share knowledge.

But “free” means a lot more

When we talk about free software like LibreOffice, we’re talking about fundamental freedoms:

  • The freedom to run the software as you wish, for any purpose
  • The freedom to study how the program works, and change its source code
  • The freedom to redistribute copies so you can help your friends and colleagues
  • The freedom to distribute copies of your modified versions to others, so that they can benefit

Fundamental to this is the license under which the software is made available. LibreOffice is released under the Mozilla Public License Version 2.0, a free and open source license that lets everyone share the program – and gives everyone the right to study how it works and modify it.

Help to spread the message

LibreOffice users help to spread the word about LibreOffice to friends, family and colleagues, and we’re incredibly grateful for that. When you introduce someone to LibreOffice and highlight the low cost, you can also mention these freedoms too – the freedom to use your computer how you want, and not be controlled by any software company.

To learn more, check out the Free Software Foundation Europe’s page about free software. It’s a great overview of the social benefits that it beings.

And finally, a bit of fun

Here’s a great image from Elektrollart, made up of logos from many free and open source software projects. How many of them can you recognise? And can you find LibreOffice in here?

Older blog entries ->