mirror of
https://github.com/sqlitebrowser/sqlitebrowser.git
synced 2026-01-25 05:19:50 -06:00
This is a first rough implementation of QScintilla support as SQL text editor. It should work mostly and build fine with qmake as well as cmake. The new code supports all the features of the old one plus adding a few subtle improvements. The main point of this, however, is reducing the code we have to maintain and making it easier to add new features to the editor.
83 lines
2.2 KiB
C++
83 lines
2.2 KiB
C++
// Scintilla source code edit control
|
|
/** @file LexerModule.h
|
|
** Colourise for particular languages.
|
|
**/
|
|
// Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
|
|
// The License.txt file describes the conditions under which this software may be distributed.
|
|
|
|
#ifndef LEXERMODULE_H
|
|
#define LEXERMODULE_H
|
|
|
|
#ifdef SCI_NAMESPACE
|
|
namespace Scintilla {
|
|
#endif
|
|
|
|
class Accessor;
|
|
class WordList;
|
|
|
|
typedef void (*LexerFunction)(unsigned int startPos, int lengthDoc, int initStyle,
|
|
WordList *keywordlists[], Accessor &styler);
|
|
typedef ILexer *(*LexerFactoryFunction)();
|
|
|
|
/**
|
|
* A LexerModule is responsible for lexing and folding a particular language.
|
|
* The class maintains a list of LexerModules which can be searched to find a
|
|
* module appropriate to a particular language.
|
|
*/
|
|
class LexerModule {
|
|
protected:
|
|
int language;
|
|
LexerFunction fnLexer;
|
|
LexerFunction fnFolder;
|
|
LexerFactoryFunction fnFactory;
|
|
const char * const * wordListDescriptions;
|
|
|
|
public:
|
|
const char *languageName;
|
|
LexerModule(int language_,
|
|
LexerFunction fnLexer_,
|
|
const char *languageName_=0,
|
|
LexerFunction fnFolder_=0,
|
|
const char * const wordListDescriptions_[] = NULL);
|
|
LexerModule(int language_,
|
|
LexerFactoryFunction fnFactory_,
|
|
const char *languageName_,
|
|
const char * const wordListDescriptions_[] = NULL);
|
|
virtual ~LexerModule() {
|
|
}
|
|
int GetLanguage() const { return language; }
|
|
|
|
// -1 is returned if no WordList information is available
|
|
int GetNumWordLists() const;
|
|
const char *GetWordListDescription(int index) const;
|
|
|
|
ILexer *Create() const;
|
|
|
|
virtual void Lex(unsigned int startPos, int length, int initStyle,
|
|
WordList *keywordlists[], Accessor &styler) const;
|
|
virtual void Fold(unsigned int startPos, int length, int initStyle,
|
|
WordList *keywordlists[], Accessor &styler) const;
|
|
|
|
friend class Catalogue;
|
|
};
|
|
|
|
inline int Maximum(int a, int b) {
|
|
return (a > b) ? a : b;
|
|
}
|
|
|
|
// Shut up annoying Visual C++ warnings:
|
|
#ifdef _MSC_VER
|
|
#pragma warning(disable: 4244 4309 4456 4457)
|
|
#endif
|
|
|
|
// Turn off shadow warnings for lexers as may be maintained by others
|
|
#if defined(__GNUC__)
|
|
#pragma GCC diagnostic ignored "-Wshadow"
|
|
#endif
|
|
|
|
#ifdef SCI_NAMESPACE
|
|
}
|
|
#endif
|
|
|
|
#endif
|