summaryrefslogtreecommitdiff
path: root/noncore/apps/tinykate/libkate/document/katehighlight.cpp
Unidiff
Diffstat (limited to 'noncore/apps/tinykate/libkate/document/katehighlight.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/tinykate/libkate/document/katehighlight.cpp126
1 files changed, 65 insertions, 61 deletions
diff --git a/noncore/apps/tinykate/libkate/document/katehighlight.cpp b/noncore/apps/tinykate/libkate/document/katehighlight.cpp
index 0d2c283..539d356 100644
--- a/noncore/apps/tinykate/libkate/document/katehighlight.cpp
+++ b/noncore/apps/tinykate/libkate/document/katehighlight.cpp
@@ -1,11 +1,11 @@
1/* 1/*
2 Copyright (C) 1998, 1999 Jochen Wilhelmy 2 Copyright (C) 1998, 1999 Jochen Wilhelmy
3 digisnap@cs.tu-berlin.de 3 digisnap@cs.tu-berlin.de
4 (C) 2002, 2001 The Kate Team <kwrite-devel@kde.org> 4 (C) 2002, 2001 The Kate Team <kwrite-devel@kde.org>
5 (C) 2002 Joseph Wenninger <jowenn@kde.org> 5 (C) 2002 Joseph Wenninger <jowenn@kde.org>
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library is distributed in the hope that it will be useful,
@@ -16,32 +16,36 @@
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21 21
22#include <string.h>
23
24#include <qtextstream.h>
25#include <qpe/config.h>
26#include <kglobal.h>
27//#include <kinstance.h>
28//#include <kmimemagic.h>
29#include <klocale.h>
30//#include <kregexp.h>
31#include <kglobalsettings.h>
32#include <kdebug.h>
33#include <kstddirs.h>
34
35#include "katehighlight.h" 22#include "katehighlight.h"
36
37
38#include "katetextline.h" 23#include "katetextline.h"
39#include "katedocument.h" 24#include "katedocument.h"
40#include "katesyntaxdocument.h" 25#include "katesyntaxdocument.h"
41 26
27#include "kglobal.h"
28//#include "kinstance.h"
29//#include "kmimemagic.h"
30#include "klocale.h"
31//#include "kregexp.h"
32#include "kglobalsettings.h"
33#include "kdebug.h"
34#include "kstddirs.h"
35
36/* OPIE */
37#include <opie2/odebug.h>
38#include <qpe/config.h>
39
40/* QT */
41#include <qtextstream.h>
42
43/* STD */
44#include <string.h>
45
42 46
43HlManager *HlManager::s_pSelf = 0; 47HlManager *HlManager::s_pSelf = 0;
44 48
45enum Item_styles { dsNormal,dsKeyword,dsDataType,dsDecVal,dsBaseN,dsFloat,dsChar,dsString,dsComment,dsOthers}; 49enum Item_styles { dsNormal,dsKeyword,dsDataType,dsDecVal,dsBaseN,dsFloat,dsChar,dsString,dsComment,dsOthers};
46 50
47static bool trueBool = true; 51static bool trueBool = true;
@@ -117,14 +121,14 @@ HlStringDetect::~HlStringDetect() {
117} 121}
118 122
119const QChar *HlStringDetect::checkHgl(const QChar *s, int len, bool) { 123const QChar *HlStringDetect::checkHgl(const QChar *s, int len, bool) {
120 if (!_inSensitive) {if (memcmp(s, str.unicode(), str.length()*sizeof(QChar)) == 0) return s + str.length();} 124 if (!_inSensitive) {if (memcmp(s, str.unicode(), str.length()*sizeof(QChar)) == 0) return s + str.length();}
121 else 125 else
122 { 126 {
123 QString tmp=QString(s,str.length()).upper(); 127 QString tmp=QString(s,str.length()).upper();
124 if (tmp==str) return s+str.length(); 128 if (tmp==str) return s+str.length();
125 } 129 }
126 return 0L; 130 return 0L;
127} 131}
128 132
129 133
130HlRangeDetect::HlRangeDetect(int attribute, int context, QChar ch1, QChar ch2) 134HlRangeDetect::HlRangeDetect(int attribute, int context, QChar ch1, QChar ch2)
@@ -210,16 +214,16 @@ const QChar *HlInt::checkHgl(const QChar *str, int len, bool) {
210 s = str; 214 s = str;
211 while (s->isDigit()) s++; 215 while (s->isDigit()) s++;
212 if (s > str) 216 if (s > str)
213 { 217 {
214 if (subItems) 218 if (subItems)
215 { 219 {
216 for (HlItem *it=subItems->first();it;it=subItems->next()) 220 for (HlItem *it=subItems->first();it;it=subItems->next())
217 { 221 {
218 s1=it->checkHgl(s, len, false); 222 s1=it->checkHgl(s, len, false);
219 if (s1) return s1; 223 if (s1) return s1;
220 } 224 }
221 } 225 }
222 return s; 226 return s;
223 } 227 }
224 return 0L; 228 return 0L;
225} 229}
@@ -245,20 +249,20 @@ const QChar *HlFloat::checkHgl(const QChar *s, int len, bool) {
245 } 249 }
246 } 250 }
247 if (!b) return 0L; 251 if (!b) return 0L;
248 if ((*s&0xdf) == 'E') s++; 252 if ((*s&0xdf) == 'E') s++;
249 else 253 else
250 if (!p) return 0L; 254 if (!p) return 0L;
251 else 255 else
252 { 256 {
253 if (subItems) 257 if (subItems)
254 { 258 {
255 for (HlItem *it=subItems->first();it;it=subItems->next()) 259 for (HlItem *it=subItems->first();it;it=subItems->next())
256 { 260 {
257 s1=it->checkHgl(s, len, false); 261 s1=it->checkHgl(s, len, false);
258 if (s1) return s1; 262 if (s1) return s1;
259 } 263 }
260 } 264 }
261 return s; 265 return s;
262 } 266 }
263 if ((*s == '-')||(*s =='+')) s++; 267 if ((*s == '-')||(*s =='+')) s++;
264 b = false; 268 b = false;
@@ -342,13 +346,13 @@ const QChar *HlCHex::checkHgl(const QChar *str, int len, bool) {
342 for (i=0;(*s)!='\0';s++,i++); 346 for (i=0;(*s)!='\0';s++,i++);
343 QString line(str,i); 347 QString line(str,i);
344 QRegExp3 rx("0[xX][a-fA-F\\d]+[UuLl]?"); // this matches but is also matching parenthesis 348 QRegExp3 rx("0[xX][a-fA-F\\d]+[UuLl]?"); // this matches but is also matching parenthesis
345 int pos=rx.search(line,0); 349 int pos=rx.search(line,0);
346 if(pos > -1) return str+rx.matchedLength(); 350 if(pos > -1) return str+rx.matchedLength();
347 else 351 else
348 return 0L; 352 return 0L;
349 353
350#else 354#else
351 if (str[0] == '0' && ((str[1]&0xdf) == 'X' )) { 355 if (str[0] == '0' && ((str[1]&0xdf) == 'X' )) {
352 str += 2; 356 str += 2;
353 s = str; 357 s = str;
354 while (s->isDigit() || ((*s&0xdf) >= 'A' && (*s&0xdf) <= 'F') /*|| (*s >= 'a' && *s <= 'f')*/) s++; 358 while (s->isDigit() || ((*s&0xdf) >= 'A' && (*s&0xdf) <= 'F') /*|| (*s >= 'a' && *s <= 'f')*/) s++;
@@ -397,26 +401,26 @@ const QChar *HlRegExpr::checkHgl(const QChar *s, int len, bool lineStart)
397 if ((!lineStart) && handlesLinestart) return 0; 401 if ((!lineStart) && handlesLinestart) return 0;
398 402
399 QString line(s,len); 403 QString line(s,len);
400 int pos = Expr->search( line, 0 ); 404 int pos = Expr->search( line, 0 );
401 if (pos==-1) return 0L; 405 if (pos==-1) return 0L;
402 else 406 else
403 return (s+Expr->matchedLength()); 407 return (s+Expr->matchedLength());
404}; 408};
405 409
406 410
407HlLineContinue::HlLineContinue(int attribute, int context) 411HlLineContinue::HlLineContinue(int attribute, int context)
408 : HlItem(attribute,context) { 412 : HlItem(attribute,context) {
409} 413}
410 414
411const QChar *HlLineContinue::checkHgl(const QChar *s, int len, bool) { 415const QChar *HlLineContinue::checkHgl(const QChar *s, int len, bool) {
412 416
413 if ((s[0].latin1() == '\\') && (len == 1)) 417 if ((s[0].latin1() == '\\') && (len == 1))
414 { 418 {
415 return s + 1; 419 return s + 1;
416 } 420 }
417 return 0L; 421 return 0L;
418} 422}
419 423
420 424
421HlCStringChar::HlCStringChar(int attribute, int context) 425HlCStringChar::HlCStringChar(int attribute, int context)
422 : HlItem(attribute,context) { 426 : HlItem(attribute,context) {
@@ -618,13 +622,13 @@ int Highlight::doHighlight(int ctxNum, TextLine *textLine)
618 { 622 {
619 if (item->startEnable(lastChar)) 623 if (item->startEnable(lastChar))
620 { 624 {
621 s2 = item->checkHgl(s1, len-z, z==0); 625 s2 = item->checkHgl(s1, len-z, z==0);
622 if (s2 > s1) 626 if (s2 > s1)
623 { 627 {
624 qDebug("An item has been detected"); 628 odebug << "An item has been detected" << oendl;
625 textLine->setAttribs(item->attr,s1 - str,s2 - str); 629 textLine->setAttribs(item->attr,s1 - str,s2 - str);
626 ctxNum = item->ctx; 630 ctxNum = item->ctx;
627 context = contextList[ctxNum]; 631 context = contextList[ctxNum];
628 z = z + s2 - s1 - 1; 632 z = z + s2 - s1 - 1;
629 s1 = s2 - 1; 633 s1 = s2 - 1;
630 found = true; 634 found = true;
@@ -850,13 +854,13 @@ void Highlight::done()
850 ************* 854 *************
851 * return value: none 855 * return value: none
852*******************************************************************************************/ 856*******************************************************************************************/
853 857
854void Highlight::createItemData(ItemDataList &list) 858void Highlight::createItemData(ItemDataList &list)
855{ 859{
856 qDebug("Highlight::createItemData"); 860 odebug << "Highlight::createItemData" << oendl;
857 861
858 // If no highlighting is selected we need only one default. 862 // If no highlighting is selected we need only one default.
859 if (noHl) 863 if (noHl)
860 { 864 {
861 list.append(new ItemData(I18N_NOOP("Normal Text"), dsNormal)); 865 list.append(new ItemData(I18N_NOOP("Normal Text"), dsNormal));
862 return; 866 return;
@@ -871,21 +875,21 @@ void Highlight::createItemData(ItemDataList &list)
871 if (internalIDList.count()==0) 875 if (internalIDList.count()==0)
872 { 876 {
873 //if all references to the list are destried the contents will also be deleted 877 //if all references to the list are destried the contents will also be deleted
874 internalIDList.setAutoDelete(true); 878 internalIDList.setAutoDelete(true);
875 syntaxContextData *data; 879 syntaxContextData *data;
876 880
877 qDebug("Trying to read itemData section"); 881 odebug << "Trying to read itemData section" << oendl;
878 882
879 //Tell the syntax document class which file we want to parse and which data group 883 //Tell the syntax document class which file we want to parse and which data group
880 HlManager::self()->syntax->setIdentifier(identifier); 884 HlManager::self()->syntax->setIdentifier(identifier);
881 data=HlManager::self()->syntax->getGroupInfo("highlighting","itemData"); 885 data=HlManager::self()->syntax->getGroupInfo("highlighting","itemData");
882 //begin with the real parsing 886 //begin with the real parsing
883 while (HlManager::self()->syntax->nextGroup(data)) 887 while (HlManager::self()->syntax->nextGroup(data))
884 { 888 {
885 qDebug("Setting up one itemData element"); 889 odebug << "Setting up one itemData element" << oendl;
886 // read all attributes 890 // read all attributes
887 color=HlManager::self()->syntax->groupData(data,QString("color")); 891 color=HlManager::self()->syntax->groupData(data,QString("color"));
888 selColor=HlManager::self()->syntax->groupData(data,QString("selColor")); 892 selColor=HlManager::self()->syntax->groupData(data,QString("selColor"));
889 bold=HlManager::self()->syntax->groupData(data,QString("bold")); 893 bold=HlManager::self()->syntax->groupData(data,QString("bold"));
890 italic=HlManager::self()->syntax->groupData(data,QString("italic")); 894 italic=HlManager::self()->syntax->groupData(data,QString("italic"));
891 //check if the user overrides something 895 //check if the user overrides something
@@ -930,18 +934,18 @@ void Highlight::createItemData(ItemDataList &list)
930 * return value: int :The index of the attribute 934 * return value: int :The index of the attribute
931 * or 0 935 * or 0
932*******************************************************************************************/ 936*******************************************************************************************/
933 937
934int Highlight::lookupAttrName(const QString& name, ItemDataList &iDl) 938int Highlight::lookupAttrName(const QString& name, ItemDataList &iDl)
935{ 939{
936 for (int i=0;i<iDl.count();i++) 940 for (int i=0;i<iDl.count();i++)
937 { 941 {
938 if (iDl.at(i)->name==name) return i; 942 if (iDl.at(i)->name==name) return i;
939 } 943 }
940 kdDebug(13010)<<"Couldn't resolve itemDataName"<<endl; 944 kdDebug(13010)<<"Couldn't resolve itemDataName"<<endl;
941 return 0; 945 return 0;
942} 946}
943 947
944 948
945/******************************************************************************************* 949/*******************************************************************************************
946 Highlight - createHlItem 950 Highlight - createHlItem
947 This function is a helper for makeContextList. It parses the xml file for 951 This function is a helper for makeContextList. It parses the xml file for
@@ -1074,17 +1078,17 @@ void Highlight::readCommentConfig()
1074 { 1078 {
1075// kdDebug(13010)<<"COMMENT DATA FOUND"<<endl; 1079// kdDebug(13010)<<"COMMENT DATA FOUND"<<endl;
1076 while (HlManager::self()->syntax->nextGroup(data)) 1080 while (HlManager::self()->syntax->nextGroup(data))
1077 { 1081 {
1078 1082
1079 if (HlManager::self()->syntax->groupData(data,"name")=="singleLine") 1083 if (HlManager::self()->syntax->groupData(data,"name")=="singleLine")
1080 cslStart=HlManager::self()->syntax->groupData(data,"start"); 1084 cslStart=HlManager::self()->syntax->groupData(data,"start");
1081 if (HlManager::self()->syntax->groupData(data,"name")=="multiLine") 1085 if (HlManager::self()->syntax->groupData(data,"name")=="multiLine")
1082 { 1086 {
1083 cmlStart=HlManager::self()->syntax->groupData(data,"start"); 1087 cmlStart=HlManager::self()->syntax->groupData(data,"start");
1084 cmlEnd=HlManager::self()->syntax->groupData(data,"end"); 1088 cmlEnd=HlManager::self()->syntax->groupData(data,"end");
1085 } 1089 }
1086 } 1090 }
1087 HlManager::self()->syntax->freeGroupInfo(data); 1091 HlManager::self()->syntax->freeGroupInfo(data);
1088 } 1092 }
1089 1093
1090} 1094}
@@ -1109,16 +1113,16 @@ void Highlight::readGlobalKeywordConfig()
1109 HlManager::self()->syntax->setIdentifier(identifier); 1113 HlManager::self()->syntax->setIdentifier(identifier);
1110 1114
1111 // Get the keywords config entry 1115 // Get the keywords config entry
1112 syntaxContextData * data=HlManager::self()->syntax->getConfig("general","keywords"); 1116 syntaxContextData * data=HlManager::self()->syntax->getConfig("general","keywords");
1113 if (data) 1117 if (data)
1114 { 1118 {
1115 kdDebug(13010)<<"Found global keyword config"<<endl; 1119 kdDebug(13010)<<"Found global keyword config"<<endl;
1116 1120
1117 if (HlManager::self()->syntax->groupItemData(data,QString("casesensitive"))!="0") 1121 if (HlManager::self()->syntax->groupItemData(data,QString("casesensitive"))!="0")
1118 casesensitive=true; else {casesensitive=false; kdDebug(13010)<<"Turning on case insensitiveness"<<endl;} 1122 casesensitive=true; else {casesensitive=false; kdDebug(13010)<<"Turning on case insensitiveness"<<endl;}
1119 //get the weak deliminators 1123 //get the weak deliminators
1120 weakDeliminator=(!HlManager::self()->syntax->groupItemData(data,QString("weakDeliminator"))); 1124 weakDeliminator=(!HlManager::self()->syntax->groupItemData(data,QString("weakDeliminator")));
1121 1125
1122 // remove any weakDelimitars (if any) from the default list and store this list. 1126 // remove any weakDelimitars (if any) from the default list and store this list.
1123 int f; 1127 int f;
1124 for (int s=0; s < weakDeliminator.length(); s++) 1128 for (int s=0; s < weakDeliminator.length(); s++)
@@ -1130,13 +1134,13 @@ void Highlight::readGlobalKeywordConfig()
1130 deliminator.remove (f, 1); 1134 deliminator.remove (f, 1);
1131 } 1135 }
1132 1136
1133 deliminatorChars = deliminator.unicode(); 1137 deliminatorChars = deliminator.unicode();
1134 deliminatorLen = deliminator.length(); 1138 deliminatorLen = deliminator.length();
1135 1139
1136 HlManager::self()->syntax->freeGroupInfo(data); 1140 HlManager::self()->syntax->freeGroupInfo(data);
1137 } 1141 }
1138 else 1142 else
1139 { 1143 {
1140 //Default values 1144 //Default values
1141 casesensitive=true; 1145 casesensitive=true;
1142 weakDeliminator=QString(""); 1146 weakDeliminator=QString("");
@@ -1201,31 +1205,31 @@ void Highlight::makeContextList()
1201 (HlManager::self()->syntax->groupData(data,QString("lineBeginContext"))).toInt()); 1205 (HlManager::self()->syntax->groupData(data,QString("lineBeginContext"))).toInt());
1202 1206
1203 1207
1204 //Let's create all items for the context 1208 //Let's create all items for the context
1205 while (HlManager::self()->syntax->nextItem(data)) 1209 while (HlManager::self()->syntax->nextItem(data))
1206 { 1210 {
1207 // kdDebug(13010)<< "In make Contextlist: Item:"<<endl; 1211// kdDebug(13010)<< "In make Contextlist: Item:"<<endl;
1208 c=createHlItem(data,iDl); 1212 c=createHlItem(data,iDl);
1209 if (c) 1213 if (c)
1210 { 1214 {
1211 contextList[i]->items.append(c); 1215 contextList[i]->items.append(c);
1212 1216
1213 // Not supported completely atm and only one level. Subitems.(all have to be matched to at once) 1217 // Not supported completely atm and only one level. Subitems.(all have to be matched to at once)
1214 datasub=HlManager::self()->syntax->getSubItems(data); 1218 datasub=HlManager::self()->syntax->getSubItems(data);
1215 bool tmpbool; 1219 bool tmpbool;
1216 if (tmpbool=HlManager::self()->syntax->nextItem(datasub)) 1220 if (tmpbool=HlManager::self()->syntax->nextItem(datasub))
1217 { 1221 {
1218 c->subItems=new QList<HlItem>; 1222 c->subItems=new QList<HlItem>;
1219 for (;tmpbool;tmpbool=HlManager::self()->syntax->nextItem(datasub)) 1223 for (;tmpbool;tmpbool=HlManager::self()->syntax->nextItem(datasub))
1220 c->subItems->append(createHlItem(datasub,iDl)); 1224 c->subItems->append(createHlItem(datasub,iDl));
1221 } 1225 }
1222 HlManager::self()->syntax->freeGroupInfo(datasub); 1226 HlManager::self()->syntax->freeGroupInfo(datasub);
1223 // end of sublevel 1227 // end of sublevel
1224 } 1228 }
1225 // kdDebug(13010)<<"Last line in loop"<<endl; 1229// kdDebug(13010)<<"Last line in loop"<<endl;
1226 } 1230 }
1227 i++; 1231 i++;
1228 } 1232 }
1229 } 1233 }
1230 1234
1231 HlManager::self()->syntax->freeGroupInfo(data); 1235 HlManager::self()->syntax->freeGroupInfo(data);
@@ -1309,22 +1313,22 @@ int HlManager::makeAttribs(Highlight *highlight, Attribute *a, int maxAttribs) {
1309 ItemStyleList defaultStyleList; 1313 ItemStyleList defaultStyleList;
1310 ItemStyle *defaultStyle; 1314 ItemStyle *defaultStyle;
1311 ItemDataList itemDataList; 1315 ItemDataList itemDataList;
1312 ItemData *itemData; 1316 ItemData *itemData;
1313 int nAttribs, z; 1317 int nAttribs, z;
1314 1318
1315 qDebug("HlManager::makeAttribs"); 1319 odebug << "HlManager::makeAttribs" << oendl;
1316 1320
1317 defaultStyleList.setAutoDelete(true); 1321 defaultStyleList.setAutoDelete(true);
1318 getDefaults(defaultStyleList); 1322 getDefaults(defaultStyleList);
1319 1323
1320// itemDataList.setAutoDelete(true); 1324// itemDataList.setAutoDelete(true);
1321 highlight->getItemDataList(itemDataList); 1325 highlight->getItemDataList(itemDataList);
1322 nAttribs = itemDataList.count(); 1326 nAttribs = itemDataList.count();
1323 for (z = 0; z < nAttribs; z++) { 1327 for (z = 0; z < nAttribs; z++) {
1324 qDebug("HlManager::makeAttribs: createing one attribute definition"); 1328 odebug << "HlManager::makeAttribs: createing one attribute definition" << oendl;
1325 itemData = itemDataList.at(z); 1329 itemData = itemDataList.at(z);
1326 if (itemData->defStyle) { 1330 if (itemData->defStyle) {
1327 // default style 1331 // default style
1328 defaultStyle = defaultStyleList.at(itemData->defStyleNum); 1332 defaultStyle = defaultStyleList.at(itemData->defStyleNum);
1329 a[z].col = defaultStyle->col; 1333 a[z].col = defaultStyle->col;
1330 a[z].selCol = defaultStyle->selCol; 1334 a[z].selCol = defaultStyle->selCol;
@@ -1412,13 +1416,13 @@ void HlManager::getDefaults(ItemStyleList &list) {
1412void HlManager::setDefaults(ItemStyleList &list) { 1416void HlManager::setDefaults(ItemStyleList &list) {
1413 KateConfig *config; 1417 KateConfig *config;
1414 int z; 1418 int z;
1415 ItemStyle *i; 1419 ItemStyle *i;
1416 char s[64]; 1420 char s[64];
1417#warning fixme 1421#warning fixme
1418/* 1422/*
1419 config = KateFactory::instance()->config(); 1423 config = KateFactory::instance()->config();
1420 config->setGroup("Default Item Styles"); 1424 config->setGroup("Default Item Styles");
1421 for (z = 0; z < defaultStyles(); z++) { 1425 for (z = 0; z < defaultStyles(); z++) {
1422 i = list.at(z); 1426 i = list.at(z);
1423 sprintf(s,"%X,%X,%d,%d",i->col.rgb(),i->selCol.rgb(),i->bold, i->italic); 1427 sprintf(s,"%X,%X,%d,%d",i->col.rgb(),i->selCol.rgb(),i->bold, i->italic);
1424 config->writeEntry(defaultStyleName(z),s); 1428 config->writeEntry(defaultStyleName(z),s);