highlighter.cpp
author insilmaril
Mon, 15 Mar 2010 11:49:42 +0000
changeset 835 31841b366d5e
parent 831 25a950c2eb98
child 845 b98c1793bb8b
permissions -rw-r--r--
Fixes for autoLayout (later)
insilmaril@435
     1
/****************************************************************************
insilmaril@435
     2
**
insilmaril@435
     3
** Copyright (C) 2005-2006 Trolltech ASA. All rights reserved.
insilmaril@435
     4
**
insilmaril@435
     5
** This file is part of the example classes of the Qt Toolkit.
insilmaril@435
     6
**
insilmaril@435
     7
** This file may be used under the terms of the GNU General Public
insilmaril@435
     8
** License version 2.0 as published by the Free Software Foundation
insilmaril@435
     9
** and appearing in the file LICENSE.GPL included in the packaging of
insilmaril@435
    10
** this file.  Please review the following information to ensure GNU
insilmaril@435
    11
** General Public Licensing requirements will be met:
insilmaril@435
    12
** http://www.trolltech.com/products/qt/opensource.html
insilmaril@435
    13
**
insilmaril@435
    14
** If you are unsure which license is appropriate for your use, please
insilmaril@435
    15
** review the following information:
insilmaril@435
    16
** http://www.trolltech.com/products/qt/licensing.html or contact the
insilmaril@435
    17
** sales department at sales@trolltech.com.
insilmaril@435
    18
**
insilmaril@435
    19
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
insilmaril@435
    20
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
insilmaril@435
    21
**
insilmaril@435
    22
****************************************************************************/
insilmaril@435
    23
insilmaril@435
    24
// highlighting rules have been adapted by Uwe Drechsel to match vym syntax
insilmaril@435
    25
insilmaril@435
    26
insilmaril@435
    27
#include <QtGui>
insilmaril@435
    28
insilmaril@435
    29
#include "highlighter.h"
insilmaril@435
    30
insilmaril@435
    31
Highlighter::Highlighter(QTextDocument *parent)
insilmaril@435
    32
    : QSyntaxHighlighter(parent)
insilmaril@435
    33
{
insilmaril@435
    34
    HighlightingRule rule;
insilmaril@435
    35
insilmaril@435
    36
    keywordFormat.setForeground(Qt::darkBlue);
insilmaril@435
    37
    keywordFormat.setFontWeight(QFont::Bold);
insilmaril@435
    38
    QStringList keywordPatterns;
insilmaril@447
    39
    keywordPatterns << "\\baddBranch\\b" 
insilmaril@447
    40
					<< "\\baddBranchBefore\\b" 
insilmaril@683
    41
                    << "\\baddMapCenter\\b" 
insilmaril@447
    42
                    << "\\baddMapInsert\\b" 
insilmaril@447
    43
					<< "\\baddMapReplace\\b"
insilmaril@447
    44
                    << "\\bcolorBranch\\b" 
insilmaril@447
    45
					<< "\\bcolorSubtree\\b"
insilmaril@502
    46
					<< "\\bcopy\\b"
insilmaril@447
    47
                    << "\\bcut\\b" 
insilmaril@447
    48
					<< "\\bdelete\\b" 
insilmaril@502
    49
					<< "\\bdeleteKeepChilds\\b" 
insilmaril@502
    50
					<< "\\bdeleteChilds\\b"
insilmaril@807
    51
					<< "\\bexportAO\\b"
insilmaril@517
    52
					<< "\\bexportASCII\\b"
insilmaril@517
    53
					<< "\\bexportImage\\b"
insilmaril@524
    54
					<< "\\bexportXHTML\\b"
insilmaril@524
    55
					<< "\\bexportXML\\b"
insilmaril@488
    56
					<< "\\bimportDir\\b"
insilmaril@447
    57
					<< "\\blinkTo\\b" 
insilmaril@447
    58
					<< "\\bloadImage\\b"
insilmaril@831
    59
					<< "\\bloadNote\\b"
insilmaril@447
    60
					<< "\\bmoveBranchUp\\b" 
insilmaril@447
    61
					<< "\\bmoveBranchDown\\b"
insilmaril@447
    62
					<< "\\bmove\\b" 
insilmaril@447
    63
					<< "\\bmoveRel\\b"
insilmaril@502
    64
					<< "\\bnop\\b"
insilmaril@435
    65
					<< "\\bpaste\\b" 
insilmaril@502
    66
					<< "\\bqa\\b" 
insilmaril@435
    67
					<< "\\bsaveImage\\b" 
insilmaril@831
    68
					<< "\\bsaveNote\\b" 
insilmaril@435
    69
					<< "\\bscroll\\b" 
insilmaril@447
    70
					<< "\\bselect\\b" 
insilmaril@447
    71
					<< "\\bselectLastBranch\\b" 
insilmaril@447
    72
					<< "\\bselectLastImage\\b"
insilmaril@536
    73
					<< "\\bselectLatestAdded\\b"
insilmaril@482
    74
					<< "\\bsetFrameType\\b" 
insilmaril@482
    75
					<< "\\bsetFramePenColor\\b" 
insilmaril@482
    76
					<< "\\bsetFrameBrushColor\\b" 
insilmaril@482
    77
					<< "\\bsetFramePadding\\b" 
insilmaril@482
    78
					<< "\\bsetFrameBorderWidth\\b" 
insilmaril@488
    79
					<< "\\bsetHideLinkUnselected\\b" 
insilmaril@435
    80
					<< "\\bsetMapAuthor\\b" 
insilmaril@435
    81
					<< "\\bsetMapComment\\b" 
insilmaril@435
    82
					<< "\\bsetMapBackgroundColor\\b" 
insilmaril@435
    83
					<< "\\bsetMapDefLinkColor\\b" 
insilmaril@435
    84
					<< "\\bsetMapDefLinkStyle\\b" 
insilmaril@804
    85
					<< "\\bsetNote\\b" 
insilmaril@435
    86
					<< "\\bsetHeading\\b" 
insilmaril@435
    87
					<< "\\bsetHideExport\\b" 
insilmaril@435
    88
					<< "\\bsetIncludeImagesHorizontally\\b" 
insilmaril@435
    89
					<< "\\bsetIncludeImagesVertically\\b" 
insilmaril@435
    90
					<< "\\bsetURL\\b" 
insilmaril@435
    91
					<< "\\bsetVymLink\\b" 
insilmaril@435
    92
					<< "\\bsetFlag\\b" 
insilmaril@628
    93
					<< "\\bsortChildren\\b" 
insilmaril@447
    94
					<< "\\btoggleFlag\\b" 
insilmaril@435
    95
					<< "\\bunscroll\\b" 
insilmaril@471
    96
					<< "\\bunscrollChilds\\b" 
insilmaril@435
    97
					<< "\\bunsetFlag\\b" 
insilmaril@435
    98
					;
insilmaril@435
    99
    foreach (QString pattern, keywordPatterns) {
insilmaril@435
   100
        rule.pattern = QRegExp(pattern);
insilmaril@435
   101
        rule.format = keywordFormat;
insilmaril@435
   102
        highlightingRules.append(rule);
insilmaril@435
   103
    }
insilmaril@435
   104
insilmaril@435
   105
	// QT keywords
insilmaril@435
   106
	/*
insilmaril@435
   107
    classFormat.setFontWeight(QFont::Bold);
insilmaril@435
   108
    classFormat.setForeground(Qt::darkMagenta);
insilmaril@435
   109
    rule.pattern = QRegExp("\\bQ[A-Za-z]+\\b");
insilmaril@435
   110
    rule.format = classFormat;
insilmaril@435
   111
    highlightingRules.append(rule);
insilmaril@435
   112
	*/
insilmaril@435
   113
insilmaril@435
   114
	// Single line comments
insilmaril@435
   115
    singleLineCommentFormat.setForeground(Qt::red);
insilmaril@435
   116
    rule.pattern = QRegExp("#[^\n]*");
insilmaril@435
   117
    rule.format = singleLineCommentFormat;
insilmaril@435
   118
    highlightingRules.append(rule);
insilmaril@435
   119
insilmaril@447
   120
	// multiline comments
insilmaril@435
   121
    multiLineCommentFormat.setForeground(Qt::red);
insilmaril@435
   122
    commentStartExpression = QRegExp("/\\*");
insilmaril@435
   123
    commentEndExpression = QRegExp("\\*/");
insilmaril@435
   124
insilmaril@435
   125
	// Quotations
insilmaril@435
   126
    quotationFormat.setForeground(Qt::darkGreen);
insilmaril@435
   127
    rule.pattern = QRegExp("\".*\"");
insilmaril@435
   128
    rule.format = quotationFormat;
insilmaril@435
   129
    highlightingRules.append(rule);
insilmaril@435
   130
insilmaril@435
   131
    QStringList valuePatterns;
insilmaril@435
   132
    valuePatterns << "\\btrue\\b" << "\\bfalse\\b";
insilmaril@435
   133
    foreach (QString pattern, valuePatterns) {
insilmaril@435
   134
        rule.pattern = QRegExp(pattern);
insilmaril@435
   135
        rule.format = quotationFormat;
insilmaril@435
   136
        highlightingRules.append(rule);
insilmaril@435
   137
    }
insilmaril@435
   138
insilmaril@435
   139
insilmaril@435
   140
insilmaril@435
   141
	// Funtions
insilmaril@435
   142
	/*
insilmaril@435
   143
    functionFormat.setFontItalic(true);
insilmaril@435
   144
    functionFormat.setForeground(Qt::blue);
insilmaril@435
   145
    rule.pattern = QRegExp("\\b[A-Za-z0-9_]+(?=\\()");
insilmaril@435
   146
    rule.format = functionFormat;
insilmaril@435
   147
    highlightingRules.append(rule);
insilmaril@435
   148
	*/
insilmaril@435
   149
insilmaril@435
   150
}
insilmaril@435
   151
insilmaril@435
   152
void Highlighter::highlightBlock(const QString &text)
insilmaril@435
   153
{
insilmaril@435
   154
    foreach (HighlightingRule rule, highlightingRules) {
insilmaril@435
   155
        QRegExp expression(rule.pattern);
insilmaril@435
   156
        int index = text.indexOf(expression);
insilmaril@435
   157
        while (index >= 0) {
insilmaril@435
   158
            int length = expression.matchedLength();
insilmaril@435
   159
            setFormat(index, length, rule.format);
insilmaril@435
   160
            index = text.indexOf(expression, index + length);
insilmaril@435
   161
        }
insilmaril@435
   162
    }
insilmaril@435
   163
    setCurrentBlockState(0);
insilmaril@435
   164
insilmaril@435
   165
    int startIndex = 0;
insilmaril@435
   166
    if (previousBlockState() != 1)
insilmaril@435
   167
        startIndex = text.indexOf(commentStartExpression);
insilmaril@435
   168
insilmaril@435
   169
    while (startIndex >= 0) {
insilmaril@435
   170
        int endIndex = text.indexOf(commentEndExpression, startIndex);
insilmaril@435
   171
        int commentLength;
insilmaril@435
   172
        if (endIndex == -1) {
insilmaril@435
   173
            setCurrentBlockState(1);
insilmaril@435
   174
            commentLength = text.length() - startIndex;
insilmaril@435
   175
        } else {
insilmaril@435
   176
            commentLength = endIndex - startIndex
insilmaril@435
   177
                            + commentEndExpression.matchedLength();
insilmaril@435
   178
        }
insilmaril@435
   179
        setFormat(startIndex, commentLength, multiLineCommentFormat);
insilmaril@435
   180
        startIndex = text.indexOf(commentStartExpression,
insilmaril@435
   181
                                                startIndex + commentLength);
insilmaril@435
   182
    }
insilmaril@435
   183
}