V3.0 — ??.???.2018
© 2013-2018 Marco A.G.Pinto and Community Contributors.
Freely distributable and modifiable under the
Apache License v2.0.
SEMI-FINISHED MANUAL — REQUIRES A FULL REVISION WHEN I HAVE THE TIME!
LAST UPDATE: 2018-05-24


Index
1 — Introduction
2 — Copyright & DISCLAIMER
3 — Contacts
4 — Thanks
5 — How it works

  5.1a — Using UTF-8
  5.1b — EOL Windows VS Linux VS Mac
  5.1c — Packing the files into Extensions
  5.1d — Shortcut keys
  5.1e — Preferences
  5.1f — Find
  5.2 — Dictionary

      5.2.1 — Creating a Dictionary
      5.2.2 — Editing a Dictionary
      5.2.3 — How Suffixes/Prefixes work
      5.2.4 — What is code position and rule
      5.2.5 — Menus
            5.2.5.1 AFF Validate
            5.2.5.2 Extract wordlist
                    5.2.5.2.1 All .txt
                    5.2.5.2.2 — All .csv
                    5.2.5.2.3 — Compounts .txt
                    5.2.5.2.4 — Compounts .txt (LanguageTool)

            5.2.5.3 Count wordlist
            5.2.5.4 Show duplicates
            5.2.5.5 Statistics
            5.2.5.6 Fix invalid spaces
  5.3 — Thesaurus

      5.3.1 — Creating a Thesaurus
      5.3.2 — Editing a Thesaurus
      5.3.3 — Menus
            5.3.3.1 — Extract synonyms
            5.3.3.2 — Clean up symbols
            5.3.3.3 — Show/Merge duplicates
            5.3.3.4 — Fix invalid spaces
            5.3.3.5 — Combine/Sort/Unduplicate simple meanings
                    5.3.3.5.1 — Combine
                   
5.3.3.5.2 Unduplicate
                    5.3.3.5.3 — Sort
  5.4 — Hyphenation
      5.4.1 — Creating a Hyphenation
      5.4.2 — Editing a Hyphenation
      5.4.3 — Menus
            5.4.3.1 — HYP Validate
            5.4.3.2 — Fix invalid spaces
  5.5 — Autocorrect
      5.5.1 — Creating an Autocorrect
      5.5.2 — Editing an Autocorrect
      5.5.3 — Menus
            5.5.3.1 — Extract autocorrects
            5.5.3.2 — Clean up hex symbols
            5.5.3.3 — Show/Delete/XDelete duplicates
            5.5.3.4 — Fix invalid spaces

6 — History
7 Apache License



1 — Introduction
An open-source linguistic tool coded in PureBasic for editing the Dictionary/Thesaurus/Hyphenation/Autocorrect files of OpenOffice/LibreOffice, Firefox, Thunderbird and SeaMonkey, provided they are in UTF-8 format.

This program was originally developed to easily edit the synonyms of OpenOffice and LibreOffice.

I had this idea after asking to the persons in charge of the pt_PT project, from Minho University in Portugal, what I should do to suggest synonyms since only suggested words for the Portuguese speller were added.

I was told that they didn't know how to add synonyms since the guy in charge of that project left it long-ago (2006).

Later, I wanted to make it compatible with Firefox and Thunderbird, after it became possible to edit dictionaries. I hoped that in the future someone would use it in Thunderbird and fix the en_GB speller which was full of typos and missing words. Since no one volunteered, I took this task myself.

This is where my idea came from: develop something easy to use since I tried some official tools for the tasks and I didn't understand anything on them, not even how to use them.

My tool is so intuitive that even a child can use it.

On
25.Aug.2013 I released a "forked" en_GB speller V2.00. The speller has been made available to OpenOffice/LibreOffice, Firefox, Thunderbird and SeaMonkey. So far, I have added 40 426 words (as of V2.60).


2 — Copyright & DISCLAIMER
This program is copyrighted to Marco A.G.Pinto and Community Contributors.

It is freely distributable and modifiable under the Apache License v2.0.


3 — Contacts
(coder)

S.Mail:
Marco A.G.Pinto
Apartado 3083
2746-501 Queluz
(Portugal )

E.Mail:
marcoagpinto@sapo.pt


4 — Thanks
Some special thanks go to:
Groups/Organisations:
 — Apache Community;
 — LanguageTool Community;
 — LibreOffice Community;
 — Mozilla Community;
 — PureBasic Community.

Persons:

 — Alberto Simões (Minho University);
 — Alexandro Colorado (Apache OpenOffice);
 — Andrea Pescetti (Apache OpenOffice);
 — Andreas Mantke (LibreOffice);
 — Andrew Ferguson (PureBasic);

 — António Manuel Dias (former pt_PT maintainer);
 — Áron Budea (LibreOffice);
 — Ashley Scott (PureBasic);
 — Bernd Krüger-Knauber (PureBasic);
 — Chris Saxon (PureBasic);
 — Daniel Naber (LanguageTool);
 — Dennis Roczek (LibreOffice);
 — Filiep Spyckerelle (European Parliament);
 — Frédéric Laboureur (PureBasic);
 — Gervase Markham (Mozilla);

 — Guy Waterval (Apache OpenOffice);
 — Heinz Urban (PureBasic);
 — Ian Neal (Mozilla);
 — Jeroen Ooms (LibreOffice);
 — Jonathan Kew (Mozilla);

 — José Almeida (Minho University);
 — Kruno (LibreOffice);
 
— Kevin Scannell (Mozilla);
 — Martin Srebotnjak (LanguageTool);
 — Matthias Mailänder (LanguageTool);

 — Mauro Trevisan (LibreOffice)(Mozilla);
 — Mykhailo Oliinyk
 — Pedro Marques (IADE — Creative University);
 — Peter Chamberlin (Mozilla);
 — Ricardo Palomares Martínez (Apache OpenOffice);
 — Shantanu Oak (LibreOffice);
 — srod (PureBasic);
 — Stuart Swales (Apache OpenOffice);
 — Thomas Schulz (PureBasic);
 — Tiago Santos (LibreOffice)(LanguageTool).


5 — How it works
5.1a — Using UTF-8
This tool was made to work with UTF-8 encoding.

A good trick to convert the old encoding formats to UTF-8 is to use, for example, the Notepad++ editor for Windows.

Simply open the files with it, change the encoding to UTF-8 using the menu: EncodingConvert to UTF-8 without BOM, so that accents appear well.

Then, use the Save As option and select "Normal text file (*.txt)" and it is done.

Please don't forget to change by hand in the header of the files, the word that has the old format, with the new one.

The headers with the font encoding are inside the files. See for example Version 2.4 (01/09/2007) of the Italian files:
— The Dictionary (.DIC + .AFF):
The .DIC has no keyword.

The .AFF has the following keyword:
SET ISO8859-15 → Replace with SET UTF-8

— The Thesaurus (.DAT):
It has in the first line:
ISO8859-15 → Replace with UTF-8

— The Hyphenator (.DIC):
It has in the first line:
ISO8859-15 → Replace with UTF-8


5.1b — EOL Windows VS Linux VS Mac
I have done some tests saving in Windows and Linux and the Windows files become bigger.

This happens because the End of Line characters is different in Windows and in Linux.

Windows uses #CRLF$, Linux #LF$ and Mac #CR$.

Linux is the open-source standard, so it is better to use its format.


5.1c — Packing the files into Extensions
To create extensions you will have to use other package which I don't know yet.

The simplest way though, is just to replace the files of an existing extension with yours.

You should use the SORT button before you can consider your Dictionary/Thesaurus/Autocorrect ready for being packed into an extension.

Making extensions for Mozilla seems easier than making for OpenOffice/LibreOffice, since for them it is more complex due to the fact that they can have multiple languages in one archive.

Compress in a .ZIP archive and then change the file extension to the target software.


5.1d — Shortcut keys
TAB SWITCH RIGHT — CTR+TAB
TAB SWITCH LEFT — SHIFT+CTR+TAB
OPEN — CTR+O
SAVE — CTR+S
SAVE AS — SHIFT+CTR+S
FIND — CTR+F
ADD — CTR+A
GOTO — CTR+G
DELETE — DEL
EXIT A WINDOW & ABORT OPEN/SAVE/SAVE AS — <ESC>
EXIT — CTR+Q



5.1e — Preferences



ToolsPreferences

This window allows to select the global settings of PTG.

If PTG doesn't find the file ptg3.prefs, or if it from a different version, it will open this window automatically at the start and you will need to save it.


Number of lines visible for each ListIconGadget in the tabs:
Double-click in the last line that fits in the gadget, the last line visible, and watch for number in visible line textbox changes to what's selected. More space can be gained by changing the window resolution in this preference dialogue.
You may want to use the "Plus Pixels" to set the accuracy between -10 and +10 pixels.
This will make it work with all OSes.


Resolution:
Set your preferred window resolution.
There is also the possibility of using a window that will fit your desktop intirely.
The GUI will fit to the chosen resolution.


LanguageTool:
This will set the minimum number of blank lines between each chunk in a LanguageTool grammar.xml file for parsing.
The idea is to edit/create rules using PTG.
Not working yet.


.AFF Aid Language:
It is possible to have external files with a list of each code, so that while working in the dictionary edit/add window, it is easier to find specific rules.

The GB Aid is hardcoded into PTG.

How .AFF Aid works:

The first line of the .txt uses the 3 letter ISO standard for the language, followed by the language in the language itself separated by e.g. a colon. vec:Vèneto

You then still could make separate versions of the file, if you want to make a more specialised version (indicating the country of dialect): vec-IT (for Italian version) or vec-BR.

The standard list of codes can be found at: http://www-01.sil.org/iso639-3/

You can consult the list also directly on the Web at http://www-01.sil.org/iso639-3/codes.asp

There is
the possibility to have a third field with the name of the language in English, to suit people who do not know the code, neither the language e.g. nld:Nederlands:Dutch .

So, for Veneto, see the example:
custom_aff_aid.vec.png ;16x16 PNG locale for the ComboBox.

custom_aff_aid.vec.txt ;Veneto Rules. See the ".vec" before the ".txt".
                       
In the .txt file we followed the lines logic:
vec:vèneto:Veneto
a0/a1/a2: common verbs (first conjugation verbs, second conjugation arrhizotonic verbs)
b0/b1/b2: second conjugation rhizotonic verbs


So, the first line is what appears in the PTG ComboBox, and the rest are the rules.

Then place both files inside the folder: "custom_aff_aid"



Number Separator Character:
To separate thousands in the number of items by any character, while displaying numbers.
For example: 1,000,000 or 1 000 000, etc.


5.1f — Find
It is possible to search for items in each tab by pressing CTR+F or the "Find" button.

It is also possible to directly Edit/Delete items from the results by a right-click over the fount items.

The options are very simple:
 1) Left match text, searches for items that match from the left the search expression;
 2) Match case allows case sensitive search;
 3) Match extra information allows to search for text in all columns of the items and not just in the first.




5.2 — Dictionary
PTG supports the following Dictionaries features:
 1) FLAG chr, number and long;
 2) AF Compression;
 3) Two fold recursivity;
 4) NOSUGGEST flag;
 5) NEEDAFFIX flag.



5.2.1 — Creating a Dictionary
If you have a Dictionary in memory, use ERASE to delete all entries.

To create a Dictionary from zero you just have to press the button ADD to add words.

Use EDIT or double-click to change information regarding the words.

Use DELETE or <DEL> to remove entries.

The format of the Dictionary is two UTF-8 format files with the extension .DIC and .AFF .

Even though the tool reads the .AFF file, I still haven't read documentation about how it works. This means that creating a Dictionary from scratch will require some previous knowledge.

Now-and-then remember to SAVE/SAVE AS to play safe.


5.2.2 — Editing a Dictionary
First download the extension of the language you intend to use, from the official pages.

You should have an .OXT or .XPI file which you rename to .ZIP in order to extract its contents to HDD.

Press OPEN and select the .DIC file of the Dictionary and my tool will also open the associated .AFF file.

Now just ADD/EDIT/DELETE the current entries.

Now-and-then remember to SAVE/SAVE AS to play safe.


5.2.3 — How Suffixes/Prefixes work



A small explanation how to make suffixes/prefixes work, based on the e-mail written by Ricardo Palomares Martínez:

While editing dictionaries, you can add one or more identifiers in front of a word, after a "/". For example, the en_GB .AFF uses the identifier "S" to create plural:
party/S

This will look in the .AFF file and find:
SFX S Y 9
SFX S y ies [^aeiou]y
SFX S 0 s [aeiou]y
SFX S 0 es [sxz]
SFX S 0 es [cs]h
SFX S 0 s [^cs]h
SFX S 0 s [ae]u
SFX S 0 x [ae]u
SFX S 0 s [^ae]u
SFX S 0 s [^hsuxyz]

SFX S Y 9
SFX → It is a suffix (PFX would mean a prefix).
S   → The suffix identifier.
Y   → Y for YES. It means the rule can be cross-used with other prefixes and suffixes.
       If N the rule can't be applied together with other affixes the word might have.
9   → The number of lines related to this rule.


SFX S y ies [^aeiou]y
SFX       → It is a suffix (PFX would mean a prefix).
S         → It is the suffix/prefix identifier.
y         → For a suffix it is the letter(s) to be removed from the end of the word.
             For a prefix, from the beginning of the word.
ies       → For a suffix, it is the letter(s) to be added at the end of a word.
             For a prefix, from the beginning of the word.

[^aeiou]y → Condition in regexp notation. Here, the rule is applied to words ending with
             a "y" and the letter next to the last is NOT a, e, i, o or u.
             Yes, the ^ means that the letters mustn't match.

So, party/S would produce: parties

And, boy/S would produce: boys, triggering the following rule which has a 0 saying that no letters are replaced, just added. It applies to words ending with a "y". There is no ^ which means that the second letter from the right must be a, e, i, o or u.
SFX S 0 s [aeiou]y

Also notice that if words have capitalised letters, the Hunspell in the used software will only accept them with capitalised letters exactly like in the .DIC (it suggests a typo if different).


5.2.4 — What is code position and rule
The derived words ListIconGadget has the fields: "Code Position" and "Rule".

"Code Position" is the characters position of the first line (header) of each rule used. For example:
SFX S Y 9
(It is a Suffix with identifier "S", "Yes" and "9" rules in it)

Then, inside the dictionary editor, you now have a column with the rule number after the header. Double-clicking in a listicongadget line will jump to the header, then you will just have to scroll a few lines down to the rule number.

Please notice that the editor gadget in the add/edit word window has a "clean" version of the .AFF with space repetitions removed in order to be faster finding the codes (less characters to process).

Regarding the rules:
[^abc]de[fghi]

[fghi] means the current character must be one of f,g,h,i.
de means it must have the word de on the left of the last character check above, if it matched the condition.
[^abc] means the current chr in the word must not be a,b,c (all different).
See the example above for "party".

The rules may either be check from right to left (suffix) or left to right (prefix).

Prefixes are run against the primary word and suffixes. This means that if you have in the en_GB speller:
party/S

You will get:
party (primary)
parties (suffix)


If you had:
party/SU

You would run the "U" code (prefix) against the two words above:
party (primary)
parties (suffix)
unparty (prefix)
unparties (prefix)



5.2.5 Menus
5.2.5.1 — AFF Validate
After it is coded it will allow to search for missing UTF-8 flags or duplicates of it, duplicate rules or missing rules, showing the problematic lines where the errors occur.


5.2.5.2 Extract wordlist
Decodes and extracts the wordlist into a .txt file.


5.2.5.3 Count wordlist
Decodes and counts the total number of words in the wordlist.


5.2.5.4 Show duplicates
The menu to search for duplicates in the dictionary will match two identical words, unless they have morphological information that differentiates them.
See the example of the Portuguese speller where each word has information in front:
celeste/p [CAT=adj,N=s,G=_]
Celeste [CAT=np,G=f,SEM=p]



5.2.5.5 Statistics
Decodes and counts the total number of words in the wordlist showing also statistical information.



5.2.5.6 Fix invalid spaces


5.3 — Thesaurus
5.3.1 — Creating a Thesaurus
If you have a Thesaurus in memory, use ERASE to delete all entries.

To create a Thesaurus from zero you just have to press the button ADD to add synonyms.

Use EDIT or double-click to change information regarding the synonyms.

Use DELETE or <DEL> to remove entries.

The format of the Thesaurus is a UTF-8 format file with the extension .DAT .

Now-and-then remember to SAVE/SAVE AS to play safe.


5.3.2 — Editing a Thesaurus
First download the extension of the language you intend to use, from the official pages.

You should have an .OXT file which you rename to .ZIP in order to extract its contents to HDD.

Press OPEN and select the .DAT file of the Thesaurus.

Now just ADD/EDIT/DELETE the current entries.

Now-and-then remember to SAVE/SAVE AS to play safe.

In build 82 (14.Aug.2015) I improved the Thesaurus part. It is now possible to use DEL to delete synonyms and added a menu "Thesaurus Tools" with options being the most important one the "Combine" which combines all meanings but only works with simple lines:
x|2
a
b
would generate:
a|2
x
b
and:
b|2
a
x



PTG creates .idx files for the Thesaurus.


5.3.3 — Menus

5.3.3.1 Extract synonyms

5.3.3.2 Clean up symbols

5.3.3.3 Show/Merge duplicates

5.3.3.4 Fix invalid spaces


5.3.3.5 Combine/Sort/Unduplicate simple meanings


5.3.3.6 Unduplicate simple meanings

What is the definition of a "duplicate" meaning?

It means for example:
apple|3
one
two
one

It means that it would remove the "one" once becoming:
apple|2
one
two

It checks line by line and not column by column:
apple|1

-|one|two|one

This wouldn't change the meanings.


  2) "Sort simple meanings" will work also line by line in the Thesaurus meanings.


5.4 — Hyphenation
.AFF files are open in the first tab "Dictionary".

When you open a .DIC in "Dictionary", it opens also the .AFF. Then, after opening a dictionary, you can go to the "Hyphenation" tab and open an Hyphenation .DIC file.

The joining of both will allow you to derivate words in hyphenation or even type words by hand.


5.4.1 — Creating a Hyphenation
Simply add the rules to the EditorGadget or open an existing one.


5.4.2 — Editing a Hyphenation
Open the hyphenation .dic of the language you intend to use or add new rules.

One can open a speller and then check hyphenation from its wordlist, or just use an hyphenation file for words without codes.

Thanks to Mauro Trevisan for explaining to me how the rules work.

Results can always be checked with: https://www.ushuaia.pl/hyphen/?ln=en

The "Rule" field in the ListIconGadget is for developers to debug while they create rules.

Example of rules, taken from Németh László PDF:
. a l g o r i t h m .
   4l1g4
    l g o3
     1g o
           2i t h
               4h1m
  -----------------
   4 1 4 3 2 0 4 1
  a l-g o-r i t h-m = al-go-rith-m

In simple words, if you have the word
"algorithm", it will add a space (internally) to each letter and a "." on each side:
". a l g o r i t h m . "
Then you may create the rules above in the EditorGadget without spaces:
4l1g4
lgo3
1go
2ith
4h1m


If you use a dot:
.1go ; It means the rule matches the left of the word

4h1m. ; It means the rule matches the right of the word
.a4l1g4o3r2it4h1m. ;Using a dot on each side means that the word must match the whole rule.

Only the odd numbers are converted to hyphens.

If several rules match the words, the highest number in a column will be kept.

Remember that the first word in the Hyphenator EditorGadget must be: UTF-8

On build 127, thanks to Mauro Trevisan, I improved the parsing of rules, to accept repeated rules per word:

For the word "ultrateren":

. u l t r a t e r e n .
   1l
  
2l t
    
1t    1t
      t
2r
     1t
       1r      1r
                  
1n
                  
2n .
 -----------------------
  
2 1 2   1   1   2
  u l-t r a-t e-r e n = ul-tra-te-ren

Rules:
1l
2lt
1t
t2r
1t
1r
1n
2n.



Mauro also told me about another type of rules that already have an hyphen.

For the word "inportar":

. i n p o r t a r .
      p o
-r t a r
  i n1
 -------------------
     1   -
  i n-p o-r t a r = in-po-rtar

Rules:
po-rtar
in1


Press OPEN and select the hyphenation .DIC file.


Now-and-then remember to SAVE/SAVE AS to play safe.


5.4.3 — Menus

5.4.3.1 — HYP Validate

After it is coded it will allow to search for missing UTF-8 flags or duplicates of it, duplicate rules or rules without numbers, showing the problematic lines where the errors occur.


5.5 — Autocorrect

5.5.1 — Creating an Autocorrect



5.5.2 — Editing an Autocorrect
First download the DocumentList.xml of the language you intend to use, from the official AOO/LO pages.

The autocorrect files in AOO/LO are stored in the path:
$instdir/share/autocorr/acor_*.dat which are actually zipped files containing the XML files.

Rename the .DAT files to .ZIP and extract the contents.

Using Notepad++ or other tool, format the DocumentList.xml so that it is in UTF-8 and it uses the structure (you can copy/paste this first line over the XML entry):
<?xml version="1.0" encoding="UTF-8" ?> <block-list:block-list xmlns:block-list="http://openoffice.org/2001/block-list">
<block-list:block block-list:abbreviated-name="incorrect1" block-list:name="correct1"/>
<block-list:block block-list:abbreviated-name="incorrect2" block-list:name="correct2"/>
<block-list:block block-list:abbreviated-name="
incorrect3" block-list:name="correct3"/>
<block-list:block block-list:abbreviated-name="incorrect4" block-list:name="correct4"/>
    etc. (use lines like the previous)
</block-list:block-list>

Have in mind that you must have per line only one pair of incorrect/correct. I noticed that the .XML I edited had all the text in one single line, so use Notepad++ to create a return at the end of each line:


Press OPEN and select the DocumentList.xml file.

Now just ADD/EDIT/DELETE the current entries.

Now-and-then remember to SAVE/SAVE AS to play safe.


5.5.3 — Menus
5.5.3.1 — Extract autocorrects
It will extract to a .txt file the list of autocorrect entries, with the structure:
diden't → didn't
speeking → speaking



5.5.3.2 — Clean up hex symbols


5.5.3.3 — Show/Delete/XDelete duplicates
It allows you to show, delete and eXclusive Delete entries in the autocorrect list.

For example, Delete will keep one of the duplicates found:
word1
word1
word1
word2
word2
word3


It will keep:
word1
word2
word3



eXclusive Delete will remove all entries if they have at least one duplicate:
word1
word1
word1
word2
word2
word3

It will only keep:
word3

This is useful if you have appended your list (merged) into an existing autocorrect file and want only to commit to Gerrit (LibreOffice) the words not found on your list and on Gerrit's.


5.5.3.4 — Fix invalid spaces


6 — History

V3.0 — ??.???.2018
Compiled with PureBasic 5.XX.

— The manual has been rewritten;

— The GUI has been redesigned:
  1) Now supports two resolutions: 1024x600 and 1280x600;
  2) New menus and modern menus look for Windows;
  3) Several new options and gadgets;
  4) GTK3 support;
  5) Linux now has an icon when running.


— It uses dynamic arrays which makes all load/save operations ultrafast;

— Shortcut keys;

— Enhanced pop-up menu which can be used on the ListIconGadgets items with options for smart/faster use;

— Dictionary Editor now supports:
  1) Pop-up menu to copy the selected line word into the clipboard;
  2) Taboo warning if the NOSUGGEST flag is used;
  3) It is now possible to have custom
"AFF Aid" files with 16x16 PNGs flags;
  4) Replaced the ListIconGadget field "Position" with "Code Position".
  5) Support for FLAG NUM and LONG (with recursivity — tested in twofold);
  6) Improved: If a code isn't found in the .aff it no longer exits the decoding function;
  7) Major speed gain in the .AFF optimising code (gl_ES);
  8) It now accepts: \/ are escaped "/" in dictionary words;
  9) It now combines PREFIXES against PRIMARY+SUFFIXES.

— Thesaurus:
  1) Sorting synonyms naturally by replacing | with chr(9) and after sorting with |;
  2) Update number of meaning while editing synonyms now supports Mac OS line endings;
  3) Saving the Thesaurus now creates an .idx file.


— Invalid characters, such as spaces, while inserting data, turns the gadgets background to red;

— Added a "Tools" menu for the preferences:
  1) Prefs now load and save in a file named
"ptg3.prefs" allowing to select a dynamic number of lines.
     This makes it compatible with all OSes.

— It saves Dictionary + Thesaurus + Autocorrect with #LF$ instead of #CRLF$ for Linux mode;

— Cleaned the code;

— Speeded up several operations;

— Better UTF-8 warnings;

— GUI improvements and fixes;

— It is now possible to have custom "AFF Aid" files with 16x16 PNGs flags;


— Support for FLAG NUM and LONG (no recursivity yet);

— Modern menus look for Windows;

— Pop-up menu now has an extra option "Clone" (very useful);


— Major speed gain in the .AFF cache optimising code (gl_ES);

— Added recursivity to dictionary word decoding (tested with twofold);

— Support via coloured symbol for NOSUGGEST in words editor;

— Fix: Changing the GUI resolution in the PREFS would reset the .AFF EditorGadget;

— Improved: If a code isn't found in the .aff it no longer exits the decoding function;


— Apache License link should now work in Linux;

— Added "Not coded yet!" to tabs not coded yet;

— It is now possible to extract a thesaurus in book format (can be later converted to PDF);

— Added Exclusive Delete to autocorrect;

— Fix: another prefix bug with twofold;

— HTML Help menu item;

— Support for extracting wordlist compounds for LanguageTool and check for duplicates makes use of morphological information;

— Fix: Check for duplicates improved (morphologic data);

— Now the check for duplicates in dictionary, also shows the lines numbers;

— New About PureBasic menu icon;

— Renamed "Quit" menu item to "Exit";

— Created a colour constant #GreenDark that is better seen on a grey background;

— Coded undo/redo;

— Autocorrect: Allow to try to open a file with a non-valid header;

— New button to move to the bottom of the ListIconGadget;

— Help menu item now shows "F1" in it;

— F1 (help) now works in the edit/new items windows;

— Formats the total number of items (numbers) to be better seen;

— Now there is a "Recent Files:" entry in the "File" menu;

— Now it is possible to Edit/Delete from the "Advanced Find" window;

— Added "Missing Codes:" to the Dictionary editor;

— Added images to pop-up menus;

— Message Requesters now have a sign;

— Fix: Decoding of rules with a 0 (pt_PT);

— About window now shows www.proofingtoolgui.org as the project's page;

— Thesaurus' EditorGadget now has a grey tip on it;

— Cleaned the code a bit.

On build 123:
 — Improved the manual a lot;
 — New pop-up menu option "Invert Selection";
 — Major speed gain in "Optimising .AFF decode cache" — up to ~30% faster;
 — Changed the e-mail address in "About" window to Sapo;
 — Cleaned the code;
 — Improved the check for updates code;
 — Renamed the menu "Tools" to "Prefs";
 — Coded the hyphenator.

On build 122:
Just two Linux fixes:
 — Fix: Get maximum window on PREFS now works in Linux (still doesn't work with Ubuntu 16.04, only with 17.10 and maybe 17.04);
 — Fix: Linux: Highlighted item during a CURS UP at the top seems to only be removed after the scroll.

On build 121:
 — Improved the user guide a lot;
 — Pop-up menu icons colours should now look better in Ubuntu 17.10 and Windows;
 — Cleaned the code a bit;
 — Preferences:
   1) Now tip appears all the time;
   2) Added new resolutions;
   3) New option: "Number separator chr";
   4) Use of Plus Pixels in Prefs + GUI;
 — The default separator chr for numbers is now a comma;
 — Dictionary Editor: Now enlarges according to window size definition;
 — Thesaurus Editor: Now enlarges according to window size definition;
 — Fix: Linux: Highlighted item during a CURS DOWN at the bottom seems to only be removed after the scroll (UP needs a fix).