diff options
Diffstat (limited to 'qt/qextscintillalexerbash.cpp')
-rw-r--r-- | qt/qextscintillalexerbash.cpp | 369 |
1 files changed, 369 insertions, 0 deletions
diff --git a/qt/qextscintillalexerbash.cpp b/qt/qextscintillalexerbash.cpp new file mode 100644 index 0000000..b5d172b --- /dev/null +++ b/qt/qextscintillalexerbash.cpp @@ -0,0 +1,369 @@ +// This module implements the QextScintillaLexerBash class. +// +// Copyright (c) 2006 +// Riverbank Computing Limited <info@riverbankcomputing.co.uk> +// +// This file is part of QScintilla. +// +// This copy of QScintilla 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. +// +// QScintilla 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 +// QScintilla; see the file LICENSE. If not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +#include <qcolor.h> +#include <qfont.h> +#include <qsettings.h> + +#include "qextscintillalexerbash.h" + + +// The ctor. +QextScintillaLexerBash::QextScintillaLexerBash(QObject *parent, + const char *name) + : QextScintillaLexer(parent,name), fold_comments(FALSE), + fold_compact(TRUE) +{ +} + + +// The dtor. +QextScintillaLexerBash::~QextScintillaLexerBash() +{ +} + + +// Returns the language name. +const char *QextScintillaLexerBash::language() const +{ + return "Bash"; +} + + +// Returns the lexer name. +const char *QextScintillaLexerBash::lexer() const +{ + return "bash"; +} + + +// Return the style used for braces. +int QextScintillaLexerBash::braceStyle() const +{ + return Operator; +} + + +// Return the string of characters that comprise a word. +const char *QextScintillaLexerBash::wordCharacters() const +{ + return "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$@%&"; +} + + +// Returns the foreground colour of the text for a style. +QColor QextScintillaLexerBash::color(int style) const +{ + switch (style) + { + case Default: + return QColor(0x80,0x80,0x80); + + case Error: + case Backticks: + return QColor(0xff,0xff,0x00); + + case Comment: + return QColor(0x00,0x7f,0x00); + + case Number: + return QColor(0x00,0x7f,0x7f); + + case Keyword: + return QColor(0x00,0x00,0x7f); + + case DoubleQuotedString: + case SingleQuotedString: + case SingleQuotedHereDocument: + return QColor(0x7f,0x00,0x7f); + + case Operator: + case Identifier: + case Scalar: + case ParameterExpansion: + case HereDocumentDelimiter: + return QColor(0x00,0x00,0x00); + } + + return QextScintillaLexer::color(style); +} + + +// Returns the end-of-line fill for a style. +bool QextScintillaLexerBash::eolFill(int style) const +{ + switch (style) + { + case SingleQuotedHereDocument: + return TRUE; + } + + return FALSE; +} + + +// Returns the font of the text for a style. +QFont QextScintillaLexerBash::font(int style) const +{ + QFont f; + + switch (style) + { + case Comment: +#if defined(Q_OS_WIN) + f = QFont("Comic Sans MS",9); +#else + f = QFont("Bitstream Vera Serif",9); +#endif + break; + + case Keyword: + case Operator: + f = QextScintillaLexer::font(style); + f.setBold(TRUE); + break; + + case DoubleQuotedString: + case SingleQuotedString: +#if defined(Q_OS_WIN) + f = QFont("Courier New",10); +#else + f = QFont("Bitstream Vera Sans Mono",9); +#endif + break; + + default: + f = QextScintillaLexer::font(style); + } + + return f; +} + + +// Returns the set of keywords. +const char *QextScintillaLexerBash::keywords(int set) const +{ + if (set == 1) + return + "alias ar asa awk banner basename bash bc bdiff break " + "bunzip2 bzip2 cal calendar case cat cc cd chmod " + "cksum clear cmp col comm compress continue cp cpio " + "crypt csplit ctags cut date dc dd declare deroff dev " + "df diff diff3 dircmp dirname do done du echo ed " + "egrep elif else env esac eval ex exec exit expand " + "export expr false fc fgrep fi file find fmt fold for " + "function functions getconf getopt getopts grep gres " + "hash head help history iconv id if in integer jobs " + "join kill local lc let line ln logname look ls m4 " + "mail mailx make man mkdir more mt mv newgrp nl nm " + "nohup ntps od pack paste patch pathchk pax pcat perl " + "pg pr print printf ps pwd read readonly red return " + "rev rm rmdir sed select set sh shift size sleep sort " + "spell split start stop strings strip stty sum " + "suspend sync tail tar tee test then time times touch " + "tr trap true tsort tty type typeset ulimit umask " + "unalias uname uncompress unexpand uniq unpack unset " + "until uudecode uuencode vi vim vpax wait wc whence " + "which while who wpaste wstart xargs zcat " + + "chgrp chown chroot dir dircolors factor groups " + "hostid install link md5sum mkfifo mknod nice pinky " + "printenv ptx readlink seq sha1sum shred stat su tac " + "unlink users vdir whoami yes"; + + return 0; +} + + +// Returns the user name of a style. +QString QextScintillaLexerBash::description(int style) const +{ + switch (style) + { + case Default: + return tr("Default"); + + case Error: + return tr("Error"); + + case Comment: + return tr("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 Operator: + return tr("Operator"); + + case Identifier: + return tr("Identifier"); + + case Scalar: + return tr("Scalar"); + + case ParameterExpansion: + return tr("Parameter expansion"); + + case Backticks: + return tr("Backticks"); + + case HereDocumentDelimiter: + return tr("Here document delimiter"); + + case SingleQuotedHereDocument: + return tr("Single-quoted here document"); + } + + return QString::null; +} + + +// Returns the background colour of the text for a style. +QColor QextScintillaLexerBash::paper(int style) const +{ + switch (style) + { + case Error: + return QColor(0xff,0x00,0x00); + + case Scalar: + return QColor(0xff,0xe0,0xe0); + + case ParameterExpansion: + return QColor(0xff,0xff,0xe0); + + case Backticks: + return QColor(0xa0,0x80,0x80); + + case HereDocumentDelimiter: + case SingleQuotedHereDocument: + return QColor(0xdd,0xd0,0xdd); + } + + return QextScintillaLexer::paper(style); +} + + +// Refresh all properties. +void QextScintillaLexerBash::refreshProperties() +{ + setCommentProp(); + setCompactProp(); +} + + +// Read properties from the settings. +bool QextScintillaLexerBash::readProperties(QSettings &qs,const QString &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; + + return rc; +} + + +// Write properties to the settings. +bool QextScintillaLexerBash::writeProperties(QSettings &qs,const QString &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; + + return rc; +} + + +// Return TRUE if comments can be folded. +bool QextScintillaLexerBash::foldComments() const +{ + return fold_comments; +} + + +// Set if comments can be folded. +void QextScintillaLexerBash::setFoldComments(bool fold) +{ + fold_comments = fold; + + setCommentProp(); +} + + +// Set the "fold.comment" property. +void QextScintillaLexerBash::setCommentProp() +{ + emit propertyChanged("fold.comment",(fold_comments ? "1" : "0")); +} + + +// Return TRUE if folds are compact. +bool QextScintillaLexerBash::foldCompact() const +{ + return fold_compact; +} + + +// Set if folds are compact +void QextScintillaLexerBash::setFoldCompact(bool fold) +{ + fold_compact = fold; + + setCompactProp(); +} + + +// Set the "fold.compact" property. +void QextScintillaLexerBash::setCompactProp() +{ + emit propertyChanged("fold.compact",(fold_compact ? "1" : "0")); +} |