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.


Monday
18 March, 2024


face

Dione Maddern

Today we’re talking to Dione Maddern, who helps out in LibreOffice’s documentation team…

Tell us a bit about yourself!

I’m 44. Originally from Brisbane, Australia but I currently live in Baltimore, on the East Coast of the USA. I’ve worked in a variety of administration, document production roles in the engineering and insurance industries.

Most of my technical writing experience has been writing procedures, instructions, and other documentation for Health Safety Environment and Quality (HSEQ) systems. This is my first software project.

In my spare time, I like to bake, draw, and play video games and tabletop RPGs.

What are you doing in the LibreOffice community at the moment?

I’m working on the Offline Help (F1) function of LibreOffice, fixing broken links and updating instructions and terminology.

How did you join the community, and what was it like?

I saw the banner on the user guide page asking for volunteers to work on Documentation Team. I’d been looking for a volunteer opportunity where I could use my skills in document production for a while and this seemed perfect. So I followed the link and posted my bio on the Documentation forum.

Banner to join the Docs team

I felt a bit daunted at first because a lot people had more experience than me, or were from a software development background. Everyone has been very welcoming and I feel like I’ve been able to make a contribution to the project. I’ve learned a lot too, including a crash course in XML and Gerrit.

What advice would you give to others who want to join the documentation team?

Dive in! It can seem a bit daunting at first, but it’s easier to get started than you think.

Thanks so much to Dione for all the help! Indeed, everyone is welcome to dive in, help out, and pick up valuable experience along the way. Who knows – perhaps it could lead to a career in technical writing…


face

One of the areas that can help LibreOffice, but may not directly be visible to the users, but has a big impact is the quality assurance, and the automated tests.  Here, I discuss some areas and notes around improving tests for LibreOffice. First, I start with the regression and bug fixes without tests.

Missing Unit Tests

This is the description from GSoC ideas page:

While there are some automated tests for LibreOffice, there are not nearly enough. Adding more and better tests helps developers who work on the code to be more productive by allowing them to find regressions as early as possible.

To elaborate more, I should say there are many regressions and bugs in general that are fixed, but lack testing. It is important to have tests for those bug fixes, to avoid such problems in the future. You can see list of those fixed issues that lack tests here:

If you want to add some new tests for the bug fixes, first you should read the bug report very carefully to understand what is it about, and try to test the fix yourself. You can either use git revert command to revert the fix, and see the problem in action, or try changing back the fix in the code, if it is not too big.

That is important, because you have to see that the test fails without the fix in place, but succeeds when it is applied. This is an essential step when writing the test.

To know more about the unit tests, you may look into these Wiki pages:

Porting Existing Tests to C++ or Python

Some tests are written in the past, but not have issues because of the way they are written. In this case, porting them can provide improvement.

Tests can be written in multiple languages. At least, C++, Python, Java and BASIC are currently in use for different tests across the LibreOffice code base. Again in the GSoC ideas page, you can read:

There is some support in LibreOffice for automated tests, both at the level of unit tests, and at the level of system tests that drive a full LibreOffice instance. Currently tests can be written in C++, Java, or Python. Various new automated tests should be developed to improve the test coverage.

Tests written exclusively for Java (eg. the JUnit framework) should be ported to C++ so that they can execute much more rapidly. Similarly, tests that do remote control of an existing LibreOffice instance, should be re-factored to run inside that instance to make debugging much easier.

Almost all of the JUnitTests and UITests and also some smoke tests run as outside process. The trick to verify is to remove the soffice(.exe) binary, or to remove its execute permission (on Linux). In this way, out of process tests should fail, as they need to run the soffice binary. After a


Friday
15 March, 2024


face

Git Git Git Git Git Git

Why work on this

Working on this involves understanding the controlls, specially the spinedit, finding some way to modify it so that clicking on the units “the last 2 characters of the label in the spinedit entry” shows a dropdown, from which we can select a different unit.

Mockup

I find working on this as a great opportunity to get deeper insights into widget implementations

Finding a Starting Point

I had no idea about where to start. One approach that appealed to me was if somehow I find the cursor position when the spinedit goes into edit mode, and compare it to the text length in the GtkEntry (internal) of the spinedit, then I can easily say that if the cursor is on the last 2 characters, then show a dropdown here. But that would not work, because “creating a new widget” ==> the logic should be built into the widget itself (I don’t know, it’s just guess-work).

Then I went to #gtk IRC channel, and asked about how to approach this problem.

IRC Conversation
sahil_ hi, I have a task to write a custom spinedit control, which will have a fontsize field (with a number and a unit like mm, pt, etc). It should be such that if I click on the unit with mouse, then it should show me a dropdown to use different units. Mockup Here’s the mockup. How can I approach it?
sahil_ Libreoffice uses glade and custom welding for widgets. And from the research I did on it, I found that a normal gtkentry is aware of the cursor position, which can be used like if the cursor is on the last 2 characters, then show the popup.
sahil_ But a new control has to be created for that (in my understanding).
mclasen The pieces are GtkText and GtkGestureClick. You just have to glue them together in the right way
sahil_ mclasen: and for the dropdown?
mclasen GtkPopover is what is used for that
sahil_ Also the spinedit doesn’t expose the gtkEntry (it’s internal). So do I have to create one from scratch?
sahil_ or does it?
mclasen you can take a look at how GtkEntry, GtkSpinButton, etc are put together nowadays they are all just wrappers around a GtkText widget

This was more than enough to get started.

Starting the Hunt

Looking into it, I found that I was mixing up GtkComboBox, which is used as fontsizebox, and GtkSpinButton, which is what I was supposed to explore and modify. weld::SpinButton, which is libreoffice’s wrapper over GtkSpinButton (if I am not wrong) has functions which give access to the cursor location in the Entry. It would require some playing around to understand the dynamics though.

I am also curious about how a dialog, or any UI element, which is created using glade, which usually has the widgets as Gtk types (GtkLabel, GtkButton etc.) is loaded into different backends. Knowing how the welding works would answer it I think.


Tuesday
12 March, 2024


face

The LibreOffice Community Documentation Team is happy to announce the immediate release of the latest Writer and Calc guides for the new LibreOffice 24.2 office suite.

The two books are updates of the respective LibreOffice 7.6 guides, and describe the new features available in LibreOffice 24.2.

Jean Weber and Steve Fanning leaded the update of the Guides and provided valuable inputs to the contents.

The Writer Guide

Jean Weber

Updated and review by Jean Weber, the Writer Guide is the authoritative guide for using Writer to edit documents, from a single page to a full book. The latest Writer guide includes all these updates:

  • Comments can now use styles
  • New features in the Navigator
  • Save with password dialog now has a password strength meter
  • Insert Special Characters dropdown now shows a character description
  • Improved support for multi-page floating tables
  • “Legal” ordered list numbering: make a given list level use Arabic numbering for all its numeric portions
  • Miscellaneous changes in the names of some fields and buttons
  • And more; see the Release Notes

 

 

 

The Calc Guide

Steve Fanning

Steve Fanning

Updated by Steve Fanning, the guide contains description of the new features of Calc 24.2, the spreadsheet program of LibreOffice:

  • Live font preview when using the Font Name menus on the Properties deck of the Sidebar and on the Formatting toolbar.
  • Interactions to switch between sheets operate cyclically.
  • Option to view or hide column/row highlighting.
  • Additional metadata fields on the Description tab of the Properties dialog.
  • On Windows platforms, support for Alt+NumPad codes covering full Unicode range.
  • Text description of highlighted character on drop-down from Insert Special Characters toolbar icon.
  • Password strength meters on several dialogs.
  • Search field on Functions deck of Sidebar.
  • Support for FTP protocol removed from Hyperlink dialog.
  • Changes to auto-recovery and backup options.
  • Search function on Tools – Options dialogs.
  • Security warnings converted from dialogs to infobars.
  • Modify button renamed Assign on Customize dialog.
  • Language Settings menu of Tools – Options dialogs renamed to Languages and Locales.

More…

LibreOffice Community 24.2 also includes many other changes, including:

  • New password-based ODF encryption that hides metadata better and is more resistant to tampering
  • Clarification of macro security options to make it clear exactly what is allowed and what is not
  • Accessibility improvements
  • Improvements in interoperability with Microsoft’s proprietary file formats

The Guides are available in PDF, in source OpenDocument Format and printed versions from the bookshelf and documentation web pages.


face
  • Up earlyish, finished slides; got to the conference, caught up with lots more people - good to get deeper on lots of technology, as well as getting some great feedback around COOL.

Monday
11 March, 2024


face
  • Up at 1:40am, drove to Gatwick, plane to Geneva. Spent quite some time trying to accelerate the CPU version of the RLE code amusingly without success: fun.
  • Off to CERN; arrived in time for CS3 - great to meet lots of old friends, tons of customers & partners. Good stuff.
  • Enjoyed talks, tour of some of the facilities, more talks, largest survey response so far of users shows that (for Office tools) - Collabora is (just) at the top of for the 1st year; encouraging.
  • Dinner bits in the evening, and tram back to the hotel with some friends.

face

General Activities

  1. LibreOffice 7.6.5 was released on February 22
  2. LibreOffice 24.2.1 was released on February 29
  3. Olivier Hallot (TDF) added help content for Calc’s XLOOKUP and XMATCH functions, Navigate By in Find toolbar, Draw’s Shrink text on overflow and did many fixed and cleanups in Help
  4. Rafael Lima made it so selected text in the BASIC editor is automatically inserted into the search bar, added a command for toggling code block commenting in BASIC IDE and fixed an issue where Duplicate Sheet command might create the sheet in the wrong file, if having two open files with the same name
  5. Stanislav Horacek updated command paths in Help
  6. Stéphane Guillou (TDF) updated command paths in Help
  7. Alain Romedenne updated ScriptForge Help pages, updated Python shell script Help for macOS and improved Python example in SDK
  8. Dione Maddern did many fixes and updates to Help pages, mostly fixing links
  9. Gábor Kelemen (allotropia) made some cleanups in Help and in UI and UNO bridges code
  10. Laurent Balland fixed an issue with skip empty cells option not working for the last column in Calc Text Import dialog, made it so custom number formats using the ? character replace trailing zeroes with figure spaces which have a width approximating a digit and removed unneeded thumbnail.png images from Wizard templates
  11. Miklós Vajna (Collabora) added legal numbering support for DOC and RTF files, made Calc HTML import support data-sheets attributes, made Calc’s cell editing accept pasted HTML fragments, made DOCX content control handling more robust and continued polishing floating table support
  12. Szymon Kłos, Gülşah Köse, Marco Cecchetti, Gökay Şatır, Pranam Lashkari, Michael Meeks and Méven Car (Collabora) worked on LOKit used by Collabora Online
  13. Attila Szűcs (Collabora) fixed PPTX issues with multiline field wrapping and stacked text
  14. Henry Castro (Collabora) tweaked Calc’s background colour filter to not extend transparent colours to empty cells and fixed an issue with Sidebar not displaying the full localised currency string for cell properties
  15. Tomaž Vajngerl (Collabora) made it so the currencies used in a spreadsheet are put at the top of the currency pop-up list, made pivot table data cache handling smarter and improved the handling of XLS documents with unknown DRM encryption (mainly due to some Excel addons)
  16. Julien Nabet fixed an issue where Data validation without error check allowed entering incorrect data, fixed LOWER not being supported in Base’s Query-GUI if condition was LIKE and fixed an issue with Calc Macro setting SearchWildcard to False changing SearchRegularExpression value. He also fixed some crashes
  17. Andreas Heinisch made Calc’s Autofilter sorting and removing duplicates more robust and made it so a single click is enough to access options through Calc’s status bar
  18. Xisco Faulí (TDF) made over a dozen addition and changes to automated tests, improved dark mode support of Writer comment UI, fixed an issue with Autofilter empty option, made SVG text baseline handling more intuitive, added support

face

Git Git Git Git Git Git Git

What do I want to achieve

It’s important to set some target before jumping into and starting to do the thing. I would like to make an annoying “Donate Now” dialog

  • The dialog would show up whenever the user starts libreoffice, or whenever he switches to different modules like calc or writer etc.

  • The dialog would look something like the mockup shown below. The dialog should have a faint background image which shows all the community members, to give out cheerfull vibes. Other than that it would have a text which would be some interesting fact about libreoffice.

  • It would have an image on the top, and a “donate now” and a “close” button on the bottom It would also have a checkbox saying “I am broke”, which would be unchecked by default. If the user checks it, then the dialog will stop asking for monitory donations, and instead pester the user with “Other Ways To Contribute”, which would include all the getting involved stuff.

  • Other than that It would also have an “I don’t care” checkbox, which will be unchecked by default, and if checked, the dialog won’t show up again, and then one has to reactivate it from about > user-hostile-donation-dialog.

Git

This would makeup for a nice and fun learning experience. It would involve playing around with the UI, listeners, strings, “the user centiments” etc.

It’s not a rigid outline, but rather an idea to atleast get started. Patch on gerrit.

Starting with the UI

I will start with understanding how the about dialog is implemented, how does it display images and custom text etc. One thing that I noticed previously is that the “Tip Of The Day” dialog uses GtkDrawingArea while the about dialog uses GtkImage.

I asked on the #gtk IRC channel, and found that GtkImage is an image loaded from the disk at a specific size, while GtkDrawingArea is a canvas you draw on using cario.

This might have been the reason for why Libreoffice was carshing when I used GtkImage while trying to recreate the “Tip Of The Day” dialog. There I just created a bare constructor, without specifying the image.

Well for the user hostile dialog, GtkImage would work fine as I don’t need to change the image on the go.

Creating a Dialog

I created a dialog box using glade. The challenge that I faced was that I was not able to move the checkboxes in the ButtonBox of the GtkDialog to the left side. All 4 controls were stuck together. Then I looked into how the tip-of-the-day dialog does it, and there I found that whatever control I wanted to left align (in the button box), I had to turn on the packing > secondary control. What that is, I am still to investigate into.I got this Documentation Reference from the #gtk IRC channel.

For some reason, the dialog doesn’t carsh now :). Other issue that I faced was related to text wrapping. So if I set


Sunday
10 March, 2024


face
  • All Saints, played in the music group; back for a pizza lunch with J. picked up babes from their camp, sorted out the evening service; relaxed a bit.
  • Played guitar for the evening service, Florence spoke, good time; home to rest.

Saturday
09 March, 2024


face
  • Up lateish, J. for an art session at All Saints, plugged away at tidying up, mending alarm sensor.
  • Wrote a small benchmark tool to further optimize our RLE code-paths for some real-world tiles; generated some numbers.
  • Out for a walk with J. to Lode (not the LibreOffice tool of the same name) - managed to navigate lots of mud, and enjoy the scenery.
  • Home; poked at perf results and with an hour or so of chewing got another 17% off the Avx2 RLE code:
    // load and arrange 8x pixel chunks & a shifted version
    vpermd %ymm0,%ymm1,%ymm5
    vmovdqu 0x20(%rdi,%r10,4),%ymm0
    vpand  %ymm5,%ymm2,%ymm5
    vpermd %ymm0,%ymm3,%ymm6
    vpand  %ymm4,%ymm6,%ymm6
    vpor   %ymm5,%ymm6,%ymm5
    // compare and turn that into a bitmask of duplicates
    vpcmpeqd %ymm0,%ymm5,%ymm5
    vmovmskps %ymm5,%eax
    // store that bitmask (win was here)
    mov    %al,(%rcx)
    mov    %eax,%r11d
    not    %r11b
    shl    $0x5,%rax
    // pack only new pixels into memory
    vmovdqa (%rax,%r9,1),%ymm5
    vpermd %ymm0,%ymm5,%ymm5
    vmovdqu %ymm5,(%r8)
    movzbl %r11b,%eax
    popcnt %rax,%rax
    lea    (%r8,%rax,4),%r8
    add    $0x8,%r10
    inc    %rcx
    cmp    $0xf8,%r10
    jb     // loop to top
    

    Turns out using the CPU's built-in 8bit writing for the 8 pixel mask is far more efficient than masking it into 64bit registers which is cute. Should really simplify the RLE setup and shifting part with _mm256_maskz_permutexvar_epi32 at some stage, and really ought to 256bit align the memory too at some stage. Seems it is 4.5x faster - than the not entirely naive C version which chews 64 pixel chunks thus:
    // simplified inner loop for 64 pixel chunks
    for (; bitToSet; ++x, bitToSet <<= 1)
    {
        if (from[x] == lastPix)
            rleMask |= bitToSet;
        else
        {
            lastPix = from[x];
            scratch[outp++] = lastPix;
        }
    }
    

  • Out for dinner in town with J.

Friday
08 March, 2024


face
  • Mail, catch up call with Lily, worked on role descriptions, prepped for and gave a Tea Time Trainig (TTT) on various architectural directions for online.
  • Plugged away at a bit of hacking in the afternoon; calmed down some over-enthusiastic warnings, chased down some corner-cases.
  • Babes off to Buckden Towers for a StAG camp.

face

Info banner about LibreOffice special session for Nepali community

Suraj Bhattarai, our Nepalese LibreOffice Community Liaison, writes:

We shared some positive words around the LibreOffice project, among students of IOE Purwanchal Campus enrolled in CS50x Nepal. The LibreOffice orientation was scheduled for two hours on 21st February, 2024 at the MSC special classroom of the same campus; it was a special session in the CS50x Nepal timeline.

The session that I delivered gave a general overview of the LibreOffice project, The Document Foundation, the Document Liberation Project, past activities carried out by the local Nepali community, customization tips and tricks for familiarity, and how to contribute or connect in the community.

LibreOffice special session for Nepali community

Moreover, the session – organized for 30 CS50x Students – included a total participation of 47 people, seven of whom were Nepali Community members, six of whom were other students, and the rest were the CS50x staff. The session was primarily intended to introduce the LibreOffice suite and provide hands-on experience with it, to the newly enrolled, first-year students in the campus, who were actually enrolled for the CS50x classes.

The session had this breakdown:

  • 40 mins of talks
  • 30 mins of quick presentation competition using LibreOffice Impress
  • 30 mins of release party cake and celebration
  • And lastly, 30 mins of Plane Rush competition as a fun touch to the session

The competition was facilitated by our community volunteers, where they distributed some gifts as well. The challenge for the competition was to create a visually appealing, quick three-page presentation using LibreOffice Impress on-the-spot, in 25 minutes. All they had to do was recreate the presentation slide version of the LibreOffice university/school (English) flyer.

LibreOffice special session for Nepali community

The gifts were LibreOffice T-shirts, water bottles, Document Liberation Project stickers, pens and more. The same gifts were distributed to winners of the Plane Rush activity as well, and some light items like stickers and pens were given to everyone present in the session.

After some hands-on experience with LibreOffice Impress, a quick survey was conducted, where 27 of the participants claimed that they tried LibreOffice for the very first time. The same survey had asked what they love about LibreOffice. And honestly, a majority of them mentioned the reasons to be: open source, free, compatible with Microsoft Office files, community driven, cross-platform, privacy, and feature-rich.

The latter half of the session was filled with fun, as we cut and shared the vanilla-flavored release party cake with everyone present in the room. The environment was really fun with flashes, noise, claps, smiles, and cameras and eyes all over the cake.

LibreOffice special session for Nepali community

Lastly, in the sunset and the open ground, participants flew their own paper planes based on LibreOffice PaperPlaneFront.odg. The session was totally fun and a unique experience for everyone. And yes, they did collect the planes for paper recycling later on. And with this, the day, joy and celebration all came down to a happy ending with the efforst from the Nepali community.

LibreOffice special session for Nepali community

Please confirm that you want to play a YouTube video. By accepting, you will be accessing content from YouTube, a service


Thursday
07 March, 2024


face
  • Mail chew; tech planning call, COOL community call, admin, marketing strategy call, caught up with action items. Got some more background save pieces done. Prayer meeting in the evening.

Wednesday
06 March, 2024


face
  • Up early, out for a run, mail chew; call with no-one in it.
  • Finally manged to reset my yale home alarm password - it seems the trick is to (somehow) intuit that the web interface is an entirely different thing to the mobile control app despite looking the same; hey ho.

Tuesday
05 March, 2024


face
  • Mail, planning call, partner call, got to a bit of log and code reading with Neil around a unit test failure.

Monday
04 March, 2024


face
  • Mail chew, Calc stand-up, mail backlog catch-up, marketing content call, several 1:1's.

face

LibreOffice at FOSDEM 2024

FOSDEM is the biggest meetup of free and open source software (FOSS) developers in Europe, and takes place every year, in early February, in Brussels. And the LibreOffice project is always there!

We had a stand with merchandise, and community members were present to answer questions, provide information about new features in LibreOffice, and meet people from other FOSS projects.

Our LibreOffice pens were very popular, as were Document Liberation Project stickers and flyers. Many visitors to the stand were regular LibreOffice users and just wanted to say thank you, some buying a T-shirt or hoodie as well. We even had a couple of donations on the spot! Others asked what they can do for LibreOffice.

And here are a few photos from the event, and our community dinner. This is just the beginning though – we plan to be at many more events this year!

LibreOffice at FOSDEM 2024

LibreOffice at FOSDEM 2024

LibreOffice at FOSDEM 2024


Sunday
03 March, 2024


face
  • All Saints - family service; Pizza lunch with David, bit of gardening - spring is slowly budding; slugged and watched variously.

Saturday
02 March, 2024


face
  • Up lateish; drove to Kennilworth for L's birthday party; lots of small boys to chase around the new kitchen, and peg & so on; fun. Caught up with M&D, R&A, and David&Gillian, good to see everyone. Chris & Lizzy there too.
  • Home lateish; slugging action, bed early.

Friday
01 March, 2024


face
  • Earlyish meeting until lunch; on to an openDesk event, lots of useful findings - and really great to see everyone in person and catch up somewhat.
  • Hacked a bit on the plane back, drove home, tired.

face

The new Board of Directors of The Document Foundation has just started its two-year term on 18 February 2024.

The full members are, in alphabetical order: Eliane Domingos, Sophie Gautier, Björn Michaelsen, László Németh, Simon Phipps, Eike Rathke, Italo Vignoli.

The deputies are again in alphabetical order: Osvaldo Gervasi, Mike Saunders, Paolo Vecchi.

Mike Saunders was elected to the Board for the first time. All the other members have served either on the Steering Committee from 2010 to 2012 (Sophie Gautier and Italo Vignoli) or on the Board of Directors since 2014 as full or deputy members.

At its first meeting, the Board unanimously elected Eliane Domingos as Chair and Simon Phipps as Vice-Chair.

At the same time, they decided to review and reorganise responsibilities and areas of oversight to ensure a more agile decision-making process.

Six people who served during the previous term have left the Board, but will continue to contribute to the project as TDF Members: Thorsten Behrens, Gábor Kelemen, Gabriel Masei, Cor Nouws, Emiliano Vavassori, Ayhan Yalçınsoy.

We are deeply grateful to all of them for their dedication, their contribution to decision making and all the time they have volunteered to serve on the Board, as well as their ongoing contribution to FOSS and LibreOffice.


face

Writer now supports legal numbering for two more formats: DOC and RTF (ODT and DOCX were working already.)

This work is primarily for Collabora Online, done as a HackWeek project, but the feature is fully available in desktop Writer as well.

Motivation

Legal numbering is a way to influence the number format of values inherited in a multi-level numbering. Say, the outer numbering uses Roman numerals and the inner numbering uses X.Y as the number format, but the inner level wants to display the outer values as Arabic numerals. If this is wanted (and guessing from the name, sometimes lawyers do want this), then the inner number portion will expand to values like "2.01" instead of "II.01", while the outer number portions will remain values like "II".

Mike did 80% of the work, what you can see here is just the RTF/DOC filters.

Picking a smaller feature task like this looked like a good idea, since I wanted to spend some of the time on regression fixing around last year's multi-page floating table project.

Results so far

For (binary) DOC, the relevant detail is the fLegal bit in the LVLF structure. Here is the result:

Improved handling of legal numbering from DOC: old, new and reference rendering

It shows how the outer "II" gets turned into "2", while it remained "II" in the past. This works for both loading and saving.

The same feature is now handled in the RTF filter as well. There the relevant detail is the \levellegal control word, which has an odd 1 default value (the default is usually 0). Here is the result:

Improved handling of legal numbering from RTF: old, new and reference rendering

It shows that the RTF filter is up to speed with the DOC one by now.

As for the multi-page floating tables, I looked at tdf#158986 and tdf#158801.

How is this implemented?

If you would like to know a bit more about how this works, continue reading... :-)

As usual, the high-level problem was addressed by a series of small changes:

Want to start using this?

You can get a snapshot / demo of Collabora Office 24.04 and try it out yourself right now: try the unstable snapshot. Collabora intends to continue supporting and contributing to LibreOffice, the code is merged so we expect all of this work will be available in TDF's next release too (24.8).


Thursday
29 February, 2024


face
  • Drove to Stansted; caught up with Gokay; rather delayed flight. Hacked up a tool to annotate unshared pages with names of pointers into shared libraries to better unwind the origin of dirtied pages.
  • Out for dinner with some friends at the Long March Canteen - which despite the name thankfully featured (nice) food.

face

If you copy contents from LibreOffice Writer to a plain text editor like gedit or Notepad, you will see that it does a straightforward thing: It copies the text and some basic formatting like converting bullets to ‘•’. For the Writer tables, the conversion is very simple right now: every cell is written in a separate line.

For example, if you have a table like this:

A | B
--|--
C | D

When you copy the table from LibreOffice Writer and paste it into a plain text editor, it will become something like this, which is not always desirable.

A
B
C
D

It is requested that like LibreOffice Calc, or Microsoft Word, and many other programs, the copy/paste mechanism should create a text like this:

A	B
C	D

The columns are separated by <tab>.

This feature request is filed in Bugzilla as tdf#144576:

Code pointers for Handling Writer tables

There are many steps in copy/pasting, including the data/format conversion and clipboard format handling. Here, you have to know that the document is converted to plain text via “text” filter.

The plaintext (ASCII) filter is located here in the LibreOffice core source code:

Therefore, to change the copy/paste output, you have to fix the ASCII filter. That would also provide the benefit that plain text export will be also fixed as requested here.

In this folder, there are a few files:

$ ls sw/source/filter/ascii/
ascatr.cxx parasc.cxx wrtasc.cxx wrtasc.hxx

To change the output, you have to edit this file:

In this file, there is a loop dedicated to create the output.

// Output all areas of the pam into the ASC file
do {
    bool bTstFly = true;
    ...
}

Inside this loop, the code iterates over the nodes inside the document structure, and extracts text from them. To check for yourself, add the one line below to the code, build LibreOffice, and then test. You will see that a * is appended before each node.

SwTextNode* pNd = m_pCurrentPam->GetPoint()->GetNode().GetTextNode();
if( pNd )
{
+   Strm().WriteUChar('*');
    ...
}

For example, having this table, with 1 blank paragraph up and down:

A | B
--|--
C | D

You will get this after copy/paste into a plain text editor:

*
*a
*b
*c
*d
*

To fix the bug, you have to differentiate between table cells and other nodes. Then, you should take care of the table columns and print tab between them.

To go further, you can only add star before table cells:

if( pNd )
{
    SwTableNode *pTableNd = pNd->FindTableNode();
+   if (pTableNd)
+   {
+       Strm().WriteUChar('*');
+    }
    ...
}

You can look into how other filters handled tables. For example, inside sw/source/filter/html/htmltab.cxx you will see how table is managed, first cell is tracked and appropriate functions to handle HTML table are called.

For the merged cells, the EasyHacker should first checks the behavior in


face

Berlin, 29 February 2024 – LibreOffice 24.2.1 Community, the first minor release of the free, volunteer-supported office suite for personal productivity in office environments, is now available at https://www.libreoffice.org/download for Windows, MacOS and Linux.

The release includes more than 100 bug and regression fixes over LibreOffice 24.2 [1] to improve the stability and robustness of the software. LibreOffice 24.2.1 Community is the most advanced version of the office suite, offering the best features and interoperability with Microsoft Office proprietary formats.

LibreOffice is the only office suite with a feature set comparable to the market leader. It also offers a range of interface options to suit all user habits, from traditional to modern, and makes the most of different screen form factors by optimising the space available on the desktop to put the maximum number of features just a click or two away.

Highlights of LibreOffice 24.2.1 Community

The main advantage of LibreOffice over other office suites is the LibreOffice Technology engine, a single software platform for all environments: desktop, cloud and mobile. This allows LibreOffice to provide a better user experience and produce identical – and interoperable – documents based on both ISO standards: Open Document Format (ODT, ODS and ODP) for users concerned about compatibility, resilience and digital sovereignty, and the proprietary Microsoft OOXML (DOCX, XLSX and PPTX).

Most notable new features in the LibreOffice 24.2 family:

GENERAL
• Save AutoRecovery information is enabled by default, and is always creating backup copies
• Fixed various NotebookBar options, with many menu improvements, better print preview support, proper reset of customised layout, and enhanced use of radio buttons
• The Insert Special Character drop-down list now displays a character description for the selected character (and in the tooltip when you hover over it)

WRITER
• “Legal” ordered list numbering: make a given list level use Arabic numbering for all its numeric portions
• Comments can now use styles, with the Comment paragraph style being the default
• Improved various aspects of multi-page floating table support: overlap control, borders and footnotes, nesting, wrap on all pages, and related UI improvements

CALC
• A new search field has been added to the Functions sidebar deck
• The scientific number format is now supported and saved in ODF
• Highlight the Row and Column corresponding to the active cell

IMPRESS & DRAW
• The handling of small caps has been implemented for Impress
• Moved Presenter Console and Remote control settings from Tools > Options > LibreOffice Impress to Slide Show > Slide Show Settings, with improved labelling and dialogue layout
• Several improvements and fixes to templates

ACCESSIBILITY
• Several significant improvements to the handling of mouse positions and the presentation of dialogue boxes via the Accessibility APIs, allowing screen readers to present them correctly
• Improved management of IAccessible2 roles and text/object attributes, allowing screen readers to present them correctly
• Status bars in dialogs are reported with the correct accessible role so that screen readers can find and report them appropriately, while checkboxes in dialogs can be toggled using the


Wednesday
28 February, 2024


face
  • Mail chew, interview & offer with Miklos.
  • Into Cambridge with J. , on to the Moller Institute for a tour of the rather lovely COOL days venue.
  • Back; sales catch-up with Eloy, sync with Caolan.

Tuesday
27 February, 2024


face
  • Mail chew, planning call, took car to have tires changed, bought J, some flowers on the way back. Patch review, sync with Neil. J. took N. back to university, worked late.
  • Started CofE Domestic Violence safeguarding training; sad its necessary really.

Monday
26 February, 2024


face
  • Took E. to school; bit of a mail backlog to process; started on it. Call with Calc team; 1:1's with Miklos, Pedro, marketing content call; more 1:1's, partner call.

Thursday
22 February, 2024


face

Berlin, February 22, 2024 – LibreOffice 7.6.5 Community is immediately available from https://www.libreoffice.org/download for Windows, macOS, and Linux [1]. This is the most thoroughly tested version of the suite, for deployments by individuals, small and medium businesses, and other organizations in productivity environments.

For enterprise-class deployments, TDF strongly recommends the LibreOffice Enterprise family of applications from ecosystem partners – for desktop, mobile and cloud – with a large number of dedicated value-added features and other benefits such as SLA (Service Level Agreements): https://www.libreoffice.org/download/libreoffice-in-business/

Users can download LibreOffice 7.6.5 Community from the office suite website: https://www.libreoffice.org/download/. Minimum requirements are Microsoft Windows 7 SP1 and Apple macOS 10.14. LibreOffice Technology-based products for Android and iOS are listed here: https://www.libreoffice.org/download/android-and-ios/

The Document Foundation does not provide technical support for users, although they can be helped by volunteers on user mailing lists and on the Ask LibreOffice website: https://ask.libreoffice.org

LibreOffice users, free software advocates and community members can support The Document Foundation with a donation at https://www.libreoffice.org/donate

[1] Change log pages: https://wiki.documentfoundation.org/Releases/7.6.5/RC1 and https://wiki.documentfoundation.org/Releases/7.6.5/RC2


face

When working with LibreOffice Impress, “Slide Master” is the place where you can change the templates used for different types of the slides used in your presentation. Here we discuss a possible improvement for the “Slide Master” by making the copy from master slides possible.

Copying the Master Page in Impress

To see the problem and the room for enhancement, open LibreOffice Impress, then choose “View->Master->Slide Master” from the menus. Then, try to copy the master page on the left in the slide sorter. Unfortunately, it is not possible.

Impress slide master

Impress slide master

Having this feature is helpful, because different page types have many things in common, and being able to copy/paste helps creating templates much faster.

Impress Code Pointers

Looking into sd/source/core/drawdoc3.cxx, you can see a huge function SdDrawDocument::InsertBookmarkAsPage, which is relevant here. It contains ~600 lines of code. This huge function is in itself a problem. Therefore, to implement the enhancement, on should try to first refactor the function, then add a unit test in sd/qa/unit, find and then separate all the ~6 use cases, and fix the style/name merging.

After the cleanup, the main fix should be implemented. The suggested path to implement this comes from Jean-Francois. He suggest to improve the duplicate() method, which is described in the documentation:

As described in the above documentation, its role is to duplicate a page:

Creates a duplicate of a DrawPage or MasterPage, including the Shapes on that page and inserts it into the same model.

However, the implementation does not work for master slides, as the macros in the attachment file implies. The solution should add the needed implementation for master slides.

The implementation is inside sd/source/ui/unoidl/unomodel.cxx inside duplicate function:

// XDrawPageDuplicator
uno::Reference< drawing::XDrawPage > SAL_CALL SdXImpressDocument::duplicate( const uno::Reference< drawing::XDrawPage >& xPage )
{

...

}

Final Words

The above issue is filed as tdf#45617. If you like to work on it, just follow the Bugzilla link to see more information.

To implement this feature, first you have to build LibreOffice from the sources. If you have not done that yet, please refer to this guide first:

Getting Started (Video Tutorial)

Older blog entries ->