diff options
Diffstat (limited to 'editeng/inc/editeng/svxacorr.hxx')
-rw-r--r-- | editeng/inc/editeng/svxacorr.hxx | 395 |
1 files changed, 395 insertions, 0 deletions
diff --git a/editeng/inc/editeng/svxacorr.hxx b/editeng/inc/editeng/svxacorr.hxx new file mode 100644 index 000000000000..c900228cc053 --- /dev/null +++ b/editeng/inc/editeng/svxacorr.hxx @@ -0,0 +1,395 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef _MySVXACORR_HXX +#define _MySVXACORR_HXX + +#include <com/sun/star/embed/XStorage.hpp> +#include <tools/rtti.hxx> +#include <svl/svarray.hxx> +#include <i18npool/lang.h> +#include <tools/time.hxx> +#include <tools/date.hxx> +#include <tools/string.hxx> +#include <editeng/swafopt.hxx> +#include "editeng/editengdllapi.h" + +class CharClass; +class SfxPoolItem; +class SvxAutoCorrect; +class SvStringsISortDtor; +class SfxObjectShell; +class SvxAutoCorrLanguageTable_Impl; +class SvxAutoCorrLastFileAskTable_Impl; +class SotStorageRef; +class SotStorage; + +// Flags fuer die AutoKorrekt-Flags +const long CptlSttSntnc = 0x00000001; // Gross-Buchstaben am SatzAnfang +const long CptlSttWrd = 0x00000002; // keine 2 Gr.-Buchst. am WordAnfang +const long AddNonBrkSpace = 0x00000004; // Add non breaking space before :;?! +const long ChgOrdinalNumber = 0x00000008; // Ordinal-Number 1st, 2nd,.. +const long ChgToEnEmDash = 0x00000010; // - -> Endash/Emdash +const long ChgWeightUnderl = 0x00000020; // * -> Fett, _ -> unterstreichen +const long SetINetAttr = 0x00000040; // INetAttribut setzen +const long Autocorrect = 0x00000080; // Autokorrektur aufrufen +const long ChgQuotes = 0x00000100; // doppelte Quotes ersetzen +const long SaveWordCplSttLst= 0x00000200; // GrB. am SatzAnf. auto. aufnehmen +const long SaveWordWrdSttLst= 0x00000400; // 2 GrB. am WortAnf. auto. aufnehmen +const long IgnoreDoubleSpace= 0x00000800; // 2 Spaces ignorieren +const long ChgSglQuotes = 0x00001000; // einfache Quotes ersetzen + +const long ChgWordLstLoad = 0x20000000; // Ersetzungsliste geladen +const long CplSttLstLoad = 0x40000000; // Exceptionlist fuer CplStart geladen +const long WrdSttLstLoad = 0x80000000; // Exceptionlist fuer WordStart geladen + +// TODO: handle unicodes > U+FFFF and check users of this class + +// nur eine Mappingklasse +class EDITENG_DLLPUBLIC SvxAutoCorrDoc +{ +public: + SvxAutoCorrDoc() {} + virtual ~SvxAutoCorrDoc(); + + virtual BOOL Delete( xub_StrLen nStt, xub_StrLen nEnd ) = 0; + virtual BOOL Insert( xub_StrLen nPos, const String& rTxt ) = 0; + virtual BOOL Replace( xub_StrLen nPos, const String& rTxt ) = 0; + + virtual BOOL SetAttr( xub_StrLen nStt, xub_StrLen nEnd, USHORT nSlotId, + SfxPoolItem& ) = 0; + + virtual BOOL SetINetAttr( xub_StrLen nStt, xub_StrLen nEnd, const String& rURL ) = 0; + + // returne den Text eines vorherigen Absatzes. + // Dieser darf nicht leer sein! + // Gibt es diesen nicht oder gibt es davor nur Leere, dann returne 0 + // Das Flag gibt an: + // TRUE: den, vor der normalen Einfuegeposition (TRUE) + // FALSE: den, in den das korrigierte Wort eingfuegt wurde. + // (Muss nicht der gleiche Absatz sein!!!!) + virtual const String* GetPrevPara( BOOL bAtNormalPos ) = 0; + + virtual BOOL ChgAutoCorrWord( xub_StrLen& rSttPos, xub_StrLen nEndPos, + SvxAutoCorrect& rACorrect, + const String** ppPara ) = 0; + // wird nach dem austauschen der Zeichen von den Funktionen + // - FnCptlSttWrd + // - FnCptlSttSntnc + // gerufen. Dann koennen die Worte ggfs. in die Ausnahmelisten + // aufgenommen werden. + virtual void SaveCpltSttWord( ULONG nFlag, xub_StrLen nPos, + const String& rExceptWord, + sal_Unicode cChar ); + + // welche Sprache gilt an der Position? + virtual LanguageType GetLanguage( xub_StrLen nPos, BOOL bPrevPara = FALSE ) const; +}; + + +class EDITENG_DLLPUBLIC SvxAutocorrWord +{ + String sShort, sLong; + BOOL bIsTxtOnly; // ist reiner ASCII - Text +public: + SvxAutocorrWord( const String& rS, const String& rL, BOOL bFlag = TRUE ) + : sShort( rS ), sLong( rL ), bIsTxtOnly( bFlag ) + {} + + const String& GetShort() const { return sShort; } + const String& GetLong() const { return sLong; } + BOOL IsTextOnly() const { return bIsTxtOnly; } +}; + +typedef SvxAutocorrWord* SvxAutocorrWordPtr; +SV_DECL_PTRARR_SORT_DEL_VISIBILITY( SvxAutocorrWordList, SvxAutocorrWordPtr, 10, 10 , EDITENG_DLLPUBLIC) + +class EDITENG_DLLPUBLIC SvxAutoCorrectLanguageLists +{ + String sShareAutoCorrFile, sUserAutoCorrFile; + // falls die AutoCorr Datei neuer ist + Date aModifiedDate; + Time aModifiedTime, aLastCheckTime; + + LanguageType eLanguage; //LANGUAGE_DONTKNOW fuer alle Sprachen verwenden + SvStringsISortDtor* pCplStt_ExcptLst; + SvStringsISortDtor* pWrdStt_ExcptLst; + SvxAutocorrWordList* pAutocorr_List; + SvxAutoCorrect& rAutoCorrect; + + long nFlags; + + BOOL IsFileChanged_Imp(); + void LoadXMLExceptList_Imp( SvStringsISortDtor*& rpLst, + const sal_Char* pStrmName, + SotStorageRef& rStg); + void SaveExceptList_Imp( const SvStringsISortDtor& rLst, + const sal_Char* pStrmName, + SotStorageRef& rStg, + BOOL bConvert = FALSE); + + BOOL MakeBlocklist_Imp( SotStorage& rStg ); + void RemoveStream_Imp( const String& rName ); + void MakeUserStorage_Impl(); + +public: + SvxAutoCorrectLanguageLists( SvxAutoCorrect& rParent, + const String& rShareAutoCorrectFile, + const String& rUserAutoCorrectFile, + LanguageType eLang); + ~SvxAutoCorrectLanguageLists(); + + // Lade, Setze, Gebe - die Ersetzungsliste + SvxAutocorrWordList* LoadAutocorrWordList(); + void SetAutocorrWordList( SvxAutocorrWordList* pList ); + const SvxAutocorrWordList* GetAutocorrWordList(); + + // Lade, Setze, Gebe - die Ausnahmeliste fuer Grossbuchstabe am + // Satzanfang + SvStringsISortDtor* LoadCplSttExceptList(); + void SaveCplSttExceptList(); + void SetCplSttExceptList( SvStringsISortDtor* pList ); + SvStringsISortDtor* GetCplSttExceptList(); + BOOL AddToCplSttExceptList(const String& rNew); + + // Lade, Setze, Gebe die Ausnahmeliste fuer 2 Grossbuchstaben am + // Wortanfang + SvStringsISortDtor* LoadWrdSttExceptList(); + void SaveWrdSttExceptList(); + void SetWrdSttExceptList( SvStringsISortDtor* pList ); + SvStringsISortDtor* GetWrdSttExceptList(); + BOOL AddToWrdSttExceptList(const String& rNew); + + // Speichern von Wortersetzungen: + // Diese speichern direkt im Storage. Die Wortliste wird + // entsprechend aktualisiert! + // - purer Text + BOOL PutText( const String& rShort, const String& rLong ); + // - Text mit Attributierung (kann nur der SWG - SWG-Format!) + BOOL PutText( const String& rShort, SfxObjectShell& ); + // - loesche einen Eintrag + BOOL DeleteText( const String& rShort ); +}; + + +class EDITENG_DLLPUBLIC SvxAutoCorrect +{ + friend class SvxAutoCorrectLanguageLists; + + String sShareAutoCorrFile, sUserAutoCorrFile; + + SvxSwAutoFmtFlags aSwFlags; // StarWriter AutoFormat-Flags + + // alle Sprachen in einer Tabelle + SvxAutoCorrLanguageTable_Impl* pLangTable; + SvxAutoCorrLastFileAskTable_Impl* pLastFileTable; + CharClass* pCharClass; + + LanguageType eCharClassLang; + + long nFlags; + sal_Unicode cStartDQuote, cEndDQuote, cStartSQuote, cEndSQuote, + cEmDash, cEnDash; + + + // private methods + SvxAutoCorrectLanguageLists& _GetLanguageList( LanguageType eLang ); + + void _GetCharClass( LanguageType eLang ); + +protected: + // - Text mit Attributierung (kann nur der SWG - SWG-Format!) + // rShort ist der Stream-Name - gecryptet! + virtual BOOL PutText( const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >& rStg, const String& rFileName, const String& rShort, SfxObjectShell& , + String& ); + + // geforderte Sprache in die Tabelle eintragen gfs. nur wenn das file existiert + BOOL CreateLanguageFile(LanguageType eLang, BOOL bNewFile = TRUE); + // - return den Ersetzungstext (nur fuer SWG-Format, alle anderen + // koennen aus der Wortliste herausgeholt werden!) + // rShort ist der Stream-Name - gecryptet! +public: + //The method below is changed from private to public by BerryJia for Bug95846 Time:2002-8-13 15:50 + sal_Unicode GetQuote( sal_Unicode cInsChar, BOOL bSttQuote, + LanguageType eLang ) const; + virtual BOOL GetLongText( const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >& rStg, const String& rFileName, const String& rShort, String& rLong ); + + TYPEINFO(); + + SvxAutoCorrect( const String& rShareAutocorrFile, + const String& rUserAutocorrFile ); + SvxAutoCorrect( const SvxAutoCorrect& ); + virtual ~SvxAutoCorrect(); + + // fuehre eine AutoKorrektur aus. + // returnt was ausgefuehrt wurde; entsprechend den obigen Flags + ULONG AutoCorrect( SvxAutoCorrDoc& rDoc, const String& rTxt, + xub_StrLen nPos, sal_Unicode cInsChar, BOOL bInsert ); + + // return fuer die Autotext Expandierung das vorherige Wort, was dem + // AutoCorrect - Algorythmus entspricht. + BOOL GetPrevAutoCorrWord( SvxAutoCorrDoc& rDoc, const String& rTxt, + xub_StrLen nPos, String& rWord ) const; + + // suche das oder die Worte in der ErsetzungsTabelle. + // rText - ueberpruefe in diesem Text die Worte der Liste + // rStt - die gefundene Startposition + // nEnd - zu ueberpruefende Position - ab dieser Pos nach vorne + // rLang - Input: in welcher Sprache wird gesucht + // Output: in welcher "Sprach-Liste" wurde es gefunden + const SvxAutocorrWord* SearchWordsInList( const String& rTxt, + xub_StrLen& rStt, xub_StrLen nEndPos, + SvxAutoCorrDoc& rDoc, + LanguageType& rLang ); + + // erfrage / setze die Zeichen fuer die Quote-Ersetzung + sal_Unicode GetStartSingleQuote() const { return cStartSQuote; } + sal_Unicode GetEndSingleQuote() const { return cEndSQuote; } + sal_Unicode GetStartDoubleQuote() const { return cStartDQuote; } + sal_Unicode GetEndDoubleQuote() const { return cEndDQuote; } + + void SetStartSingleQuote( const sal_Unicode cStart ) { cStartSQuote = cStart; } + void SetEndSingleQuote( const sal_Unicode cEnd ) { cEndSQuote = cEnd; } + void SetStartDoubleQuote( const sal_Unicode cStart ) { cStartDQuote = cStart; } + void SetEndDoubleQuote( const sal_Unicode cEnd ) { cEndDQuote = cEnd; } + + String GetQuote( SvxAutoCorrDoc& rDoc, xub_StrLen nInsPos, + sal_Unicode cInsChar, BOOL bSttQuote ); + void InsertQuote( SvxAutoCorrDoc& rDoc, xub_StrLen nInsPos, + sal_Unicode cInsChar, BOOL bSttQuote, BOOL bIns ); + + // erfrage / setze den Namen der AutoKorrektur-Datei + // defaultet auf "autocorr.dat" + String GetAutoCorrFileName( LanguageType eLang = LANGUAGE_SYSTEM, + BOOL bNewFile = FALSE, + BOOL bTstUserExist = FALSE ) const; + void SetUserAutoCorrFileName( const String& rNew ); + void SetShareAutoCorrFileName( const String& rNew ); + + // erfrage / setze die aktuellen Einstellungen der AutoKorrektur + long GetFlags() const { return nFlags; } + inline SvxSwAutoFmtFlags& GetSwFlags() { return aSwFlags;} + BOOL IsAutoCorrFlag( long nFlag ) const + { return nFlags & nFlag ? TRUE : FALSE; } + void SetAutoCorrFlag( long nFlag, BOOL bOn = TRUE ); + + // Lade, Setze, Gebe - die Ersetzungsliste + SvxAutocorrWordList* LoadAutocorrWordList( + LanguageType eLang = LANGUAGE_SYSTEM ) + { return _GetLanguageList( eLang ).LoadAutocorrWordList(); } + const SvxAutocorrWordList* GetAutocorrWordList( + LanguageType eLang = LANGUAGE_SYSTEM ) + { return _GetLanguageList( eLang ).GetAutocorrWordList(); } + + // Speichern von Wortersetzungen: + // Diese speichern direkt im Storage. Die Wortliste wird + // entsprechend aktualisiert! + // - purer Text + BOOL PutText( const String& rShort, const String& rLong, LanguageType eLang = LANGUAGE_SYSTEM ); + // - Text mit Attributierung (kann nur der SWG - SWG-Format!) + BOOL PutText( const String& rShort, SfxObjectShell& rShell, + LanguageType eLang = LANGUAGE_SYSTEM ) + { return _GetLanguageList( eLang ).PutText(rShort, rShell ); } + + // - loesche einen Eintrag + BOOL DeleteText( const String& rShort, LanguageType eLang = LANGUAGE_SYSTEM); + + // Lade, Setze, Gebe - die Ausnahmeliste fuer Grossbuchstabe am + // Satzanfang + void SaveCplSttExceptList( LanguageType eLang = LANGUAGE_SYSTEM ); + SvStringsISortDtor* LoadCplSttExceptList( + LanguageType eLang = LANGUAGE_SYSTEM) + { return _GetLanguageList( eLang ).LoadCplSttExceptList(); } + const SvStringsISortDtor* GetCplSttExceptList( + LanguageType eLang = LANGUAGE_SYSTEM ) + { return _GetLanguageList( eLang ).GetCplSttExceptList(); } + + // fuegt ein einzelnes Wort hinzu. Die Liste wird sofort + // in die Datei geschrieben! + BOOL AddCplSttException( const String& rNew, + LanguageType eLang = LANGUAGE_SYSTEM ); + + // Lade, Setze, Gebe die Ausnahmeliste fuer 2 Grossbuchstaben am + // Wortanfang + void SaveWrdSttExceptList( LanguageType eLang = LANGUAGE_SYSTEM ); + SvStringsISortDtor* LoadWrdSttExceptList( + LanguageType eLang = LANGUAGE_SYSTEM ) + { return _GetLanguageList( eLang ).LoadWrdSttExceptList(); } + const SvStringsISortDtor* GetWrdSttExceptList( + LanguageType eLang = LANGUAGE_SYSTEM ) + { return _GetLanguageList( eLang ).GetWrdSttExceptList(); } + // fuegt ein einzelnes Wort hinzu. Die Liste wird sofort + // in die Datei geschrieben! + BOOL AddWrtSttException( const String& rNew, LanguageType eLang = LANGUAGE_SYSTEM); + + //ueber die Sprachen nach dem Eintrag suchen + BOOL FindInWrdSttExceptList( LanguageType eLang, const String& sWord ); + BOOL FindInCplSttExceptList( LanguageType eLang, const String& sWord, + BOOL bAbbreviation = FALSE); + + // die einzelnen Methoden fuer die Autokorrektur + BOOL FnCptlSttWrd( SvxAutoCorrDoc&, const String&, + xub_StrLen nSttPos, xub_StrLen nEndPos, + LanguageType eLang = LANGUAGE_SYSTEM ); + BOOL FnChgOrdinalNumber( SvxAutoCorrDoc&, const String&, + xub_StrLen nSttPos, xub_StrLen nEndPos, + LanguageType eLang = LANGUAGE_SYSTEM ); + BOOL FnChgToEnEmDash( SvxAutoCorrDoc&, const String&, + xub_StrLen nSttPos, xub_StrLen nEndPos, + LanguageType eLang = LANGUAGE_SYSTEM ); + BOOL FnAddNonBrkSpace( SvxAutoCorrDoc&, const String&, + xub_StrLen nSttPos, xub_StrLen nEndPos, + LanguageType eLang = LANGUAGE_SYSTEM ); + BOOL FnSetINetAttr( SvxAutoCorrDoc&, const String&, + xub_StrLen nSttPos, xub_StrLen nEndPos, + LanguageType eLang = LANGUAGE_SYSTEM ); + BOOL FnChgWeightUnderl( SvxAutoCorrDoc&, const String&, + xub_StrLen nSttPos, xub_StrLen nEndPos, + LanguageType eLang = LANGUAGE_SYSTEM ); + BOOL FnCptlSttSntnc( SvxAutoCorrDoc&, const String&, BOOL bNormalPos, + xub_StrLen nSttPos, xub_StrLen nEndPos, + LanguageType eLang = LANGUAGE_SYSTEM); + + static long GetDefaultFlags(); + +// returns TRUE for charcters where the function +// 'SvxAutoCorrect::AutoCorrect' should be called. +// (used to avoid occasional 'collisions' with (Thai) input-sequence-checking) + static sal_Bool IsAutoCorrectChar( sal_Unicode cChar ); + + sal_Bool NeedsHardspaceAutocorr( sal_Unicode cChar ); + + CharClass& GetCharClass( LanguageType eLang ) + { + if( !pCharClass || eLang != eCharClassLang ) + _GetCharClass( eLang ); + return *pCharClass; + } +}; + +#endif + |