~ubuntu-branches/ubuntu/hardy/kalgebra/hardy

« back to all changes in this revision

Viewing changes to src/qalgebrahighlighter.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Steffen Joeris
  • Date: 2006-02-04 14:35:43 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20060204143543-2ssgiqqc16kpci93
Tags: 0.4.1.1-1
new upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "qalgebrahighlighter.h"
 
2
 
 
3
QAlgebraHighlighter::QAlgebraHighlighter(QTextEdit *textEdit) : QSyntaxHighlighter(textEdit), m_mode(Autodetect){}
 
4
 
 
5
 
 
6
int QAlgebraHighlighter::highlightParagraph(const QString &text, int endStateOfLastPara) {
 
7
        setFormat( 0, text.length(), Qt::black);
 
8
        if(!m_mode==Expression && !(m_mode==Autodetect && text[0]=='<'))
 
9
                return 0;
 
10
        QString op=text.stripWhiteSpace();
 
11
        unsigned int pos=0, len=0;
 
12
        wrong=true;
 
13
        TOKEN t;
 
14
        t=getToken(op, len);
 
15
        pos=0;
 
16
        while(pos < text.length()-1 || t.tipus!=tEof){
 
17
                if(t.tipus==tVal)       setFormat( pos, len, QColor(0,0,200));
 
18
                else if(t.tipus==tFunc) setFormat( pos, len, QColor(0,50,0));
 
19
                else if(t.tipus==tVar)  setFormat( pos, len, QColor(100,0,0));
 
20
                else            setFormat( pos, len, QFont(this->textEdit()->currentFont().family(),
 
21
                                        this->textEdit()->currentFont().pointSize(),
 
22
                                        QFont::DemiBold, false));
 
23
        
 
24
                pos += len;
 
25
                t=getToken(op, len);
 
26
        }
 
27
        return endStateOfLastPara;
 
28
}
 
29
 
 
30
TOKEN QAlgebraHighlighter::getToken(QString &a, unsigned int &l){
 
31
        int i=0;
 
32
        l=a.length();
 
33
        a = a.stripWhiteSpace();
 
34
//      printf("%s\n", a.ascii());
 
35
        TOKEN ret;
 
36
        ret.tipus = tMaxOp;
 
37
        if(a==""){
 
38
                ret.tipus = tEof;
 
39
                l=1;
 
40
        }
 
41
        else if(a[0].isDigit()) {//es un numero
 
42
                ret.val += a[0];
 
43
                a[0]=' ';
 
44
                for(i=1; a[i].isDigit() || a[i]=='.'; i++){
 
45
                        a[i]=' ';
 
46
                }
 
47
                if(a[i] == '(' || a[i].isLetter()) a = " *" +a;
 
48
                ret.tipus= tVal;
 
49
        } else if(a[0].isLetter()) {//es una variable o func
 
50
                ret.val += a[0];
 
51
                for(i=1; a[i].isLetter(); i++)  a[i]=' ';
 
52
                if(a[i]=='(')
 
53
                        ret.tipus=tFunc;
 
54
                else 
 
55
                        ret.tipus= tVar;
 
56
        } else if(a[0]=='-' && a[1] == '>') {
 
57
                ret.tipus = tLambda;
 
58
                a[1] =' ';
 
59
        } else if(a[0]==':' && a[1] == '=') {
 
60
                ret.tipus = tAssig;
 
61
                a[1] =' ';
 
62
        } else if(a[0]=='+')
 
63
                ret.tipus = tAdd;
 
64
        else if(a[0]=='-')
 
65
                ret.tipus = (antnum == tVal || antnum==tRpr) ? tSub : tUmi;
 
66
        else if(a[0]=='/')
 
67
                ret.tipus = tDiv;
 
68
        else if(a[0]=='^')
 
69
                ret.tipus = tPow;
 
70
        else if(a[0]=='*' && a[1] == '*') {
 
71
                ret.tipus = tPow;
 
72
                a[1] =' ';
 
73
        } else if(a[0]=='*')
 
74
                ret.tipus = tMul;
 
75
        else if(a[0]=='(')
 
76
                ret.tipus = tLpr;
 
77
        else if(a[0]==')')
 
78
                ret.tipus = tRpr;
 
79
        else if(a[0]==',')
 
80
                ret.tipus = tComa;
 
81
        else
 
82
                wrong=true;
 
83
        
 
84
        a[0]=' ';
 
85
        a=a.stripWhiteSpace();
 
86
        antnum = ret.tipus;
 
87
        l-=a.length();
 
88
//      qDebug("%d------------", a.length());
 
89
        return ret;
 
90
}