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.
381 lines
6.8 KiB
381 lines
6.8 KiB
// This module implements the QextScintillaLexerRuby 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 "qextscintillalexerruby.h"
|
|
|
|
|
|
// The ctor.
|
|
QextScintillaLexerRuby::QextScintillaLexerRuby(TQObject *parent,
|
|
const char *name)
|
|
: QextScintillaLexer(parent, name)
|
|
{
|
|
}
|
|
|
|
|
|
// The dtor.
|
|
QextScintillaLexerRuby::~QextScintillaLexerRuby()
|
|
{
|
|
}
|
|
|
|
|
|
// Returns the language name.
|
|
const char *QextScintillaLexerRuby::language() const
|
|
{
|
|
return "Ruby";
|
|
}
|
|
|
|
|
|
// Returns the lexer name.
|
|
const char *QextScintillaLexerRuby::lexer() const
|
|
{
|
|
return "ruby";
|
|
}
|
|
|
|
|
|
// Return the list of words that can start a block.
|
|
const char *QextScintillaLexerRuby::blockStart(int *style) const
|
|
{
|
|
if (style)
|
|
*style = Keyword;
|
|
|
|
return "do";
|
|
}
|
|
|
|
|
|
// Return the list of words that can start end a block.
|
|
const char *QextScintillaLexerRuby::blockEnd(int *style) const
|
|
{
|
|
if (style)
|
|
*style = Keyword;
|
|
|
|
return "end";
|
|
}
|
|
|
|
|
|
// Return the list of words that can start end a block.
|
|
const char *QextScintillaLexerRuby::blockStartKeyword(int *style) const
|
|
{
|
|
if (style)
|
|
*style = Keyword;
|
|
|
|
return "def class if do elsif else case while for";
|
|
}
|
|
|
|
|
|
// Return the style used for braces.
|
|
int QextScintillaLexerRuby::braceStyle() const
|
|
{
|
|
return Operator;
|
|
}
|
|
|
|
|
|
// Returns the foreground colour of the text for a style.
|
|
TQColor QextScintillaLexerRuby::color(int style) const
|
|
{
|
|
switch (style)
|
|
{
|
|
case Default:
|
|
return TQColor(0x80,0x80,0x80);
|
|
|
|
case Comment:
|
|
return TQColor(0x00,0x7f,0x00);
|
|
|
|
case POD:
|
|
return TQColor(0x00,0x40,0x00);
|
|
|
|
case Number:
|
|
case FunctionMethodName:
|
|
return TQColor(0x00,0x7f,0x7f);
|
|
|
|
case Keyword:
|
|
case DemotedKeyword:
|
|
return TQColor(0x00,0x00,0x7f);
|
|
|
|
case DoubleQuotedString:
|
|
case SingleQuotedString:
|
|
case HereDocument:
|
|
case PercentStringq:
|
|
case PercentStringQ:
|
|
return TQColor(0x7f,0x00,0x7f);
|
|
|
|
case ClassName:
|
|
return TQColor(0x00,0x00,0xff);
|
|
|
|
case Regex:
|
|
case HereDocumentDelimiter:
|
|
case PercentStringr:
|
|
case PercentStringw:
|
|
return TQColor(0x00,0x00,0x00);
|
|
|
|
case Global:
|
|
return TQColor(0x80,0x00,0x80);
|
|
|
|
case Symbol:
|
|
return TQColor(0xc0,0xa0,0x30);
|
|
|
|
case ModuleName:
|
|
return TQColor(0xa0,0x00,0xa0);
|
|
|
|
case InstanceVariable:
|
|
return TQColor(0xb0,0x00,0x80);
|
|
|
|
case ClassVariable:
|
|
return TQColor(0x80,0x00,0xb0);
|
|
|
|
case Backticks:
|
|
case PercentStringx:
|
|
return TQColor(0xff,0xff,0x00);
|
|
|
|
case DataSection:
|
|
return TQColor(0x60,0x00,0x00);
|
|
}
|
|
|
|
return QextScintillaLexer::color(style);
|
|
}
|
|
|
|
|
|
// Returns the end-of-line fill for a style.
|
|
bool QextScintillaLexerRuby::eolFill(int style) const
|
|
{
|
|
bool fill;
|
|
|
|
switch (style)
|
|
{
|
|
case POD:
|
|
case DataSection:
|
|
case HereDocument:
|
|
fill = true;
|
|
break;
|
|
|
|
default:
|
|
fill = false;
|
|
}
|
|
|
|
return fill;
|
|
}
|
|
|
|
|
|
// Returns the font of the text for a style.
|
|
TQFont QextScintillaLexerRuby::font(int style) const
|
|
{
|
|
TQFont f;
|
|
|
|
switch (style)
|
|
{
|
|
case Comment:
|
|
#if defined(Q_OS_WIN)
|
|
f = TQFont("Comic Sans MS",9);
|
|
#else
|
|
f = TQFont("Bitstream Vera Serif",9);
|
|
#endif
|
|
break;
|
|
|
|
case POD:
|
|
case DoubleQuotedString:
|
|
case SingleQuotedString:
|
|
case PercentStringq:
|
|
case PercentStringQ:
|
|
#if defined(Q_OS_WIN)
|
|
f = TQFont("Courier New",10);
|
|
#else
|
|
f = TQFont("Bitstream Vera Sans Mono",9);
|
|
#endif
|
|
break;
|
|
|
|
case Keyword:
|
|
case ClassName:
|
|
case FunctionMethodName:
|
|
case Operator:
|
|
case ModuleName:
|
|
case DemotedKeyword:
|
|
f = QextScintillaLexer::font(style);
|
|
f.setBold(TRUE);
|
|
break;
|
|
|
|
default:
|
|
f = QextScintillaLexer::font(style);
|
|
}
|
|
|
|
return f;
|
|
}
|
|
|
|
|
|
// Returns the set of keywords.
|
|
const char *QextScintillaLexerRuby::keywords(int set) const
|
|
{
|
|
if (set == 1)
|
|
return
|
|
"__FILE__ and def end in or self unless __LINE__ "
|
|
"begin defined? ensure module redo super until BEGIN "
|
|
"break do false next rescue then when END case else "
|
|
"for nil require retry true while alias class elsif "
|
|
"if not return undef yield";
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
// Returns the user name of a style.
|
|
TQString QextScintillaLexerRuby::description(int style) const
|
|
{
|
|
switch (style)
|
|
{
|
|
case Default:
|
|
return tr("Default");
|
|
|
|
case Error:
|
|
return tr("Error");
|
|
|
|
case Comment:
|
|
return tr("Comment");
|
|
|
|
case POD:
|
|
return tr("POD");
|
|
|
|
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 ClassName:
|
|
return tr("Class name");
|
|
|
|
case FunctionMethodName:
|
|
return tr("Function or method name");
|
|
|
|
case Operator:
|
|
return tr("Operator");
|
|
|
|
case Identifier:
|
|
return tr("Identifier");
|
|
|
|
case Regex:
|
|
return tr("Regular expression");
|
|
|
|
case Global:
|
|
return tr("Global");
|
|
|
|
case Symbol:
|
|
return tr("Symbol");
|
|
|
|
case ModuleName:
|
|
return tr("Module name");
|
|
|
|
case InstanceVariable:
|
|
return tr("Instance variable");
|
|
|
|
case ClassVariable:
|
|
return tr("Class variable");
|
|
|
|
case Backticks:
|
|
return tr("Backticks");
|
|
|
|
case DataSection:
|
|
return tr("Data section");
|
|
|
|
case HereDocumentDelimiter:
|
|
return tr("Here document delimiter");
|
|
|
|
case HereDocument:
|
|
return tr("Here document");
|
|
|
|
case PercentStringq:
|
|
return tr("%q string");
|
|
|
|
case PercentStringQ:
|
|
return tr("%Q string");
|
|
|
|
case PercentStringx:
|
|
return tr("%x string");
|
|
|
|
case PercentStringr:
|
|
return tr("%r string");
|
|
|
|
case PercentStringw:
|
|
return tr("%w string");
|
|
|
|
case DemotedKeyword:
|
|
return tr("Demoted keyword");
|
|
|
|
case Stdin:
|
|
return tr("stdin");
|
|
|
|
case Stdout:
|
|
return tr("stdout");
|
|
|
|
case Stderr:
|
|
return tr("stderr");
|
|
}
|
|
|
|
return TQString();
|
|
}
|
|
|
|
|
|
// Returns the background colour of the text for a style.
|
|
TQColor QextScintillaLexerRuby::paper(int style) const
|
|
{
|
|
switch (style)
|
|
{
|
|
case Error:
|
|
return TQColor(0xff,0x00,0x00);
|
|
|
|
case POD:
|
|
return TQColor(0xc0,0xff,0xc0);
|
|
|
|
case Regex:
|
|
case PercentStringr:
|
|
return TQColor(0xa0,0xff,0xa0);
|
|
|
|
case Backticks:
|
|
case PercentStringx:
|
|
return TQColor(0xa0,0x80,0x80);
|
|
|
|
case DataSection:
|
|
return TQColor(0xff,0xf0,0xd8);
|
|
|
|
case HereDocumentDelimiter:
|
|
case HereDocument:
|
|
return TQColor(0xdd,0xd0,0xdd);
|
|
|
|
case PercentStringw:
|
|
return TQColor(0xff,0xff,0xe0);
|
|
|
|
case Stdin:
|
|
case Stdout:
|
|
case Stderr:
|
|
return TQColor(0xff,0x80,0x80);
|
|
}
|
|
|
|
return QextScintillaLexer::paper(style);
|
|
}
|