You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tqscintilla/qt/qextscintillalexersql.cpp

453 lines
10 KiB

// This module implements the QextScintillaLexerSQL class.
//
// Copyright (c) 2006
// Riverbank Computing Limited <info@riverbankcomputing.co.uk>
//
// This file is part of TQScintilla.
//
// This copy of TQScintilla is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2, or (at your option) any
// later version.
//
// TQScintilla is supplied 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 General Public License for more
// details.
//
// You should have received a copy of the GNU General Public License along with
// TQScintilla; see the file LICENSE. If not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include <tqcolor.h>
#include <tqfont.h>
#include <tqsettings.h>
#include "qextscintillalexersql.h"
// The ctor.
QextScintillaLexerSQL::QextScintillaLexerSQL(TQObject *parent,const char *name)
: QextScintillaLexer(parent,name), fold_comments(FALSE),
fold_compact(TRUE), backslash_escapes(FALSE)
{
}
// The dtor.
QextScintillaLexerSQL::~QextScintillaLexerSQL()
{
}
// Returns the language name.
const char *QextScintillaLexerSQL::language() const
{
return "SQL";
}
// Returns the lexer name.
const char *QextScintillaLexerSQL::lexer() const
{
return "sql";
}
// Return the style used for braces.
int QextScintillaLexerSQL::braceStyle() const
{
return Operator;
}
// Returns the foreground colour of the text for a style.
TQColor QextScintillaLexerSQL::color(int style) const
{
switch (style)
{
case Default:
return TQColor(0x80,0x80,0x80);
case Comment:
case CommentLine:
case PlusPrompt:
case PlusComment:
case CommentLineHash:
return TQColor(0x00,0x7f,0x00);
case CommentDoc:
return TQColor(0x7f,0x7f,0x7f);
case Number:
return TQColor(0x00,0x7f,0x7f);
case Keyword:
return TQColor(0x00,0x00,0x7f);
case DoubleQuotedString:
case SingleQuotedString:
return TQColor(0x7f,0x00,0x7f);
case PlusKeyword:
return TQColor(0x7f,0x7f,0x00);
case Operator:
case Identifier:
break;
case CommentDocKeyword:
return TQColor(0x30,0x60,0xa0);
case CommentDocKeywordError:
return TQColor(0x80,0x40,0x20);
case KeywordSet5:
return TQColor(0x4b,0x00,0x82);
case KeywordSet6:
return TQColor(0xb0,0x00,0x40);
case KeywordSet7:
return TQColor(0x8b,0x00,0x00);
case KeywordSet8:
return TQColor(0x80,0x00,0x80);
}
return QextScintillaLexer::color(style);
}
// Returns the end-of-line fill for a style.
bool QextScintillaLexerSQL::eolFill(int style) const
{
return (style == PlusPrompt);
}
// Returns the font of the text for a style.
TQFont QextScintillaLexerSQL::font(int style) const
{
TQFont f;
switch (style)
{
case Comment:
case CommentLine:
case PlusComment:
case CommentLineHash:
case CommentDocKeyword:
case CommentDocKeywordError:
#if defined(Q_OS_WIN)
f = TQFont("Comic Sans MS",9);
#else
f = TQFont("Bitstream Vera Serif",9);
#endif
break;
case Keyword:
case Operator:
f = QextScintillaLexer::font(style);
f.setBold(TRUE);
break;
case DoubleQuotedString:
case SingleQuotedString:
case PlusPrompt:
#if defined(Q_OS_WIN)
f = TQFont("Courier New",10);
#else
f = TQFont("Bitstream Vera Sans Mono",9);
#endif
break;
default:
f = QextScintillaLexer::font(style);
}
return f;
}
// Returns the set of keywords.
const char *QextScintillaLexerSQL::keywords(int set) const
{
if (set == 1)
return
"absolute action add admin after aggregate alias all "
"allocate alter and any are array as asc assertion "
"at authorization before begin binary bit blob "
"boolean both breadth by call cascade cascaded case "
"cast catalog char character check class clob close "
"collate collation column commit completion connect "
"connection constraint constraints constructor "
"continue corresponding create cross cube current "
"current_date current_path current_role current_time "
"current_timestamp current_user cursor cycle data "
"date day deallocate dec decimal declare default "
"deferrable deferred delete depth deref desc "
"describe descriptor destroy destructor "
"deterministic dictionary diagnostics disconnect "
"distinct domain double drop dynamic each else end "
"end-exec equals escape every except exception exec "
"execute external false fetch first float for "
"foreign found from free full function general get "
"global go goto grant group grouping having host "
"hour identity if ignore immediate in indicator "
"initialize initially inner inout input insert int "
"integer intersect interval into is isolation "
"iterate join key language large last lateral "
"leading left less level like limit local localtime "
"localtimestamp locator map match minute modifies "
"modify module month names national natural nchar "
"nclob new next no none not null numeric object of "
"off old on only open operation option or order "
"ordinality out outer output pad parameter "
"parameters partial path postfix precision prefix "
"preorder prepare preserve primary prior privileges "
"procedure public read reads real recursive ref "
"references referencing relative restrict result "
"return returns revoke right role rollback rollup "
"routine row rows savepoint schema scroll scope "
"search second section select sequence session "
"session_user set sets size smallint some| space "
"specific specifictype sql sqlexception sqlstate "
"sqlwarning start state statement static structure "
"system_user table temporary terminate than then "
"time timestamp timezone_hour timezone_minute to "
"trailing transaction translation treat trigger "
"true under union unique unknown unnest update usage "
"user using value values varchar variable varying "
"view when whenever where with without work write "
"year zone";
if (set == 4)
return
"acc~ept a~ppend archive log attribute bre~ak "
"bti~tle c~hange cl~ear col~umn comp~ute conn~ect "
"copy def~ine del desc~ribe disc~onnect e~dit "
"exec~ute exit get help ho~st i~nput l~ist passw~ord "
"pau~se pri~nt pro~mpt quit recover rem~ark "
"repf~ooter reph~eader r~un sav~e set sho~w shutdown "
"spo~ol sta~rt startup store timi~ng tti~tle "
"undef~ine var~iable whenever oserror whenever "
"sqlerror";
return 0;
}
// Returns the user name of a style.
TQString QextScintillaLexerSQL::description(int style) const
{
switch (style)
{
case Default:
return tr("Default");
case Comment:
return tr("Comment");
case CommentLine:
return tr("Comment line");
case CommentDoc:
return tr("JavaDoc style comment");
case Number:
return tr("Number");
case Keyword:
return tr("Keyword");
case DoubleQuotedString:
return tr("Double-quoted string");
case SingleQuotedString:
return tr("Single-quoted string");
case PlusKeyword:
return tr("SQL*Plus keyword");
case PlusPrompt:
return tr("SQL*Plus prompt");
case Operator:
return tr("Operator");
case Identifier:
return tr("Identifier");
case PlusComment:
return tr("SQL*Plus comment");
case CommentLineHash:
return tr("# comment line");
case CommentDocKeyword:
return tr("JavaDoc keyword");
case CommentDocKeywordError:
return tr("JavaDoc keyword error");
case KeywordSet5:
return tr("User defined 1");
case KeywordSet6:
return tr("User defined 2");
case KeywordSet7:
return tr("User defined 3");
case KeywordSet8:
return tr("User defined 4");
}
return TQString();
}
// Returns the background colour of the text for a style.
TQColor QextScintillaLexerSQL::paper(int style) const
{
if (style == PlusPrompt)
return TQColor(0xe0,0xff,0xe0);
return QextScintillaLexer::paper(style);
}
// Refresh all properties.
void QextScintillaLexerSQL::refreshProperties()
{
setCommentProp();
setCompactProp();
setBackslashEscapesProp();
}
// Read properties from the settings.
bool QextScintillaLexerSQL::readProperties(TQSettings &qs,const TQString &prefix)
{
int rc = TRUE;
bool ok, flag;
// Read the fold comments flag.
flag = qs.readBoolEntry(prefix + "foldcomments",FALSE,&ok);
if (ok)
fold_comments = flag;
else
rc = FALSE;
// Read the fold compact flag.
flag = qs.readBoolEntry(prefix + "foldcompact",TRUE,&ok);
if (ok)
fold_compact = flag;
else
rc = FALSE;
// Read the backslash escapes flag.
flag = qs.readBoolEntry(prefix + "backslashescapes",FALSE,&ok);
if (ok)
backslash_escapes = flag;
else
rc = FALSE;
return rc;
}
// Write properties to the settings.
bool QextScintillaLexerSQL::writeProperties(TQSettings &qs,const TQString &prefix) const
{
int rc = TRUE;
// Write the fold comments flag.
if (!qs.writeEntry(prefix + "foldcomments",fold_comments))
rc = FALSE;
// Write the fold compact flag.
if (!qs.writeEntry(prefix + "foldcompact",fold_compact))
rc = FALSE;
// Write the backslash escapes flag.
if (!qs.writeEntry(prefix + "backslashescapes",backslash_escapes))
rc = FALSE;
return rc;
}
// Return TRUE if comments can be folded.
bool QextScintillaLexerSQL::foldComments() const
{
return fold_comments;
}
// Set if comments can be folded.
void QextScintillaLexerSQL::setFoldComments(bool fold)
{
fold_comments = fold;
setCommentProp();
}
// Set the "fold.comment" property.
void QextScintillaLexerSQL::setCommentProp()
{
emit propertyChanged("fold.comment",(fold_comments ? "1" : "0"));
}
// Return TRUE if folds are compact.
bool QextScintillaLexerSQL::foldCompact() const
{
return fold_compact;
}
// Set if folds are compact
void QextScintillaLexerSQL::setFoldCompact(bool fold)
{
fold_compact = fold;
setCompactProp();
}
// Set the "fold.compact" property.
void QextScintillaLexerSQL::setCompactProp()
{
emit propertyChanged("fold.compact",(fold_compact ? "1" : "0"));
}
// Return TRUE if backslash escapes are enabled.
bool QextScintillaLexerSQL::backslashEscapes() const
{
return backslash_escapes;
}
// Enable/disable backslash escapes.
void QextScintillaLexerSQL::setBackslashEscapes(bool enable)
{
backslash_escapes = enable;
setBackslashEscapesProp();
}
// Set the "sql.backslash.escapes" property.
void QextScintillaLexerSQL::setBackslashEscapesProp()
{
emit propertyChanged("sql.backslash.escapes",(backslash_escapes ? "1" : "0"));
}