diff options
Diffstat (limited to 'qt/qextscintillalexercss.cpp')
-rw-r--r-- | qt/qextscintillalexercss.cpp | 376 |
1 files changed, 376 insertions, 0 deletions
diff --git a/qt/qextscintillalexercss.cpp b/qt/qextscintillalexercss.cpp new file mode 100644 index 0000000..f2e57d9 --- /dev/null +++ b/qt/qextscintillalexercss.cpp @@ -0,0 +1,376 @@ +// This module implements the QextScintillaLexerCSS 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 "qextscintillalexercss.h" + + +// The ctor. +QextScintillaLexerCSS::QextScintillaLexerCSS(QObject *parent,const char *name) + : QextScintillaLexer(parent,name), fold_comments(FALSE), + fold_compact(TRUE) +{ +} + + +// The dtor. +QextScintillaLexerCSS::~QextScintillaLexerCSS() +{ +} + + +// Returns the language name. +const char *QextScintillaLexerCSS::language() const +{ + return "CSS"; +} + + +// Returns the lexer name. +const char *QextScintillaLexerCSS::lexer() const +{ + return "css"; +} + + +// Return the list of characters that can start a block. +const char *QextScintillaLexerCSS::blockStart(int *style) const +{ + if (style) + *style = Operator; + + return "{"; +} + + +// Return the list of characters that can end a block. +const char *QextScintillaLexerCSS::blockEnd(int *style) const +{ + if (style) + *style = Operator; + + return "}"; +} + + +// Return the string of characters that comprise a word. +const char *QextScintillaLexerCSS::wordCharacters() const +{ + return "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-"; +} + + +// Returns the foreground colour of the text for a style. +QColor QextScintillaLexerCSS::color(int style) const +{ + switch (style) + { + case Default: + return QColor(0xff,0x00,0x80); + + case Tag: + return QColor(0x00,0x00,0x7f); + + case PseudoClass: + case Attribute: + return QColor(0x80,0x00,0x00); + + case UnknownPseudoClass: + case UnknownProperty: + return QColor(0xff,0x00,0x00); + + case Operator: + return QColor(0x00,0x00,0x00); + + case CSS1Property: + return QColor(0x00,0x40,0xe0); + + case Value: + case DoubleQuotedString: + case SingleQuotedString: + return QColor(0x7f,0x00,0x7f); + + case Comment: + return QColor(0x00,0x7f,0x00); + + case IDSelector: + return QColor(0x00,0x7f,0x7f); + + case Important: + return QColor(0xff,0x80,0x00); + + case AtRule: + return QColor(0x7f,0x7f,0x00); + + case CSS2Property: + return QColor(0x00,0xa0,0xe0); + } + + return QextScintillaLexer::color(style); +} + + +// Returns the font of the text for a style. +QFont QextScintillaLexerCSS::font(int style) const +{ + QFont f; + + if (style == Comment) +#if defined(Q_OS_WIN) + f = QFont("Comic Sans MS",9); +#else + f = QFont("Bitstream Vera Serif",9); +#endif + else + { + f = QextScintillaLexer::font(style); + + switch (style) + { + case Tag: + case Important: + case AtRule: + f.setBold(TRUE); + break; + + case IDSelector: + f.setItalic(TRUE); + break; + } + } + + return f; +} + + +// Returns the set of keywords. +const char *QextScintillaLexerCSS::keywords(int set) const +{ + if (set == 1) + return + "color background-color background-image " + "background-repeat background-attachment " + "background-position background font-family " + "font-style font-variant font-weight font-size font " + "word-spacing letter-spacing text-decoration " + "vertical-align text-transform text-align " + "text-indent line-height margin-top margin-right " + "margin-bottom margin-left margin padding-top " + "padding-right padding-bottom padding-left padding " + "border-top-width border-right-width " + "border-bottom-width border-left-width border-width " + "border-top border-right border-bottom border-left " + "border border-color border-style width height float " + "clear display white-space list-style-type " + "list-style-image list-style-position list-style"; + + if (set == 2) + return + "first-letter first-line link active visited " + "first-child focus hover lang before after left " + "right first"; + + if (set == 3) + return + "border-top-color border-right-color " + "border-bottom-color border-left-color border-color " + "border-top-style border-right-style " + "border-bottom-style border-left-style border-style " + "top right bottom left position z-index direction " + "unicode-bidi min-width max-width min-height " + "max-height overflow clip visibility content quotes " + "counter-reset counter-increment marker-offset size " + "marks page-break-before page-break-after " + "page-break-inside page orphans widows font-stretch " + "font-size-adjust unicode-range units-per-em src " + "panose-1 stemv stemh slope cap-height x-height " + "ascent descent widths bbox definition-src baseline " + "centerline mathline topline text-shadow " + "caption-side table-layout border-collapse " + "border-spacing empty-cells speak-header cursor " + "outline outline-width outline-style outline-color " + "volume speak pause-before pause-after pause " + "cue-before cue-after cue play-during azimuth " + "elevation speech-rate voice-family pitch " + "pitch-range stress richness speak-punctuation " + "speak-numeral"; + + return 0; +} + + +// Returns the user name of a style. +QString QextScintillaLexerCSS::description(int style) const +{ + switch (style) + { + case Default: + return tr("Default"); + + case Tag: + return tr("Tag"); + + case ClassSelector: + return tr("Class selector"); + + case PseudoClass: + return tr("Pseudo-class"); + + case UnknownPseudoClass: + return tr("Unknown pseudo-class"); + + case Operator: + return tr("Operator"); + + case CSS1Property: + return tr("CSS1 property"); + + case UnknownProperty: + return tr("Unknown property"); + + case Value: + return tr("Value"); + + case IDSelector: + return tr("ID selector"); + + case Important: + return tr("Important"); + + case AtRule: + return tr("@-rule"); + + case DoubleQuotedString: + return tr("Double-quoted string"); + + case SingleQuotedString: + return tr("Single-quoted string"); + + case CSS2Property: + return tr("CSS2 property"); + + case Attribute: + return tr("Attribute"); + } + + return QString::null; +} + + +// Refresh all properties. +void QextScintillaLexerCSS::refreshProperties() +{ + setCommentProp(); + setCompactProp(); +} + + +// Read properties from the settings. +bool QextScintillaLexerCSS::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 QextScintillaLexerCSS::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 QextScintillaLexerCSS::foldComments() const +{ + return fold_comments; +} + + +// Set if comments can be folded. +void QextScintillaLexerCSS::setFoldComments(bool fold) +{ + fold_comments = fold; + + setCommentProp(); +} + + +// Set the "fold.comment" property. +void QextScintillaLexerCSS::setCommentProp() +{ + emit propertyChanged("fold.comment",(fold_comments ? "1" : "0")); +} + + +// Return TRUE if folds are compact. +bool QextScintillaLexerCSS::foldCompact() const +{ + return fold_compact; +} + + +// Set if folds are compact +void QextScintillaLexerCSS::setFoldCompact(bool fold) +{ + fold_compact = fold; + + setCompactProp(); +} + + +// Set the "fold.compact" property. +void QextScintillaLexerCSS::setCompactProp() +{ + emit propertyChanged("fold.compact",(fold_compact ? "1" : "0")); +} |