tag:blogger.com,1999:blog-69435825662228121242018-02-20T14:27:59.881-08:00Side for informaticsZolnai Tamásnoreply@blogger.comBlogger8125tag:blogger.com,1999:blog-6943582566222812124.post-42015385121943497752017-03-06T01:01:00.000-08:002017-03-06T03:28:10.775-08:00New chart test suit<div style="text-align: justify;"><p>It's good to see that LibreOffice project has more and more tests improving the functional quality of the software. In this post, I also write about a new test suit added to the project. At <a href="https://www.collaboraoffice.com/">Collabora</a>, we are working on a project about a new chart functionality and as a preparation we decided to add a test suit which covers the chart layouting code better than the tests LO already had. With this we can map the actual state of the chart code to test cases and so make sure it's functionality remains intact. </p></div><h3>Different kind of automatic tests in LO</h3><div style="text-align: justify;"><p>There are different forms of automatic tests in the project. The question was which one is the most effective for testing a bigger part of the code (chart layout) not only a small functionality. One form of testing is when we use CppUnit assertions to compare some properties of the actual test case with the expected values. These tests used to test a very specific test case. For example it can check whether one test document has 2 pages when it is imported into LibreOffice. This kind of tests can lead to code duplication when we test the same thing (e.g. page number) on different test documents. That's why this kind of CppUnit test is not effective when we need to test one bigger part of the software sistematically, which may need to test the same thing (e.g. page number) on different test documents, which documents might be important use cases. </p></div><div style="text-align: justify;"><p>Other tests use an XML dump functionality to dump the test document's layout to an XML file and use this file as a reference with which the test document can be compared later. Adding new test cases to this kind of test suits is easier, needs lesser code change compared to first form of tests. However this kind of tests checks the whole layout of the document in general. So when one of these tests fails, you need to check the XML file, understand it's structure and find out why the pointed difference is there. It's clear that this kind of test failures might be more difficult to understand compared to the first form of tests where the test failures point to a very specific document property not to a reference XML file. </p></div><h3>New chart test suit</h3><div style="text-align: justify;"><p>An important difference between these two forms are the generality level of what it tests. First form tests some specific properties of one specific test case, while second form test the whole layout of the test document. To avoid the issues of these two forms I chose to write a test suit designed to test the software functionality on a middle level of generality. </p></div><div style="text-align: justify;"><p>I added a test suit which contains similar tests as the first form, comparing some specific document properties to extected values using CppUnit assertions, but the expected values are not hard coded, but they are written into and read from a simple structured reference file. It's implemented on a way which makes easy to add a new test document for an existing test case and generate the reference file without extending the test code. On the other hand we get a helpful error message when one test failes, since the test case is more specific than an XML dump test. </p></div><h3>Testing chart functionality</h3><div style="text-align: justify;"><p>After I had the form I spent some time on adding the most common use cases to the test suit. I added test cases for different components of charts (axis, chartwall, legend, grid, data series, etc.) and also for common chart types (columnchart, barchart, piechart, etc.). All test cases contains more subcases, testing functionally distinctable use cases. The sistematic testing of the chart functionality also pointed out some issues of the software:</p></div><div style="text-align: justify;"><p><a href="https://bugs.documentfoundation.org/show_bug.cgi?id=105947">https://bugs.documentfoundation.org/show_bug.cgi?id=105947</a></p></div><div style="text-align: justify;"><p><a href="https://bugs.documentfoundation.org/show_bug.cgi?id=105955">https://bugs.documentfoundation.org/show_bug.cgi?id=105955</a></p></div><div style="text-align: justify;"><p><a href="https://bugs.documentfoundation.org/show_bug.cgi?id=105956">https://bugs.documentfoundation.org/show_bug.cgi?id=105956</a></p></div><div style="text-align: justify;"><p><a href="https://bugs.documentfoundation.org/show_bug.cgi?id=105991">https://bugs.documentfoundation.org/show_bug.cgi?id=105991</a></p></div><div style="text-align: justify;"><p><a href="https://bugs.documentfoundation.org/show_bug.cgi?id=106068">https://bugs.documentfoundation.org/show_bug.cgi?id=106068</a></p></div><h3>Future possibilities</h3><div style="text-align: justify;"><p>Now with the new chart test suit bigger part of the chart functionality is covered with tests, but there are still use cases which are not tested. For example some exotic chart types have no tests yet, like bublechart, netchart or 3D charts. Tested document formats are also limited to LibreOffice native formats (ODS, ODP), but these tests are easy to extend to Microsoft Office file formats too, for compatibility testing. You can find new test suit at chart2/qa/extras/chart2dump/ in case you need to add new test cases. </p></div>Zolnai Tamáshttps://plus.google.com/117324542810204755658noreply@blogger.com1tag:blogger.com,1999:blog-6943582566222812124.post-12773797153160933272016-12-21T12:24:00.000-08:002017-03-06T01:24:50.364-08:00A short time spent on LibreOffice accessibility<h3>LibreOffice and Orca</h3><div style="text-align: justify;"><p>In the last months I have a short time period fixing accessibility issues mainly on Linux. LibreOffice has a bunch of this kind of issues (<a href="https://bugs.documentfoundation.org/show_bug.cgi?id=36549">fdo#36549</a>). This metabug is about those bugs which makes it difficult for Orca screen reader to make LO usable for visually impaired users. As I see Orca has a few workarounds in it's LO related code to handle these issues (e.g. ignoring false or duplicated events), but some times there is no such solution and we need to add improvements on LO side. </p></div><h3>Small fixes</h3><div style="text-align: justify;"><p>So I did some bug fixing on this area. Most of the bugs were about missing accessibility events, which are needed for Orca to handle events which are visible on the screen and so users should notice these changes. For example when the selection is changed on a Calc sheet (<a href="https://bugs.documentfoundation.org/show_bug.cgi?id=93825">fdo#93825</a>) or when the cursor moves inside a text portion (<a href="https://bugs.documentfoundation.org/show_bug.cgi?id=99687">fdo#99687</a>, <a href="https://bugs.documentfoundation.org/show_bug.cgi?id=71435">fdo#71435</a>). These issues can be frustrating for users who used to get feedback about the effect of their keyboard key pressing. </p></div><div style="text-align: justify;"><p>Fixing these issues needed small code changes, which shows LO accessibility code has a good structure in general, but as the code changes in time, some parts of this code just becomes broken, without maintanance. </p></div><h3>Spellcheck dialog</h3><div style="text-align: justify;"><p>A bit bigger change, I added, was related to the spellcheck dialog (<a href="https://bugs.documentfoundation.org/show_bug.cgi?id=93430">fdo#93430</a>). Spellcheck dialog shows the errors spellcheck algorithms find and shows some options to handle these errors (e.g. suggestions for correction). The problem with this dialog was with the text entry which shows the misspelled word. This text entry contains a small part of the text and highlights the misspelled word with red text color. Orca tried to get this small text part and find out which word is the erroneous one, but LO did not return the right text attributes and so Orca did not have the necessary information to handle this situation. </p></div><div style="text-align: justify;"><p>Now, after fixing this issue text color and also the boundaries of misspelled word are accessible for Orca. Great to see that Orca's developer, Joanmarie Diggs already <a href="https://github.com/GNOME/orca/commit/58ce7c7bedbf56bb65d4f25e49bd5780a8831692">adapted the code</a> to handle these new information and so reading of this spellcheck dialog will be better in the next versions of the two softwares. </p></div><h3>BeLin</h3><div style="text-align: justify;"><p>I added these accessibility improvements working for <a href="http://infoalap.hu/english/">IT Foundation for the Visually Impaired</a>. One project of the Foundation is an Ubuntu based operating system for visually impaired users called <a href=http://www.belin.hu/>BeLin</a> ("<b>Be</b>szélő <b>Lin</b>ux", which is "Speaking Linux" in English). Since it's an Ubuntu based distribution it has LibreOffice as default office suite and uses Orca as screen reader. </p></div><div style="text-align: justify;"><p>Hopefully these change will make more comfortable to use LibreOffice and Orca both on BeLin and on other Linux distributions. </p></div>Zolnai Tamáshttps://plus.google.com/117324542810204755658noreply@blogger.com0tag:blogger.com,1999:blog-6943582566222812124.post-28047682232619692192016-11-25T15:31:00.000-08:002017-03-06T01:24:42.752-08:00New pivot table function in Calc: Median<div style="text-align: justify;"><p>After have some work with a pivot table related performance issue, I've got a request to implement a new function for pivot tables. It seemed a useful feature to have and also an easy thing to implement at the first sight.</p></div><h3>Pivot table functions</h3><div style="text-align: justify;"><p>Pivot tables are used to analyse a larger amount of data using different statistic functions for that. Both LibreOffice Calc and Microsoft Office Excel have the same function palette with 11 functions like average, sum, count and so on. These aggregate functions can be used for data fields and for row/column fields. Data fields determines which source field would be summarized and which function would be used for that. Row/column fields don't have a function by default, but with setting one user can calculate subtotals too. </p></div><h3>Median</h3><div style="text-align: justify;"><p>Why median? In psychology research pivot tables can be a useful thing to analyze data of the participants. It depends on the type of the data which functions can be used for aggregation. When we have <a href="http://www.ats.ucla.edu/stat/mult_pkg/whatstat/nominal_ordinal_interval.html">interval variables</a> we can use average, but for <a href="http://www.ats.ucla.edu/stat/mult_pkg/whatstat/nominal_ordinal_interval.html">ordinal variables</a> we would need median, which was missing from the function list.</p></div><div style="text-align: justify;"><p>This was the starting point, but I've also found some user posts about missing this feature from MS Excel (see links below). It seems Excel users had to face the very same problem again and again over the last ten years. Well, it has some advantages if a software is open source, I guess.</p></div><div style="text-align: justify;"><p><div style="text-align: justify;"><a href="http://www.excelforum.com/excel-general/488849-median-average-and-standard-deviation-from-large-set-of-data.html">http://www.excelforum.com/excel-general/488849-median-average-and-standard-deviation-from-large-set-of-data.html</a></div><div style="text-align: justify;"><a href="http://superuser.com/questions/397852/median-in-pivot-table-in-excel-2010">http://superuser.com/questions/397852/median-in-pivot-table-in-excel-2010</a></div><div style="text-align: justify;"><a href="http://stackoverflow.com/questions/31899163/finding-median-using-pivot-table-in-excel-using-two-filtered-columns">http://stackoverflow.com/questions/31899163/finding-median-using-pivot-table-in-excel-using-two-filtered-columns</a></div></p></div><h3>Good news</h3><div style="text-align: justify;"><p>In LibreOffice 5.3, median is available for pivot tables: </p></div><div class="separator" style="clear: both; text-align: center;"><p><a href="https://2.bp.blogspot.com/-p1jEO6o8kWM/WDeE3iVqgHI/AAAAAAAACio/hCL1bQN6JF84BY8RGbZyfkJNLF5tZfieACLcB/s1600/Pivot_median_libreoffice_5_32.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-p1jEO6o8kWM/WDeE3iVqgHI/AAAAAAAACio/hCL1bQN6JF84BY8RGbZyfkJNLF5tZfieACLcB/s400/Pivot_median_libreoffice_5_32.png" width="400" height="365" /></a></p></div><h3>Thanks</h3><div style="text-align: justify;"><p>... to my professor, <a href="https://sites.google.com/site/krajcsi/">Attila Krajcsi</a> (<a href="https://sites.google.com/site/eltekognitiv/home/english">Department of Cognitive Psychology, Eötvös Loránd University</a>) for supporting the LibreOffice project, with the idea to have this new function and also with some course credits! </p></div>Zolnai Tamáshttps://plus.google.com/117324542810204755658noreply@blogger.com0tag:blogger.com,1999:blog-6943582566222812124.post-52845164065024620832016-10-20T11:03:00.000-07:002017-03-06T03:27:58.820-08:00Improve pivot table import performance (tdf#102694)<div style="text-align: justify;"><p>After a short break I got back to <a href="https://www.collaboraoffice.com/">Collabora</a> and I continue working on LibreOffice. This time I handled a performance issue in pivot table's import code, as part of our work for&nbsp;<a href="https://www.suse.com/">SUSE</a>.&nbsp;In some cases importing an XLSX document containing more pivot tables took such a long time, that user could interpret it as a freeze.</p></div><div style="text-align: justify;">After some testing we found that pivot table grouping is one of the points which makes import slow. We means me and Kohei Yoshida, who is an expert in this area of the code and helped me with understanding it. So grouping was in our focus this time.</p></div><h3 style="text-align: start;">Pivot table groups</h3><div style="text-align: justify;"><p>In case of pivot tables we can make groups for columns of the source data. This groups can be name groups (general groups), number groups (e.g. number ranges) and date groups (e.g. grouped by year, month, day, etc.). Since this groups are related to the source, they rather part of the source than the pivot table layout. This is true both for MS Excel and LO Calc implementation. Effectively this means that when we have more pivot tables using the same source they will have the same groups too. In case of LO Calc this groups are stored in the pivot cache linked with the corresponding source range.</p></div><h3>Performance</h3><div style="text-align: justify;"><p>The performance issue here was that however these kind of pivot tables (having the same source) were linked to each other by the pivot cache, XLSX import ignored that and worked expecting pivot tables are fully independent. Which means that same groups were imported so many times as many tables referenced them. What makes it even slower, this kind of tables are linked to each other on a way that when one table's grouping is changed other tables are also affected.</p></div><div style="text-align: justify;"><p>This difference between internal handling of pivot tables an the XLSX import code came from that XLSX import code was written before groups became part of the pivot cache. So I actually needed to update the import code to follow the changes of pivot table internal implementation. With that, pivot table groups' import time became quite good. For example the test document I uploaded to bugzilla (<a href="https://bugs.documentfoundation.org/show_bug.cgi?id=102694">tdf#102694</a>) took more than <b>20 minutes</b> before and now it takes less than a <b>half of a minute</b>. This document contains a small data table and 20 simple pivot tables. So it's not something which should take so much time to load and now it doesn't.</p></div>Zolnai Tamáshttps://plus.google.com/117324542810204755658noreply@blogger.com0tag:blogger.com,1999:blog-6943582566222812124.post-46324711659040910722015-03-28T13:43:00.000-07:002015-09-06T13:58:22.608-07:00MS Word compatible text highlighting in LibreOffice 5.0<div style="text-align: justify;"><p>LibreOffice has an <a href="https://bugs.documentfoundation.org/show_bug.cgi?id=64490">old compatibility issue</a> (inherited from OpenOffice) with Microsoft Office related to text highlighting (character background). During document exchange between the two office suites text highlighting is changed on an unexpected way. The root of the problem is that LibreOffice (LO) and Microsoft Office (MSO) has a different design for character backgrounds and so it's ambiguous how to save LO character background to MSO file formats (ambiguous both to users and to developers). Now this issue is solved by allowing the users to specify the behavior of LO export.</p></div><h3>Design differences</h3><div style="text-align: justify;"><p>Microsoft Word has a two-character-background concept. One attribute is called shading which lives on more levels of the document model: table cells, paragraphs and characters. With it we can add any background color to the selected object and we also can use it in a theme. The other one is called highlighting which offers a more limited color selection and is used on the analogy of highlighter pen to call attention to a portion of the document.</p></div><div style="text-align: justify;"><p>LibreOffice Writer, in the other hand, supports only one kind of character background which is called also as highlighting. This character background is closer to Word shading attribute, since it has a wider color selection and it's also a specialization of the general background attribute on the same way as shading in Word. An other similarity is that automatic font color interacts with character background in Writer and with shading in Word on a way to make text always visible (e.g. when background is dark then text color becomes white, when the background is light then text color changes to black). Word highlighting doesn't have this kind of behavior.</p></div><h3>About Microsoft Word's concept</h3><p>After I decided to fix this issue the first questions were: How useful is this two-character-background concept of Microsoft Office? Is this something which LibreOffice should support? <br/> I've got the answer: It's not something that LibreOffice needs.</p><div style="text-align: justify;"><p>First of all I can't see a real difference between the usage of shading and highlighting in Word. I mean both have the purpose to make some parts of the text more visible (highlight them). Highlighting can be also used for reviewing a document (mark parts of a document temporarily), but both office suits have a Comments feature which includes an integrated highlighting function, which can be more useful for this purpose.<p/></div><div style="text-align: justify;"><p>Additonally this concept also leads to misunderstandings among the users. At the first sight it can't be decided whether a highlighted text portion in a document is formatted actually with highlighting or with shading. This becomes worse because of that the highlighting feature is more accessible in some versions of Word and so it is more known by the users as shading which can&nbsp;<a href="http://answers.microsoft.com/en-us/office/forum/office_2010-word/i-cannot-remove-highlights-from-word-2010/e901ac6a-5904-4152-ba1a-b6b5d22a7087">make users confused when they get a document with character shading</a>. As I see this was the main issue also in case of LibreOffice, because it exported character background as shading to MSO formats and so some of the users were not able to remove this shading in Word by using "Highlight" toolbar &nbsp;button.</p></div><div style="text-align: justify;"><p>Summary, as I see the two-character-background concept does not have a real benefit and also causes problems on the user side so it's not worth to have.</p></div><h3>Export as highlighting or as shading&nbsp;</h3><div style="text-align: justify;"><p>The second question was: How to export LO character background to MSO formats to make the users happy? MSO shading is closer to LO character background in behavior but at the same time highlighting is more accessible in Word and on Writer's user interface character background is called as highlighting. So both attribute can be a good candidate for export.</p></div><div style="text-align: justify;"><p>That's why it seemed the best to have an option to choose between shading and highlighting. I added this option at Tools -&gt; Options -&gt; Load/Save -&gt; Microsoft Office, with which user can specify the behavior of the export. The default became highlighting mainly because in LO character background is called highlighting and so users can expect they will get highlighting in their MSO document and not shading.</p></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-dBVbOMGgPCs/VRb15Jo4a-I/AAAAAAAAB2g/TiT_cYbImLk/s1600/snapshot2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="A new section is highlighted with a red rectangle on Options dialog" border="0" src="http://1.bp.blogspot.com/-dBVbOMGgPCs/VRb15Jo4a-I/AAAAAAAAB2g/TiT_cYbImLk/s1600/snapshot2.png" height="239" title="New compatibility option" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">New Microsoft Office compatibility option</td></tr></tbody></table><div class="separator" style="clear: both; text-align: center;"><br /></div><h3>Import of Microsoft Word documents</h3><div style="text-align: justify;"><p>So far I wrote only about the export of LO character background. The next question is how shading and highlighting are imported from MSO documents and how they saved back. I solved this on the way that both attributes are preserved by import so a Word document will have the same appearance in Writer. If this document is saved without modification, then shading and highlighting will be saved back unchanged.</p></div><div style="text-align: justify;"><p>The difference compared to Word becomes visible by editing. It doesn't matter whether a character background was shading or highlighting in the original document it can be edited by Highlighting toolbar button in Writer. From that point - after a specific text range's background is edited inside LibreOffice - MSO shading and highlighting markers will be removed and will be replaced with LO specific character background. So MSO attributes are preserved until the corresponding text range is edited by LibreOffice.</p></div><div style="text-align: justify;"></div><h3 style="text-align: justify;">Summary</h3><div style="text-align: justify;"><p>In the next LibreOffice release users will be able to customize their office suite on one more way by specifying how to export character background to Microsoft Word file formats. I think this is the best we can do here because of the design differences. Well, let's see what users say.</p></div><div></div><h3>Thanks</h3><div><p>... to those people who sponsored this work on <a href="https://freedomsponsors.org/">FreedomSponsors:</a><br /><a href="https://freedomsponsors.org/issue/590/libo-writer-text-highligthing-not-compatible-with-ms-word-doc-and-docx-highlighting-transforms-to-background-color">https://freedomsponsors.org/issue/590/libo-writer-text-highligthing-not-compatible-with-ms-word-doc-and-docx-highlighting-transforms-to-background-color</a></p></div><div><br /></div>Zolnai Tamáshttps://plus.google.com/117324542810204755658noreply@blogger.com6tag:blogger.com,1999:blog-6943582566222812124.post-44533548946386439532014-08-20T00:55:00.000-07:002014-08-26T10:49:28.590-07:003D models in Impress (LibreOffice 4.3)<div style="text-align: justify;">The last LibreOffice release came with <b>3D model</b> support in <b>Impress</b>. Now you can insert 3D models onto your slides in the <b>open formats</b> of <b><a href="https://github.com/KhronosGroup/glTF">glTF</a></b>,<b> <a href="http://en.wikipedia.org/wiki/COLLADA">COLLADA</a></b> and <b><a href="http://en.wikipedia.org/wiki/Keyhole_Markup_Language">KMZ</a></b>. To do that go to <b>Insert-&gt;Object-&gt;3D Model...</b> in the menu hierarchy and after you selected a file you can see the model on your slide:<br /><br /></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-gQupLzwSE-Q/U_OIQBRCCxI/AAAAAAAABmU/qJCcp1oXiPM/s1600/duck_default_view.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="Impress with a duck model on the slide" border="0" src="http://4.bp.blogspot.com/-gQupLzwSE-Q/U_OIQBRCCxI/AAAAAAAABmU/qJCcp1oXiPM/s1600/duck_default_view.png" height="179" title="Duck model" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;"><div style="text-align: center;">Duck 3D model</div></td></tr></tbody></table><div style="text-align: center;"><a href="https://wiki.documentfoundation.org/images/e/e1/Duck_gltf_model.odp">Document including duck model</a></div><br /><h3>Animated models</h3><div style="text-align: justify;">The inserted 3D models also can define some <b>animation</b>s. In this case after insertion you can control the animation using the media toolbar's <b>play/pause/stop</b> buttons. During implementation we lean on the existing movie player feature, that's why 3D animations behave the same as movies. This similarity also exists inside the slideshow which means animations are also started as soon as the actual slide appears and the same custom animations are available to trigger play/pause/stop events.</div><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-cqV_mH5J8uw/U_OIA9K4mKI/AAAAAAAABmQ/IlIVI5jDf0A/s1600/Monster_gltf_model.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="Impress with a monster on the slide" border="0" src="http://1.bp.blogspot.com/-cqV_mH5J8uw/U_OIA9K4mKI/AAAAAAAABmQ/IlIVI5jDf0A/s1600/Monster_gltf_model.png" height="189" title="Animated monster model" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Animated monster model</td></tr></tbody></table><div style="text-align: center;"><a href="https://wiki.documentfoundation.org/images/c/cc/Monster_gltf_model.odp">Document including monster model</a> </div><h3>&nbsp;</h3><h3>Hidden features of the model viewer window</h3><div style="text-align: justify;">This 3D model feature was implemented a bit late in the releasing process that can explain why some features of the <b>viewer window</b> does not appear noticeable on the UI. Hopefully the situation will be better on the next release, but until then let's see what are these features are.</div><div style="text-align: justify;">First you should know that the viewer window <b>is active</b> only when the 3D model is "played" (push play button on the media toolbar or start the slideshow), even if the model actually doesn't have any animation to play. While the 3D model object is in stopped state, only a screen shot of the scene is displayed, which makes resizing and positioning easier in edit mode.</div><br /><h4>Changing camera position</h4><div style="text-align: justify;">So when the viewer window is active we can change the camera position to have a look at the model from different points of view. By default we are in <b>walkthrough mode</b> where we can <b>handle the camera from a first-person perspective</b>. We can move forward ('W'), backward ('S'), left ('A') and right ('D') using the keyboard and we can turn by click and drag.</div><div style="text-align: justify;">You can see some pictures bellow about the walkthrough mode. However you can enter into the maze, but inside the maze navigation becomes hard. The perfect would be if we could walk in the maze like packman does but camera handling still needs some improvements.<br /><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-dN86F3s5fPY/U_SM41hgxjI/AAAAAAAABok/eyIPeEocicM/s1600/packman2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://4.bp.blogspot.com/-dN86F3s5fPY/U_SM41hgxjI/AAAAAAAABok/eyIPeEocicM/s1600/packman2.png" height="179" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Packman maze default view</td></tr></tbody></table></div><div style="text-align: justify;"><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-segP36o7XfQ/U_SMFBnpcnI/AAAAAAAABoc/doqWmYh2n3c/s1600/packman3.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://2.bp.blogspot.com/-segP36o7XfQ/U_SMFBnpcnI/AAAAAAAABoc/doqWmYh2n3c/s1600/packman3.png" height="172" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Closer to the maze</td></tr></tbody></table></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-UN4xnbbIm00/U_OPrtK7x0I/AAAAAAAABng/PtmMu-8EUdw/s1600/packman4.png" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://1.bp.blogspot.com/-UN4xnbbIm00/U_OPrtK7x0I/AAAAAAAABng/PtmMu-8EUdw/s1600/packman4.png" height="173" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Inside the maze</td></tr></tbody></table><div style="text-align: center;"></div><div style="text-align: center;"><a href="https://wiki.documentfoundation.org/images/c/cd/Packman_maze.odp">Document including packman maze model</a>&nbsp; </div><div style="text-align: center;"><a href="https://3dwarehouse.sketchup.com/model.html?id=4dc13931b809de2496c29359f424ce25">Warehouse link to the original KMZ model.</a></div><div style="text-align: justify;">&nbsp; </div><div style="text-align: justify;"></div><div style="text-align: justify;">Next to the walkthrough mode there is an other one called <b>orbit mode</b>. Use 'M' key to switch between the two modes. In orbit mode the <b>camera is moved on an orbit around the model</b>, always looking at the model. Using the keyboard we can move the camera on this orbit northward ('W'), southward ('S'), westward ('A') and eastward ('D'), and we also can change the distance between the orbit and the center of the model ('E' and 'Q' keys). Click and drag event also moves the camera on this orbit, but from the user points of view this looks rather like the model is rotated around it's center.</div><div style="text-align: justify;">On the next pictures you can see the different views after the model was rotated horizontally by mouse (in other words, camera was moved around the model horizontally):<br /><br /></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-3cKF_9jJd5U/U_OQIZlP_2I/AAAAAAAABns/dLh7WxT-BZY/s1600/Duck_gltf_model1.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://3.bp.blogspot.com/-3cKF_9jJd5U/U_OQIZlP_2I/AAAAAAAABns/dLh7WxT-BZY/s1600/Duck_gltf_model1.png" height="188" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Duck model, full face</td><td class="tr-caption" style="text-align: center;"><br /></td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-YbREMZKOOpE/U_OQPh4h3_I/AAAAAAAABn0/uCsFaDctg3E/s1600/Duck_gltf_model2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://2.bp.blogspot.com/-YbREMZKOOpE/U_OQPh4h3_I/AAAAAAAABn0/uCsFaDctg3E/s1600/Duck_gltf_model2.png" height="188" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Duck model, profile</td><td class="tr-caption" style="text-align: center;"><br /></td></tr></tbody></table><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/--egEGpfqJcY/U_OQQnsWN_I/AAAAAAAABn8/-W6EJXRSgx4/s1600/800px-Duck_gltf_model3.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://1.bp.blogspot.com/--egEGpfqJcY/U_OQQnsWN_I/AAAAAAAABn8/-W6EJXRSgx4/s1600/800px-Duck_gltf_model3.png" height="188" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Duck model, from behind</td></tr></tbody></table><h4>&nbsp;</h4><h4>FPS rendering</h4><div style="text-align: justify;">We added an <b>FPS (frame per second)</b> rendering possibility to the viewer window, so the rendering performance can be measured easily. By default this feature is disabled. To enable it you can <b>press 'F' key</b> and you will see FPS number at the <b>right-bottom corner</b> of the viewer window.</div><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-0SA8hzMdmmI/U_ORWgAgsKI/AAAAAAAABoI/DHpyaVKN014/s1600/monster_fps.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://4.bp.blogspot.com/-0SA8hzMdmmI/U_ORWgAgsKI/AAAAAAAABoI/DHpyaVKN014/s1600/monster_fps.png" height="173" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Monster model with FPS</td></tr></tbody></table><h3>&nbsp;</h3><h3>About the file formats</h3>The main format is <b>COLLADA</b>, the other ones are closely related to it.<br /><div style="text-align: justify;">First <b>KMZ</b> is a zipped file format which can contain 3D models in COLLADA format. So not all KMZ files can be loaded by LibreOffice, it's assumed that the given KMZ format contains only one 3D model. The main advantage of supporting KMZ format is the huge source of free 3D models on the <a href="https://3dwarehouse.sketchup.com/">3D warehouse site</a>. On this site almost all models are available in KMZ format.</div><div style="text-align: justify;">The <b>glTF</b> format is a really new format, actually it has only a draft specification. The main purpose of the format is the better performance. It is designed to make loading and rendering of the models faster, with using such structures which are closer to the OpenGL language. It's not an independent file format but rather a runtime form of COLLADA. So in general glTF models are generated from COLLADA files and creating/editing of the 3D models is done in COLLADA format.</div><div style="text-align: justify;">Since glTF is desgined to be faster, LibreOffice stores all 3D models in this form both in runtime and in the ODP file. When a KMZ or a COLLADA file is inserted into Impress, the file is converted to glTF and rendering comes just after that.</div><br /><h3>Some limitations you should aware of</h3><div style="text-align: justify;">First of all it's good to know that Impress uses <b>OpenGL 3.0</b> for rendering of these 3D models. If your graphic card doesn't support it then only a question mark will be displayed on the screen, but the model is there, so if you save your presentation and move it to a capable computer then it will appear.</div><div style="text-align: justify;">Other limitations come from that glTF is a draft format and collada2gltf tool (used for COLLADA-&gt;glTF conversion) is also unstable. So don't surprise if some of the KMZ files downloaded from Warehouse are not rendered well.<br />By now this feature is available only for <b>Windows</b> and <b>Linux</b>. </div><div style="text-align: justify;"><br /></div><h3>Who stands behind the feature</h3>3D model support came alive as a result of the cooperation of <a href="https://libreoffice-from-collabora.com/">Collabora</a>, <a href="http://www.amd.com/en-gb">AMD</a> and <a href="http://www.multicorewareinc.com/">MCW.</a><br />First of all <b>AMD</b> founded our work and was coming up with new ideas about the feature.<br /><div style="text-align: justify;">Secondly a developer group from <b>MCW</b> was working on the parser/rendering code of the glTF format. To make our cooperation with MCW more misunderstanding tolerant we set up a wall between LibreOffice code and glTF parser code with defining an API. Later, from that separation born an open source glTF rendering library called <a href="https://gerrit.libreoffice.org/gitweb?p=libgltf.git">libglTF</a>. By now libglTF is still developed closely to LibreOffice. </div><div style="text-align: justify;">Last but not least we at <b>Collabora</b> have done the integration into LibreOffice. First Markus Mohrard was working on LibreOffice OpenGL code in general, made it better/more fresh and generalized it allowing to use the same code for all OpenGL based&nbsp; features: OpenGL transitions, OpenGL charts and glTF models. Jan Holesovsky (Kendy) was the manager of the project, making plans, participating in brain storming and having great ideas. Matus Kukan helped us with integrating COLLADA related libraries into LibreOffice (for COLLADA-&gt;glTF conversion).</div><div style="text-align: justify;">Finally I implemented embedding of glTF models into Impress by setting together the pieces (plans from Kendy, generic OpenGL pieces from Markus, COLLADA conversion from Matus and glTF rendering from MCW). </div><br />Zolnai Tamáshttps://plus.google.com/117324542810204755658noreply@blogger.com2tag:blogger.com,1999:blog-6943582566222812124.post-57192315743887973212013-09-30T03:25:00.000-07:002014-08-20T07:48:33.108-07:00GSoC 2013 - Character border<h2 style="text-align: left;"></h2><div style="text-align: left;"><h3>Character border (<a href="https://bugs.freedesktop.org/show_bug.cgi?id=35155">fdo#35155</a>)</h3><div style="text-align: justify;">In this summer I participated in Google Summer of Code and implemented border on the character level. So in the next 4.2 version of LibreOffice users will be able to set border around a run of characters.<br /><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-vrl_VgcofXQ/Uklp8og2shI/AAAAAAAAAH8/REx2tjDXhAM/s1600/charborder2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Two example of character border. Above there is a drop cap letter with double border and blue background. Under there are two words with a blue border around it plus a box-shadow on the top-right side of the border." border="0" src="http://3.bp.blogspot.com/-vrl_VgcofXQ/Uklp8og2shI/AAAAAAAAAH8/REx2tjDXhAM/s1600/charborder2.png" height="222" title="Border around one or more characters" width="400" /></a></div><div style="text-align: justify;"><br />The character border can be specified as a direct formatting via Format -&gt; Character -&gt; Borders tab and it also can be the part of a character style (e.g. Format -&gt; Styles and Formatting -&gt; Character Style). One special case of the latter is drop caps character style.<br /><br /></div><h3>Drop Caps</h3><div style="text-align: justify;">While I was working with character border and I was testing whether it works in all cases I realized that Drop Caps has some bugs which keep me from adding my new feature. So I have to solve them before I able to keep on my original project:</div><br />1. User defined background was shifted upward<br /><ol></ol></div><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-TYeHe2fEVM4/UklvnNi8C5I/AAAAAAAAAIs/lkj1eLjp6c8/s1600/dropq.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Two parts of the picture shows the background painting before the bug fix and after that. Before the default gray background was hanging out from behind the user defined yellow background. The after part shows that after fixing the bug only the user defined yellow background is painted." border="0" src="http://4.bp.blogspot.com/-TYeHe2fEVM4/UklvnNi8C5I/AAAAAAAAAIs/lkj1eLjp6c8/s1600/dropq.png" height="131" title="Fix drawing of drop caps' background" width="400" /></a></div><div style="text-align: left;">Since border is drawn at the edges of the background, it was also drawn at the wrong place.<br /><br /></div><div style="text-align: left;"></div><div style="text-align: left;">2. Changing line height</div><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-lIVQ6dLAB7E/Uklxjqmhd8I/AAAAAAAAAI4/uqPqYEOt5OQ/s1600/lineheight1.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img alt="A drop caps with the deafult gray background and a red arrow showing that the first line of the paragraph next to the drop cap has bigger height as it is expected." border="0" src="http://4.bp.blogspot.com/-lIVQ6dLAB7E/Uklxjqmhd8I/AAAAAAAAAI4/uqPqYEOt5OQ/s1600/lineheight1.png" height="128" title="Changing line height" width="200" /></a></div><div style="text-align: left;"></div><div style="text-align: justify;">Height of the first line was changing unexpectedly when the drop cap letter's original height was bigger than the height of the following characters. Original means the height which it would have if it wasn't a drop cap. By now this original height is ignored during height calculation of the first line.</div>Since border rendering increase this height with the border width, line height also increased with this width.<br /><div style="text-align: left;"><br /></div><div style="text-align: left;">3. ODF import loses drop caps character style (<a href="https://bugs.freedesktop.org/show_bug.cgi?id=43807">fdo#43807</a>)</div><div style="text-align: left;">It also loses the border including by this character style.<br /><br /></div><div style="text-align: left;"><h3>Border merge</h3><div style="text-align: justify;">The implementation of character attributes and the specification of ODF file format make it necessary to add automatic border merge functionality. Border merge means that if two text ranges have equal border (same line, padding and shadow) they will be rendered inside the same border.<br /><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-bdE2wOn37zY/Ukl5B2XhGgI/AAAAAAAAAJQ/g5UU8mVLEmY/s1600/bordmerge10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Above there is a text with two bordered text range with one Q letter between them. After this Q letter is removed the two border text range are merged and so are rendered within the same border." border="0" src="http://2.bp.blogspot.com/-bdE2wOn37zY/Ukl5B2XhGgI/AAAAAAAAAJQ/g5UU8mVLEmY/s1600/bordmerge10.png" height="197" title="Border merge" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div style="text-align: justify;">Border merge also means background merge, since this is a general concept to draw border at the edges of the background.</div><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-v5FqVp86tWc/Ukl5iIaMLLI/AAAAAAAAAJw/2SofRLpqsaM/s1600/borderlinemerge.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a></div><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-NMXQWusO9Hs/Ukl5l4izgKI/AAAAAAAAAJ4/LzEbugYCmUg/s1600/backmerge%3f.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="When there are letters with different sizes and they have background then this background's height will depend from the height of the text. So letters with different size will have different hight background. But if this letters are merged to one border group then they will have a coherent background." border="0" src="http://1.bp.blogspot.com/-NMXQWusO9Hs/Ukl5l4izgKI/AAAAAAAAAJ4/LzEbugYCmUg/s1600/backmerge%3f.png" height="120" title="Background merge" width="400" /></a></div><div style="text-align: justify;"><br /></div><h3>File formats</h3>List of file formats to which/from which Writer exports/imports character border:<br />ODT, HTML, DOC, DOCX, RTF </div>Zolnai Tamáshttps://plus.google.com/117324542810204755658noreply@blogger.com8tag:blogger.com,1999:blog-6943582566222812124.post-11152007721555663922013-06-17T08:24:00.003-07:002015-01-28T18:56:57.334-08:00LIMIT improvements in LibreOffice 4.1Some new things get into this version of LO.<br /><br /><div style="text-align: justify;">1. The primary improvement is adding a combobox to the design view and so not needed to use SQL view to limit the number of resulting rows. This new edit is get place on the query design toolbar and in the Query Properties dialog (Edit -&gt; Query Properties).<br /><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-EZ5wbQ9MV7k/UcI5sOpRwWI/AAAAAAAAADs/YZR3vkle5Xc/s1600/limit.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="Place of the new toolbar item is on the rightmost side of the query toolbar." border="0" src="http://4.bp.blogspot.com/-EZ5wbQ9MV7k/UcI5sOpRwWI/AAAAAAAAADs/YZR3vkle5Xc/s400/limit.png" height="171" title="Limit combobox" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">New toolbar item to limit a query result<br />in query design view.</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-xfHWBwwn0rU/UcLcIQs2wBI/AAAAAAAAAG0/Vy920O-C6ZI/s1600/queryproperties.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="Query properties dialog has the same box as the query design toolbar. These two box are in sync." border="0" src="http://3.bp.blogspot.com/-xfHWBwwn0rU/UcLcIQs2wBI/AAAAAAAAAG0/Vy920O-C6ZI/s400/queryproperties.png" height="237" title="Query Properties" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;"><div class="thumbcaption">New dialog to add query properties like limit and distinct values. </div></td></tr></tbody></table></div><br /><div class="separator" style="clear: both; text-align: center;"></div><div style="text-align: justify;">2. LO uses HSQLDB (version 1.8.0) as an embedded\default database so this is an commonly used driver for Base. However it has a bug which lead to an exception when user intend to run a query like "SELECT * FROM table LIMIT n". The problem is HSQLDB's parser does not handle "LIMIT" as an keyword and so in this case "LIMIT" parsed as a table alias and the following number as an unexpected token. Inside LO this bug is fixed by now.<br /><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-7Pw-6QHQHg4/UcLZeknNY2I/AAAAAAAAAGc/xca-rrekL70/s1600/hsqldbbug.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="An error box saying the number after the LIMIT is unexpected." border="0" src="http://3.bp.blogspot.com/-7Pw-6QHQHg4/UcLZeknNY2I/AAAAAAAAAGc/xca-rrekL70/s400/hsqldbbug.png" height="215" title="HSQLDB limit bug" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">In older versions, HSQLDB throws an exception when<br />use LIMIT directly after from clause.</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-uQhn5Gz4qpE/UcLZ0Y5nRNI/AAAAAAAAAGk/KqAavgA_ATM/s1600/fixhsqlbug.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="The rows are listed with expected number." border="0" src="http://3.bp.blogspot.com/-uQhn5Gz4qpE/UcLZ0Y5nRNI/AAAAAAAAAGk/KqAavgA_ATM/s400/fixhsqlbug.png" height="245" title="HSQLDB bug fixed" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">LO 4.1 doesn't throw the HSQLDB's exception and return<br />with the expected result.</td></tr></tbody></table><br />Of course it also means LIMIT keyword can't use as a table alias anymore in LO as it was used before. These usage is stand only when use "Run SQL command directly" option. (LO has an own parser which notice that LIMIT is a keyword and so can't be a table alias, but with this option this syntax check can be avoided)</div><div style="text-align: justify;"><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-WwVLYfI4gNM/UcLZINPqX6I/AAAAAAAAAGM/VAGGuH0ETE8/s1600/limit_as_alias.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="Limit used as an table alias in SQL statement and Base return with all elements of the table without problem." border="0" src="http://4.bp.blogspot.com/-WwVLYfI4gNM/UcLZINPqX6I/AAAAAAAAAGM/VAGGuH0ETE8/s400/limit_as_alias.png" height="253" title="Limit as a table alias" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Before, user was able to use LIMIT as a table alias.</td></tr></tbody></table></div><div style="text-align: justify;"><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/--o8J2GPAOO0/UcLZSi8Dc1I/AAAAAAAAAGU/4bMJXIEc_FY/s1600/limit_cant_use_as_alias.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="An error box is opened which say that LIMIT is unexpected token." border="0" src="http://4.bp.blogspot.com/--o8J2GPAOO0/UcLZSi8Dc1I/AAAAAAAAAGU/4bMJXIEc_FY/s400/limit_cant_use_as_alias.png" height="207" title="Limit as a keyword" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">LO 4.1 throws an exception, when use LIMIT as a name<br />(get from fixed HSQLDB)</td></tr></tbody></table></div><div style="text-align: justify;"><br />3. This is my favorite. In SQL mode, in the SQL edit the LIMIT keyword was highlighted wrong as a single name (green colour) and not as a keyword (blue colour). The origin of this problem may be the same as in case of HSQLDB's bug. The LIMIT keyword got into the code later as other keywords and it was missed to add all of places where a keyword has to appear.<br /><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-Ig6IIOqi6u0/UcLWvCsPj6I/AAAAAAAAAF0/Z2m3Zd9UyxM/s1600/high_before.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="In the SQL edit the LIMIT word has green color." border="0" src="http://3.bp.blogspot.com/-Ig6IIOqi6u0/UcLWvCsPj6I/AAAAAAAAAF0/Z2m3Zd9UyxM/s400/high_before.png" height="200" title="Wrong highlight of limit" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Before, the LIMIT keyword was highlighted<br />with green color like a simple name.</td></tr></tbody></table><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-yxxtFaXNzUc/UcLWbp-VA6I/AAAAAAAAAFk/7Y1xb-p9o_I/s1600/high_before.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br /></a></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-N63XDK7WVxA/UcLWuGWVJnI/AAAAAAAAAFw/c9gZ9ERpESo/s1600/high_after.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="In the SQL edit the LIMIT word has blue color just as the oder keywords like SELECT, FROM and so on." border="0" src="http://1.bp.blogspot.com/-N63XDK7WVxA/UcLWuGWVJnI/AAAAAAAAAFw/c9gZ9ERpESo/s400/high_after.png" height="205" title="Right highlight of limit" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">In LO 4.1, the LIMIT keyword has the same highlighting as<br />other keywords (blue character color).</td></tr></tbody></table></div><div style="text-align: justify;"><br />Thanks for <a href="http://fsf.hu/">FSF.hu Foundation</a> for funding this work!</div>Zolnai Tamáshttps://plus.google.com/117324542810204755658noreply@blogger.com2