wtorek, 21 sierpnia 2012

Polski słownik w Enterprise Architect

Program Sparx Enterprise Architect dzięki modułowi do generowania raportów może posłużyć za narzędzie do opracowania kompleksowej dokumentacji projektowej. Przy użyciu możliwości generowania raportów RTF można tworzyć dokumentację wprost w Enterprise Architect zamiast przy użyciu MS Word lub Open Office. Takie rozwiązanie w warunkach polskich jest niestety obarczone poważną wadą. Enterprise Architect nie został wyposażony w polski słownik do sprawdzania poprawności pisowni.
Na forum Sparxa pojawiają się prośby o dodanie polskiego słownika do programu. Ja długo żyłem nadzieją, że producent zlituje się nad polskimi użytkownikami, bo mam wrażenie, że program Sparx Enterprise Architect cieszy się w Polsce dużą popularnością i już dawno wiedzie prym w kategorii narzędzi typu CASE.
Rozpocząłem własne badanie w jaki sposób możliwe byłoby samodzielne dodanie takiego słownika. Najpierw udało mi się ustalić, że słownik jest zdefiniowany w plikach z rozszerzeniem .clx oraz .tlx. Na przykład słownik dla języka angielskiego (amerykańskiego) znajduje się w plikach ssceam2.clx oraz ssceam.tlx. Pierwszy z tych plików zawiera słownik w wersji skompilowanej, dzięki czemu sprawdzanie pisowni jest znacząco szybsze od sprawdzania w oparciu o plik tekstowy ssceam.tlx.
Sprawdzanie pisowni w oparciu o plik tekstowy .tlx przebiega sprawnie, jeśli ilość słów nie przekracza kilku tysięcy.
Dodatkowo słowa dodawane do słownika przez użytkownika umieszczane są w pliku %AppData%\Roaming\Sparx Systems\EAuserdic.tlx.
Pliki te są obsługiwane przez program WSpell oferowany przez firmę Wintertree software. Zatem Sparx korzysta z silnika Sentry Spelling Checker Engine firmy Wintertree software.

Na stronie producenta znajduje się szczegółowa dokumentacja przeznaczona dla developerów, w której jest opisane dokładnie, w jaki sposób działa ich produkt.
Znalazłem doskonały słownik języka polskiego w formacie .txt pozbawiony jakichkolwiek dodatkowych znaczników, które są wykorzystywane przez alternatywny program do sprawdzania pisowni Aspell. Słownik ten zawiera blisko 120 000 słów (od "AA" do "żyźnie") i sprawdziłby się idealnie jako słownik do sprawdzania pisowni. Przy pomocy programu Gżegżółka przekonwertowałem ten słownik ze strony kodowej Windows 1250 na ISO 8859-2 (Europa Środkowa).
Znalazłem w sieci również program WL2Dic, który umożliwia konwersję z pliku tekstowego do pliku .clx. Program ten działa poprawnie, umożliwia wskazanie pliku źródłowego, pliku docelowego oraz kodu języka. Możliwe jest wybranie kodu dla języka polskiego, jednak w takim przypadku program uprzejmie informuje, że w takim wypadku należy wybrać opcję tworzenia słownika w formacie Unicode.
Cannot create non-unicode dictionary for this language.
Please specify -u switch
Niestety program WL2Dic wykorzystuje wersję biblioteki Sentry Spelling Checker Engine w wersji 5.14.
A niestety Sentry Spelling Checker Engine do wersji 5.14 nie umożliwiał skorzystania z kodowania znaków w ISO-8859-2 (czyli środkowoeuropejski).
Na stronie SSCE Revision History widnieje informacja:
The Sentry engine can now support Unicode through a build option. Currently, this support is limited to the SSCE Source SDK. As part of this support, SSCE can now process single-byte characters from the Latin 1 (ISO-8859-1) character set or Unicode. Character sets ISO-8859-2 through ISO-8859-10 are no longer supported (use Unicode instead). The lexicon-compression API (SSCE_CompressLex*) creates a Latin 1 or Unicode compressed lexicon depending on how the engine was built. The Unicode engine can read both Unicode and Latin 1 compressed lexicons, but the Latin 1 engine cannot read Unicode compressed lexicons.
W historii wersji 5.15 zapisano:
The Sentry engine now supports all ISO-8859 character sets. Two new functions, SSCE_GetCharSet and SSCE_SetCharSet have been defined for this purpose. The default character set is ISO-8859-1, which was the only ISO-8859 character set supported previously. The character set is a "global" setting, meaning a change to the character set affects all sessions. A set of language-id constants for each major language covered by ISO-8859 character sets has been defined.

A w rejestrze systemowym (HKEY_CURRENT_USER\Software\Wintertree\SSCE) dodano klucz CharSet, który służy do zmiany strony kodowej od ISO-8859-1 do ISO-8859-10. Wartość tego klucza mogłaby się zmieniać automatycznie po wyborze polskiego słownika.
Enterprise Architect korzysta z wersji 5.16, która umożliwia teoretycznie obsługę polskiego słownika. Przypuszczam, że przygotować poprawnie działający polski słownik może tylko Sparx Systems lub inna firma, która zakupiła pełną wersję SDK od firmy Wintertree software. Testowa wersja tego SDK pozwala tylko na generowanie słownika zawierającego nie więcej niż 1000 słów.

Istnieje również możliwość skorzystania z kodowania unicode, jednak jest on obsługiwany tylko w przypadku korzystania z  silnika Sentry Spelling Checker Engine dla Javy, a nie dla Windows (czyli w programach napisanych w C/C++, Delphi, Visual Basic, VB.NET, C# lub ASP).

Co zatem można zrobić?

Próbowałem obejść ten problem oszukując moduł sprawdzania pisowni, twierdząc że kompilowany przeze mnie słownik dotyczy języka angielskiego. Plik docelowy o nazwie ssceam2.clx wygenerował się poprawnie i osiągnął wielkość 509 kB. Słownik ten jest poprawnie interpretowany w Enterprise Architect, ale niestety nie w pełnym zakresie. Efekt jest połowiczny - nie są obsługiwane słowa zawierające polskie znaki.
Podobny efekt udało się uzyskać Michałowi Wolskiemu, który udostępnia taki słownik na swojej stronie: http://www.michalwolski.pl/2009/06/sprawdzanie-pisowni-w-enterprise-architect-polski-slownik/
Ja jednak uznałem, że rozwiązanie częściowe mnie nie satysfakcjonuje. Oznaczałoby to, że i tak mniej więcej połowa wyrazów byłaby podkreślana na czerwono.

Podsumowanie

Nie mam dobrych wieści w temacie sprawdzania pisowni w języku polskim w Enterprise Architect. Dopóki Sparx Systems nie zmieni silnika do sprawdzania pisowni niemożliwe jest wykorzystanie słownika języka polskiego.
Obecnie mamy dwie alternatywy:
  • korzystanie ze słownika bez poprawnej obsługi polskich znaków diakrytycznych,
  • wyłączenie opcji sprawdzania pisowni (menu Tools --> Options --> Objects --> Disable spelling).

1 komentarz:

  1. Też kiedyś próbowałem się zmierzyć z problemem słowników , niestety te same wnioski :/

    Pisałem nawet do Sparx w tej sprawie, poniżej odpowiedź:

    Hello Daniel,

    Thanks for the note.

    Unfortunately we don't have any plans to add a Polish dictionary to EA. I have logged this as a feature request and if it's approved it'll be added to a future release.

    Sorry we couldn't be of greater assistance here. If you have any further questions please let us know.


    ... tak więc jest zalogowane jako feature request. Być może gdyby więcej osób ich o to notyfikowało to by się wzięli do roboty. Jakby nie było trochę licencji w Polsce sprzedają.

    P.S.
    Jeżeli udałoby się komuś problem słownika rozwiązać, byłbym wdzięczny za informację.

    P.S.2
    Wpisanie kodów udowadniających, że nie jestem automatem jest niezłą abstrakcją. Ze 20 przewinąłem i dalej nie trafiłem żadnego, który jestem w stanie rozszyfrować :)

    OdpowiedzUsuń