Tender for implementing support for a dedicated, built-in UNO object inspection tool in LibreOffice (#202007-02)

The Document Foundation (TDF) is the charitable entity behind the world’s leading free/libre open source (FLOSS) office suite LibreOffice.

We are looking for an individual or company to implement support for a dedicated, built-in UNO object inspection tool in LibreOffice, to start work as soon as possible.

In order to make working with UNO objects easier and to avoid the need to always install extensions before debugging, it is necessary to be able to inspect UNO objects in a running LibreOffice instance effectively.

This task involves reading the existing Basic IDE Watch code, evaluating how it can be improved based on ideas implemented in external tools like xray and MRI and extending the Watch code to be a first-class inspector that allows focusing the relevant part of the UNO API for opened documents and also based on your current selection (similar to what is possible in web browsers).

A good part of the features are implemented already. Work carried out under this tender will therefore mostly consist in making the features more accessible and more stable, adjusting the UI and refactoring things.

The work has to be developed on LibreOffice master, so it can get released in the next major version.


The following required features need to be implemented:

  • Dockable toolbar that can appear at the bottom of a document frame, similar to find-bar.
  • Left-hand side of the toolbar exposes a snapshot of a useful subset of the DOM as a tree view: Writer paragraphs, Calc sheets, Impress slides
    • This tree widget should populate its content on-demand whenever possible in order to ensure performance.
  • Point&click inspect mode (similar to F12 in Chrome): combine Help -> What’s this (point on something & then an action) and normal selection, so it’s possible to point on something (e.g. an image), make it the current selection and automatically launch DevTools on it. Perhaps rename ‘DevTools’ to something else.

    Note that this is mostly UI work, ThisComponent.CurrentController.Selection in Basic already gives access to the current selection in a not-so-convenient way.

  • Right-hand side: show details in a table about the current selected item in the “DOM tree-view”, which is implemented as part of the watch window in the Basic IDE:
    • object’s UNO properties
    • object methods
    • supported services and interfaces
  • User documentation for the new dialog is mandatory.
  • Brief developer documentation for the newly introduced classes is required.
  • Whenever adding new functionality, it should be considered if it’s possible to test the functionality with automated tests with reasonable amount of effort.

The following are optional features:

  • Configuration support: remember which tabpage was open last time (properties, methods, etc.)
    • Remember sorting settings (prioritize paragraphs/sheets/slides and other relevant properties or sort alphabetically)
  • Click on value for details: primitive types
    • This is useful if the user selected lots of text for inspection, we can’t show all the content in a table cell, but can if a multi-line edit replaces the table widget.
  • Click on value for details: re-launch DevTools on a sub-object on the right-hand side. This is already handled to a large degree in the existing watch variable code, which represents the object already as a tree.
    • This allows recursion: double-click on a value with a complex type, which has its own properties, methods, etc -> inspect it.
  • Show implementation name of object
    • If a consistent name is provided by the object, this can allow jumping to the relevant C++ code from DevTools easily.
  • Copy&paste support:
    • Normally content of a table in a widget is not easily copy&paste-able. It can help debugging if add explicit support to copy the table content still, e.g. all property names and their primitive values.
  • Improved presentation of the DOM for Writer/Calc/Impress:
    • The inspector tool could be just a generic presenter for any UNO object, but in practice macro and extension authors are interested in a subset of the extremely rich and generic API we provide.
    • The idea is to select a few key properties for each component, so it’s trivial for the user to see how to access the most important details of a document:
      • Writer: style families, paragraph list, text portion list, etc.
      • Calc: sheets, columns, cells, named ranges, etc.
      • Impress: slides, shapes, etc.

Required skills

  • Extensive knowledge of C++
  • Experience working on the LibreOffice source code
  • Knowledge of UNO

Other skills

  • English (conversationally fluent in order to coordinate and plan with members of TDF)

We use free, libre and open source (FLOSS) software for development wherever possible, and the resulting work must be licensed under the Mozilla Public License v2.0.

TDF welcomes applications from all suitably qualified persons regardless of their race, sex, disability, religion/belief, sexual orientation or age.

Bidders will get a preference for including a partner or independent developer who has not been involved in a successful tender before.

As always, TDF will give some preference to individuals who have previously shown a commitment to TDF, including but not limited to certified developers and/or members of TDF. Not being a member, or never having contributed before, does not exclude any applicants from consideration.
Further discussions on this tender took place on the public board discussion mailing list of The Document Foundation.

The task offered is a project-based one-off, with no immediate plans to a mid- or long-term contractual relationship. It is offered on a freelance, project basis. Individuals and companies applying can be located anywhere in the world.

When budgeting, we anticipated that this project (incl. optional tasks) to take in the region of 60 days of work. Bidders are free to bid on the required features only. Bidders who bid on both the required and optional features are asked to provide a breakdown in terms of costs for each.

TDF is looking forward to receiving your applications for one or more of the aforementioned tasks, your financial expectations and the earliest date of your availability, via e-mail to a committee at tender20200702@documentfoundation.org no later than September 1, 2020.

Applicants who have not received feedback by October 15, 2020 should consider that their application, after careful review, was not accepted.

Status of LibreOffice for Android and iOS

Here’s a quick status update on LibreOffice for Android and iOS (iPhone/iPad).

LibreOffice is an application for desktop platforms, including Linux, macOS and Windows. The Document Foundation, the non-profit entity behind LibreOffice, is currently focused on delivering the best experience on the desktop. (There is also LibreOffice Online, a cloud-based version of the suite, for use in web browsers.)

While The Document Foundation doesn’t currently offer an Android or iOS version of LibreOffice, there is a LibreOffice-based product in app stores from Collabora, one of our certified developers and ecosystem members:

(More apps will be added to this list as they are developed and released.)

For more technically-oriented users: our developer community has been working on a mobile app, LibreOffice Viewer for Android, which also includes experimental editing support. This is not yet ready for widespread usage, but work is ongoing. (Binary builds are also available on F-Droid, but may not represent the latest state of the code.) If you’re familiar with Android app development, we’d appreciate your contributions!

Improvements in LibreOffice’s PowerPoint presentation support

LibreOffice’s native file format is OpenDocument, a fully open and standardised format that’s great for sharing documents and long-term data storage. Of course, LibreOffice does its best to open files made by other office software as well, even if they’re stored in pseudo-“standards” with cryptic and obfuscated contents. Compatibility with PowerPoint PPT(X) presentations is therefore a challenge, but developers are working hard on improvements…

In September 2019, we announced an initiative to improve the support of PPT and PPTX files in LibreOffice. A summary of achievements was published later that year. Now it is time for another review.

Everyone is invited to participate in the PowerPoint support initiative, either in development or testing. If you are interested in joining, please send an email to ilmari.lauhakangas@libreoffice.org.

Import/export

nd101 (PPT/X team):
Preserve table background colour when importing PPTX file

Table before nd101’s fix
Table before nd101’s fix
Table after nd101’s fix
Table after nd101’s fix

Preserve text position when importing PPTX file

Text position before nd101’s fix
Text position before nd101’s fix
Text position after nd101’s fix
Text position after nd101’s fix

Ayhan Yalçınsoy:
Export the scaling handle of custom shape


Gülşah Köse (Collabora):

Import table style in PPTX

No table style before before Gülşah’s fix
No table style before before Gülşah’s fix
Table style correct after Gülşah’s fix
Table style correct after Gülşah’s fix

Missing bullet in Smartart

Extra margin on second list level in SmartArt

Missing bullet and extra margin before Gülşah’s fix
Missing bullet and extra margin before Gülşah’s fix
Bullet and margin correct after Gülşah’s fix
Bullet and margin correct after Gülşah’s fix

Tamás Bunth (Collabora):

Chart labels in PPTX appear as “[PERCENTAGE]”

Chart labels before Tamás’s fix
Chart labels before Tamás’s fix
Chart labels after Tamás’s fix
Chart labels after Tamás’s fix

Performance

Gülşah Köse (Collabora):

Presentation does not move forward in Linux (not smooth in Windows)

A big thanks to everyone who helped out! We look forward to further updates.

LibreOffice Macro Team: progress report

Macros help users to automate common tasks in LibreOffice. In September 2019 we announced a new team in our community to work on macro support. A progress report was published in November 2019, so let’s review everything that happened since then.

If you are interested in contributing to the macro team (development, testing or documentation), we’d love to hear from you – please send an email to ilmari.lauhakangas@libreoffice.org and we’ll get in touch.

Wiki docs

Thanks to Nathan Ullberg, many wiki articles previously only available in French can now be read in English as well. Nathan also updated existing articles and created an article about manipulating LineShape objects in Impress. Detailed lists of his work can be found on his wiki user page.

Alain Romedenne worked alongside Nathan with the macro articles and translations. He added LibreOffice Basic cheatsheets from Jean-François Nifenecker into the wiki and created a new article concerning input/output to screen with Python. Alain also started creating syntax diagrams for LibreOffice Basic.

Code contributions from macro team members

Andreas Heinisch:

Alain Romedenne:

  • Tests for VBA Enum statement, VBA Err object raise method and LibreOffice Basic Property Get/Set

Code contributions from honorary associate members

Mike Kaganski (Collabora):

Samuel Mehrbrodt (CIB):

Jan-Marek Glogowski (CIB):

Caolán McNamara (Red Hat):

Stephan Bergmann (Red Hat):

  • Various internal improvements to stability

Help content

Improved by Alain Romedenne:

Added by Alain Romedenne:

Improved by Mike Kaganski (Collabora):

Improved by Stephan Bergmann (Red Hat):

Thanks to everyone who worked on these tasks! Everyone is welcome to join our community and get involved – just email ilmari.lauhakangas@libreoffice.org and we’ll get back to you.

Announcing the LibreOffice Help editor

News from the documentation community: The Help project of LibreOffice underwent a major revamp in the last couple of years, with the introduction of the browser-based Help replacing the old Writer-Web solution. Still, editing the Help XML files (XHP) continued to be very hard for any volunteer or skilled developer, due to the specifics of the XML dialect and time required to be proficient in writing Help pages, which continued to be a major block for any individual.

To address the issue, we developed an online editor to assist and make textual editing quicker for any Help writer, by featuring the possibility of rendering the help page at once, at the click of a button. Also, we implemented a series of checking, including XML validity and the verification of ID unicity, crucial for translation.

Editor mains screen
Editor main screen with page loaded

The Help editor is available at https://newdesign.libreoffice.org/xhpeditor/index.php and contains features that greatly improve and simplify the XHP editing process. For instance, the menu allows users to write content in plain text and the wrap each text segment into the proper XHP tag. For example, after writing a paragraph in plain text, select the text and choose menu Paragraph – <paragraph> to wrap the text into a paragraph tag with the benefit of adding a unique identifier for the paragraph, which is vital for the translation process of LibreOffice Help.

Another nice feature is the editor autocompletion, which allows user to type only the start of a tag name and the editor suggests the rest of the name, sparing the energy spent in typing the whole tag name. When adding any tag to the text, the autoclose feature adds the closing tag automatically. Users can also press F11 to display the editing area in the whole browser area, enlarging the editing space, or even press Ctrl+F to open a search and replace window in the editor.

Page verification
Help page verification

You can open and save a local XHP file and select Tool – Render page to have it displayed in the browser area. Or you can copy the XHP plain text and paste in the editor area to continue edition. The XHP editor uses CodeMirror, a popular JavaScript editor with many, many interesting features.

Detailed instructions and a short User manual are available in the wiki page https://wiki.documentfoundation.org/DocumentationHelpEditor and can also be accessed from the editor Help menu. To read the XHP dialect reference , use menu Help > XHP Reference.

We hope the editor will encourage volunteers to address the challenge of writing and updating the Help pages. We are eager to receive suggestion and contributions to the editor project. Come and join us!

LibreOffice power feature: join text boxes after importing PDFs

Although PDF is primarily used as a read-only format, there are tools for editing PDFs – and indeed, many people pay quite a bit of money for these tools, such as Adobe Acrobat Pro.

But there are alternatives! LibreOffice Draw provides a powerful PDF editor, for free, and since LibreOffice 6.4 it has a great feature to speed up editing: the ability to consolidate (join) multiple text boxes. This is especially useful if you’ve imported a PDF, and the text content is spread across multiple text boxes, making it hard to work with.

Let’s see it in action. Imagine you’ve opened a PDF document in LibreOffice Draw, and there are lots of separate text boxes, like this:

This is fiddly to work with – wouldn’t it be great if you could join all of these text boxes together, to edit them as a single chunk of text? Well, in LibreOffice 6.4, you can. Just select all of the text boxes, using the shift key while selecting them, then right-click and choose Consolidate Text in the context menu:

Now, the three text boxes are joined into one, so you can edit the text as a single item:

Download LibreOffice and try it out!

See the online help for more tips and guides, and Ask LibreOffice if you have any questions!