00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef koautoformat_h
00022 #define koautoformat_h
00023
00024 #include <qstring.h>
00025 #include <qmap.h>
00026 #include <qvaluelist.h>
00027 #include <qstringlist.h>
00028 #include <qptrvector.h>
00029 #include <qdom.h>
00030 #include <qdict.h>
00031 class KoDocument;
00032 class KoTextParag;
00033 class KoTextObject;
00034 class KoVariableCollection;
00035 class KoVariableFormatCollection;
00036 class KCompletion;
00037 class KoTextCursor;
00038 class KCommand;
00039 class KoSearchContext;
00040 class KoTextFormat;
00041
00042
00043
00044
00045 class KoAutoFormatEntry
00046 {
00047 public:
00048
00049
00050 KoAutoFormatEntry(const QString& replace = QString::null);
00051 ~KoAutoFormatEntry();
00052 QString replace() const { return m_replace; }
00053 void changeReplace(const QString & rep){ m_replace = rep; }
00054
00055 KoSearchContext *formatEntryContext()const;
00056 void createNewEntryContext();
00057 void setFormatEntryContext( KoSearchContext * );
00058 void clearFormatEntryContext( );
00059
00060 protected:
00061 QString m_replace;
00062
00063 KoSearchContext *m_formatOptions;
00064 };
00065
00066 typedef QMap< QString, KoAutoFormatEntry > KoAutoFormatEntryMap;
00067
00068
00069
00070
00071 class KoAutoFormat
00072 {
00073 public:
00078 KoAutoFormat( KoDocument *_doc, KoVariableCollection *_varCollection, KoVariableFormatCollection *_varFormatCollection );
00079
00081 KoAutoFormat( const KoAutoFormat& format );
00082
00083 ~KoAutoFormat();
00084
00085 KCommand *applyAutoFormat( KoTextObject * obj );
00090 void doAutoFormat( KoTextCursor* cursor, KoTextParag *parag, int index, QChar ch,KoTextObject *txtObj );
00091
00095 void doCompletion( KoTextCursor* textEditCursor, KoTextParag *parag, int index,KoTextObject *txtObj );
00096
00097
00098 bool doIgnoreDoubleSpace( KoTextParag *parag, int index,QChar ch );
00099
00103 static QString getLastWord( KoTextParag *parag, int index );
00104
00110 static QString getWordAfterSpace( KoTextParag * parag, int index);
00111
00112
00113 struct TypographicQuotes
00114 {
00115 QChar begin, end;
00116 bool replace;
00117 };
00118
00119
00120 void configTypographicDoubleQuotes( TypographicQuotes _tq );
00121 void configTypographicSimpleQuotes( TypographicQuotes _tq );
00122
00123 void configUpperCase( bool _uc );
00124 void configUpperUpper( bool _uu );
00125 void configAdvancedAutocorrect( bool _aa );
00126 void configAutoDetectUrl(bool _au);
00127 void configIgnoreDoubleSpace( bool _ids);
00128 void configRemoveSpaceBeginEndLine( bool _space);
00129 void configUseBulletStyle( bool _ubs);
00130
00131 void configBulletStyle( QChar b );
00132
00133 void configAutoChangeFormat( bool b);
00134
00135 void configAutoReplaceNumber( bool b );
00136
00137 void configAutoNumberStyle( bool b );
00138
00139 void configCompletion( bool b );
00140
00141 void configAppendSpace( bool b);
00142
00143 void configMinWordLength( uint val );
00144
00145 void configNbMaxCompletionWord( uint val );
00146
00147 void configAddCompletionWord( bool b );
00148
00149 void configIncludeTwoUpperUpperLetterException( bool b);
00150
00151 void configIncludeAbbreviation( bool b );
00152
00153 void configAutoSuperScript( bool b );
00154
00155 void configCorrectionWithFormat( bool b);
00156
00157 void configCapitalizeNameOfDays( bool b);
00158
00159 void configAutoFormatLanguage( const QString &_lang);
00160
00161 TypographicQuotes getConfigTypographicSimpleQuotes() const
00162 { return m_typographicSimpleQuotes; }
00163
00164 TypographicQuotes getConfigTypographicDoubleQuotes() const
00165 { return m_typographicDoubleQuotes; }
00166
00167 TypographicQuotes getDefaultTypographicDoubleQuotes() const
00168 { return m_typographicDefaultDoubleQuotes; }
00169
00170 TypographicQuotes getDefaultTypographicSimpleQuotes() const
00171 { return m_typographicDefaultSimpleQuotes; }
00172
00173 bool getConfigUpperCase() const
00174 { return m_convertUpperCase; }
00175 bool getConfigUpperUpper() const
00176 { return m_convertUpperUpper; }
00177 bool getConfigAdvancedAutoCorrect() const
00178 { return m_advancedAutoCorrect;}
00179 bool getConfigAutoDetectUrl() const
00180 { return m_autoDetectUrl;}
00181
00182 bool getConfigIgnoreDoubleSpace() const
00183 { return m_ignoreDoubleSpace;}
00184
00185 bool getConfigRemoveSpaceBeginEndLine() const
00186 { return m_removeSpaceBeginEndLine;}
00187
00188 bool getConfigUseBulletSyle() const
00189 { return m_useBulletStyle;}
00190
00191 QChar getConfigBulletStyle() const
00192 { return m_bulletStyle; }
00193
00194 bool getConfigAutoChangeFormat() const
00195 { return m_autoChangeFormat;}
00196
00197 bool getConfigAutoReplaceNumber() const
00198 { return m_autoReplaceNumber; }
00199
00200 bool getConfigAutoNumberStyle() const
00201 { return m_useAutoNumberStyle; }
00202
00203 bool getConfigCompletion() const
00204 { return m_completion; }
00205
00206 bool getConfigAppendSpace() const
00207 { return m_completionAppendSpace; }
00208
00209 uint getConfigMinWordLength() const
00210 { return m_minCompletionWordLength; }
00211
00212 uint getConfigNbMaxCompletionWord() const
00213 { return m_nbMaxCompletionWord; }
00214
00215 bool getConfigAddCompletionWord() const
00216 { return m_addCompletionWord; }
00217
00218 bool getConfigIncludeTwoUpperUpperLetterException() const
00219 { return m_includeTwoUpperLetterException; }
00220
00221 bool getConfigIncludeAbbreviation() const
00222 { return m_includeAbbreviation; }
00223
00224 bool getConfigAutoSuperScript( ) const
00225 { return m_bAutoSuperScript; }
00226
00227 bool getConfigCorrectionWithFormat() const
00228 { return m_bAutoCorrectionWithFormat; }
00229
00230 bool getConfigCapitalizeNameOfDays() const
00231 { return m_bCapitalizeNameOfDays; }
00232
00233 QString getConfigAutoFormatLanguage( )const
00234 { return m_autoFormatLanguage;}
00235
00236
00237 const QDict<KoAutoFormatEntry> & getAutoFormatEntries() const{
00238 return m_entries;
00239 }
00240
00241 KoAutoFormatEntry * findFormatEntry(const QString & text) {
00242 return m_entries[text];
00243 }
00244
00245
00246 void addAutoFormatEntry( const QString &key, KoAutoFormatEntry *entry ) {
00247 m_entries.insert( key, entry );
00248 buildMaxLen();
00249 }
00250
00251 void addAutoFormatEntry( const QString &key, const QString &replace );
00252
00253
00254 void removeAutoFormatEntry( const QString &key ) {
00255 m_entries.setAutoDelete(true);
00256 m_entries.remove( key );
00257 m_entries.setAutoDelete(false);
00258 buildMaxLen();
00259 }
00260
00261
00262 void copyAutoFormatEntries( const KoAutoFormat & other )
00263 { m_entries = other.m_entries; }
00264
00265 void copyListException( const QStringList & _list)
00266 { m_upperCaseExceptions=_list;}
00267
00268 void copyListTwoUpperCaseException( const QStringList &_list)
00269 { m_twoUpperLetterException=_list; }
00270
00271 QStringList listException() const {return m_upperCaseExceptions;}
00272
00273 QStringList listTwoUpperLetterException() const {return m_twoUpperLetterException;}
00274
00275 QStringList listCompletion() const;
00276
00277 KCompletion *getCompletion() const { return m_listCompletion; }
00278
00279 int nbSuperScriptEntry() const
00280 { return m_superScriptEntries.count(); }
00281
00282
00283 void readConfig(bool force = false);
00284 void saveConfig();
00285
00286 static bool isUpper( const QChar &c );
00287 static bool isLower( const QChar &c );
00288 static bool isMark( const QChar &c );
00289 static bool isSeparator( const QChar &c );
00290 protected:
00291
00292 KCommand *doAutoCorrect( KoTextCursor* textEditCursor, KoTextParag *parag, int & index, KoTextObject *txtObj );
00293 KCommand *doUpperCase( KoTextCursor* textEditCursor, KoTextParag *parag, int index, const QString & word , KoTextObject *txtObj );
00294 KCommand * doTypographicQuotes( KoTextCursor* textEditCursor, KoTextParag *parag, int index, KoTextObject *txtObj, bool doubleQuotes );
00295 void buildMaxLen();
00296
00297 void doAutoDetectUrl( KoTextCursor *textEditCursor, KoTextParag *parag, int & index, const QString & word, KoTextObject *txtObj );
00298 KCommand *doRemoveSpaceBeginEndLine( KoTextCursor *textEditCursor, KoTextParag *parag, KoTextObject *txtObj );
00299 KCommand *doAutoChangeFormat( KoTextCursor *textEditCursor, KoTextParag *parag, int index, const QString & word, KoTextObject *txtObj );
00300 KCommand *doUseBulletStyle(KoTextCursor *textEditCursor, KoTextParag *parag, KoTextObject *txtObj, int& index );
00301
00302 KCommand *doAutoReplaceNumber( KoTextCursor* textEditCursor, KoTextParag *parag, int & index, const QString & word , KoTextObject *txtObj );
00303
00304 KCommand *doUseNumberStyle(KoTextCursor * , KoTextParag *parag, KoTextObject *txtObj, int& index );
00305
00306 void doAutoIncludeUpperUpper(KoTextCursor *textEditCursor, KoTextParag *parag, KoTextObject *txtObj );
00307 void doAutoIncludeAbbreviation(KoTextCursor *textEditCursor, KoTextParag *parag, KoTextObject *txtObj );
00308
00309 KCommand *doAutoSuperScript( KoTextCursor* textEditCursor, KoTextParag *parag, int index, const QString & word , KoTextObject *txtObj );
00310 KCommand *scanParag( KoTextParag * parag, KoTextObject * obj );
00311
00312 KCommand *doCapitalizeNameOfDays( KoTextCursor* textEditCursor, KoTextParag *parag, int index, const QString & word , KoTextObject *txtObj );
00313
00314 static void changeTextFormat(KoSearchContext *formatOptions, KoTextFormat * format, int & flags );
00315 void loadEntry( const QDomElement &nl);
00316 QDomElement saveEntry( QDictIterator<KoAutoFormatEntry> _entry, QDomDocument doc);
00317 private:
00318 void detectStartOfLink(const QString &word);
00319 void autoFormatIsActive();
00320 void loadListOfWordCompletion();
00321
00322 KoDocument *m_doc;
00323 KoVariableCollection *m_varCollection;
00324 KoVariableFormatCollection *m_varFormatCollection;
00325
00326 QString m_autoFormatLanguage;
00327 bool m_configRead;
00328 bool m_convertUpperCase, m_convertUpperUpper,m_advancedAutoCorrect;
00329 bool m_autoDetectUrl, m_ignoreDoubleSpace, m_removeSpaceBeginEndLine;
00330 bool m_useBulletStyle, m_autoChangeFormat, m_autoReplaceNumber;
00331 bool m_useAutoNumberStyle;
00332 bool m_completion;
00333 bool m_completionAppendSpace;
00334 bool m_addCompletionWord;
00335 bool m_includeTwoUpperLetterException;
00336 bool m_includeAbbreviation;
00337 bool m_ignoreUpperCase;
00338 bool m_bAutoFormatActive;
00339
00340 bool m_bAutoSuperScript;
00341 bool m_bAutoCorrectionWithFormat;
00342 bool m_bCapitalizeNameOfDays;
00343 QChar m_bulletStyle;
00344
00345 TypographicQuotes m_typographicSimpleQuotes;
00346
00347 TypographicQuotes m_typographicDoubleQuotes;
00348
00349 TypographicQuotes m_typographicDefaultDoubleQuotes;
00350
00351 TypographicQuotes m_typographicDefaultSimpleQuotes;
00352
00353 KCompletion *m_listCompletion;
00354
00355 QDict<KoAutoFormatEntry> m_entries;
00356
00357 KoAutoFormatEntryMap m_superScriptEntries;
00358
00359 QStringList m_upperCaseExceptions;
00360 QStringList m_twoUpperLetterException;
00361
00362 uint m_maxFindLength;
00363 uint m_minCompletionWordLength;
00364 uint m_nbMaxCompletionWord;
00365 QStringList m_cacheNameOfDays;
00366 };
00367
00368 #endif