00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
#ifndef _KATE_HIGHLIGHT_H_
00022
#define _KATE_HIGHLIGHT_H_
00023
00024
#include "katetextline.h"
00025
#include "kateattribute.h"
00026
00027
#include "../interfaces/document.h"
00028
00029
#include <kconfig.h>
00030
00031
#include <qptrlist.h>
00032
#include <qvaluelist.h>
00033
#include <qregexp.h>
00034
#include <qdict.h>
00035
#include <qintdict.h>
00036
#include <qmap.h>
00037
#include <qobject.h>
00038
#include <qstringlist.h>
00039
#include <qguardedptr.h>
00040
00041
class HlContext;
00042
class HlItem;
00043
class ItemData;
00044
class HlData;
00045
class EmbeddedHlInfo;
00046
class IncludeRule;
00047
class SyntaxDocument;
00048
class TextLine;
00049
struct syntaxModeListItem;
00050
struct syntaxContextData;
00051
00052
class QPopupMenu;
00053
00054
00055
typedef QPtrList<KateAttribute> KateAttributeList;
00056
typedef QValueList<IncludeRule*> IncludeRules;
00057
typedef QPtrList<ItemData> ItemDataList;
00058
typedef QPtrList<HlData> HlDataList;
00059
typedef QMap<QString,EmbeddedHlInfo> EmbeddedHlInfos;
00060
typedef QMap<int*,QString> UnresolvedContextReferences;
00061
00062
00063
class ItemData :
public KateAttribute
00064 {
00065
public:
00066 ItemData(
const QString name,
int defStyleNum);
00067
00068
public:
00069
const QString name;
00070
int defStyleNum;
00071 };
00072
00073
class HlData
00074 {
00075
public:
00076 HlData(
const QString &wildcards,
const QString &mimetypes,
const QString &identifier,
int priority);
00077
00078
public:
00079
QString wildcards;
00080
QString mimetypes;
00081
QString identifier;
00082
int priority;
00083 };
00084
00085
class Highlight
00086 {
00087
public:
00088 Highlight(
const syntaxModeListItem *def);
00089 ~Highlight();
00090
00091
public:
00092
void doHighlight(
QMemArray<short> oCtx,
TextLine *,
bool lineContinue,
QMemArray<signed char> *foldingList);
00093
00094
void loadWildcards();
00095
QValueList<QRegExp>& getRegexpExtensions();
00096
QStringList& getPlainExtensions();
00097
00098
QString getMimetypes();
00099
00100
00101 HlData *getData();
00102
void setData(HlData *);
00103
00104
void setItemDataList(uint schema, ItemDataList &);
00105
00106
00107
00108
00109
void getItemDataListCopy (uint schema, ItemDataList &);
00110
00111
inline QString name()
const {
return iName;}
00112
inline QString section()
const {
return iSection;}
00113
inline QString version()
const {
return iVersion;}
00114
int priority();
00115
inline QString getIdentifier()
const {
return identifier;}
00116
void use();
00117
void release();
00118
bool isInWord(
QChar c);
00119
00120
inline QString getCommentStart()
const {
return cmlStart;};
00121
inline QString getCommentEnd() const {
return cmlEnd;};
00122
inline QString getCommentSingleLineStart()
const {
return cslStart;};
00123
00124
void clearAttributeArrays ();
00125
00126
QMemArray<KateAttribute> *attributes (uint schema);
00127
00128
private:
00129
00130
void getItemDataList(uint schema, ItemDataList &);
00131
00132
void init();
00133
void done();
00134
void makeContextList ();
00135
void handleIncludeRules ();
00136
void handleIncludeRulesRecursive(IncludeRules::iterator it, IncludeRules *list);
00137
int addToContextList(
const QString &ident,
int ctx0);
00138
void addToItemDataList();
00139
void createItemData (ItemDataList &list);
00140
void readGlobalKeywordConfig();
00141
void readCommentConfig();
00142
void readFoldingConfig ();
00143
00144
00145
void generateContextStack(
int *ctxNum,
int ctx,
QMemArray<short> *ctxs,
int *posPrevLine,
bool lineContinue=
false);
00146
00147 HlItem *createHlItem(
struct syntaxContextData *data, ItemDataList &iDl,
QStringList *RegionList,
QStringList *ContextList);
00148
int lookupAttrName(
const QString& name, ItemDataList &iDl);
00149
00150
void createContextNameList(
QStringList *ContextNameList,
int ctx0);
00151
int getIdFromString(
QStringList *ContextNameList,
QString tmpLineEndContext,
QString &unres);
00152
00153 ItemDataList internalIDList;
00154
00155
QIntDict<HlContext> contextList;
00156 HlContext *contextNum (uint n);
00157
00158
00159 EmbeddedHlInfos embeddedHls;
00160 UnresolvedContextReferences unresolvedContextReferences;
00161
QStringList RegionList;
00162
QStringList ContextNameList;
00163
00164
bool noHl;
00165
bool folding;
00166
bool casesensitive;
00167
QString weakDeliminator;
00168
QString deliminator;
00169
00170
QString cmlStart;
00171
QString cmlEnd;
00172
QString cslStart;
00173
QString iName;
00174
QString iSection;
00175
QString iWildcards;
00176
QString iMimetypes;
00177
QString identifier;
00178
QString iVersion;
00179
int m_priority;
00180
int refCount;
00181
00182
QString errorsAndWarnings;
00183
QString buildIdentifier;
00184
QString buildPrefix;
00185
bool building;
00186 uint itemData0;
00187 uint buildContext0Offset;
00188 IncludeRules includeRules;
00189
QValueList<int> contextsIncludingSomething;
00190
bool m_foldingIndentationSensitive;
00191
00192
QIntDict< QMemArray<KateAttribute> > m_attributeArrays;
00193
00194
QString extensionSource;
00195
QValueList<QRegExp> regexpExtensions;
00196
QStringList plainExtensions;
00197
00198
public:
00199
inline bool foldingIndentationSensitive () {
return m_foldingIndentationSensitive; }
00200
inline bool allowsFolding(){
return folding;}
00201 };
00202
00203
class HlManager :
public QObject
00204 {
00205 Q_OBJECT
00206
00207
private:
00208 HlManager();
00209
00210
public:
00211 ~HlManager();
00212
00213
static HlManager *
self();
00214
00215
inline KConfig *getKConfig() {
return &m_config; };
00216
00217 Highlight *getHl(
int n);
00218
int nameFind(
const QString &name);
00219
00220
int detectHighlighting (
class KateDocument *doc);
00221
00222
int findHl(Highlight *h) {
return hlList.find(h);}
00223
QString identifierForName(
const QString&);
00224
00225
00226
static uint defaultStyles();
00227
static QString defaultStyleName(
int n);
00228
00229
void getDefaults(uint schema, KateAttributeList &);
00230
void setDefaults(uint schema, KateAttributeList &);
00231
00232
int highlights();
00233
QString hlName(
int n);
00234
QString hlSection(
int n);
00235
00236 signals:
00237
void changed();
00238
00239
private:
00240
int wildcardFind(
const QString &fileName);
00241
int mimeFind(
const QByteArray &contents);
00242
int realWildcardFind(
const QString &fileName);
00243
00244
private:
00245
friend class Highlight;
00246
00247
QPtrList<Highlight> hlList;
00248
QDict<Highlight> hlDict;
00249
00250
static HlManager *s_self;
00251
00252
KConfig m_config;
00253
QStringList commonSuffixes;
00254
00255
SyntaxDocument *syntax;
00256 };
00257
00258
class KateViewHighlightAction:
public Kate::ActionMenu
00259 {
00260 Q_OBJECT
00261
00262
public:
00263 KateViewHighlightAction(
const QString& text,
QObject* parent = 0,
const char* name = 0)
00264 : Kate::ActionMenu(text, parent,
name) { init(); };
00265
00266 ~KateViewHighlightAction(){;};
00267
00268
void updateMenu (
Kate::Document *doc);
00269
00270
private:
00271
void init();
00272
00273
QGuardedPtr<Kate::Document> m_doc;
00274
QStringList subMenusName;
00275
QStringList names;
00276
QPtrList<QPopupMenu> subMenus;
00277
00278
public slots:
00279
void slotAboutToShow();
00280
00281
private slots:
00282
void setHl (
int mode);
00283 };
00284
00285
#endif //_HIGHLIGHT_H_
00286
00287