summaryrefslogtreecommitdiff
path: root/noncore/apps/tinykate/libkate/document/katesyntaxdocument.cpp
Unidiff
Diffstat (limited to 'noncore/apps/tinykate/libkate/document/katesyntaxdocument.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/tinykate/libkate/document/katesyntaxdocument.cpp306
1 files changed, 306 insertions, 0 deletions
diff --git a/noncore/apps/tinykate/libkate/document/katesyntaxdocument.cpp b/noncore/apps/tinykate/libkate/document/katesyntaxdocument.cpp
new file mode 100644
index 0000000..c51221b
--- a/dev/null
+++ b/noncore/apps/tinykate/libkate/document/katesyntaxdocument.cpp
@@ -0,0 +1,306 @@
1/***************************************************************************
2 katesyntaxdocument.cpp - description
3 -------------------
4 begin : Sat 31 March 2001
5 copyright : (C) 2001,2002 by Joseph Wenninger
6 email : jowenn@kde.org
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
18#include "katesyntaxdocument.h"
19#include <qfile.h>
20#include <kdebug.h>
21#include <kstddirs.h>
22#include <klocale.h>
23#include <kmessagebox.h>
24#include <qstringlist.h>
25#include <kconfig.h>
26#include <kglobal.h>
27
28
29
30SyntaxDocument::SyntaxDocument()
31{
32 m_root=0;
33 currentFile="";
34 setupModeList();
35}
36
37void SyntaxDocument::setIdentifier(const QString& identifier)
38{
39#warning FIXME delete m_root;
40 m_root=Opie::XMLElement::load(identifier);
41 if (!m_root) KMessageBox::error( 0L, i18n("Can't open %1").arg(identifier) );
42
43}
44
45SyntaxDocument::~SyntaxDocument()
46{
47}
48
49void SyntaxDocument::setupModeList(bool force)
50{
51
52 if (myModeList.count() > 0) return;
53
54 KConfig *config=KGlobal::config();
55 KStandardDirs *dirs = KGlobal::dirs();
56
57 QStringList list=dirs->findAllResources("data","kate/syntax/*.xml",false,true);
58
59 for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it )
60 {
61 QString Group="Highlighting_Cache"+*it;
62
63 if ((config->hasGroup(Group)) && (!force))
64 {
65 config->setGroup(Group);
66 syntaxModeListItem *mli=new syntaxModeListItem;
67 mli->name = config->readEntry("name","");
68 mli->section = config->readEntry("section","");
69 mli->mimetype = config->readEntry("mimetype","");
70 mli->extension = config->readEntry("extension","");
71 mli->identifier = *it;
72 myModeList.append(mli);
73 }
74 else
75 {
76 qDebug("Found a description file:"+(*it));
77 setIdentifier(*it);
78 Opie::XMLElement *e=m_root;
79 if (e)
80 {
81 e=e->firstChild();
82 qDebug(e->tagName());
83 if (e->tagName()=="language")
84 {
85 syntaxModeListItem *mli=new syntaxModeListItem;
86 mli->name = e->attribute("name");
87 mli->section = e->attribute("section");
88 mli->mimetype = e->attribute("mimetype");
89 mli->extension = e->attribute("extensions");
90 qDebug(QString("valid description for: %1/%2").arg(mli->section).arg(mli->name));
91 if (mli->section.isEmpty())
92 mli->section=i18n("Other");
93
94 mli->identifier = *it;
95#warning fixme
96/*
97 config->setGroup(Group);
98 config->writeEntry("name",mli->name);
99 config->writeEntry("section",mli->section);
100 config->writeEntry("mimetype",mli->mimetype);
101 config->writeEntry("extension",mli->extension);
102*/
103 myModeList.append(mli);
104 }
105 }
106 }
107 }
108// }
109
110// config->sync();
111}
112
113SyntaxModeList SyntaxDocument::modeList()
114{
115 return myModeList;
116}
117
118bool SyntaxDocument::nextGroup( syntaxContextData* data)
119{
120 if(!data) return false;
121
122 if (!data->currentGroup)
123 data->currentGroup=data->parent->firstChild();
124 else
125 data->currentGroup=data->currentGroup->nextChild();
126
127 data->item=0;
128
129 if (!data->currentGroup)
130 return false;
131 else
132 return true;
133}
134
135bool SyntaxDocument::nextItem( syntaxContextData* data)
136{
137 if(!data) return false;
138
139 if (!data->item)
140 data->item=data->currentGroup->firstChild();
141 else
142 data->item=data->item->nextChild();
143
144 if (!data->item)
145 return false;
146 else
147 return true;
148}
149
150QString SyntaxDocument::groupItemData( syntaxContextData* data,QString name)
151{
152 if(!data)
153 return QString::null;
154
155 if ( (data->item) && (name.isEmpty()))
156 return data->item->tagName();
157
158 if (data->item)
159 return data->item->attribute(name);
160 else
161 return QString();
162}
163
164QString SyntaxDocument::groupData( syntaxContextData* data,QString name)
165{
166 if(!data)
167 return QString::null;
168
169 if (data->currentGroup)
170 return data->currentGroup->attribute(name);
171 else
172 return QString();
173}
174
175void SyntaxDocument::freeGroupInfo( syntaxContextData* data)
176{
177 if (data)
178 delete data;
179}
180
181syntaxContextData* SyntaxDocument::getSubItems(syntaxContextData* data)
182{
183 syntaxContextData *retval=new syntaxContextData;
184 retval->parent=0;
185 retval->currentGroup=0;
186 retval->item=0;
187 if (data != 0)
188 {
189 retval->parent=data->currentGroup;
190 retval->currentGroup=data->item;
191 retval->item=0;
192 }
193
194 return retval;
195}
196
197syntaxContextData* SyntaxDocument::getConfig(const QString& mainGroupName, const QString &Config)
198{
199 Opie::XMLElement *e = m_root->firstChild()->firstChild();
200
201 while (e)
202 {
203 kdDebug(13010)<<"in SyntaxDocument::getGroupInfo (outer loop) " <<endl;
204
205 if (e->tagName().compare(mainGroupName)==0 )
206 {
207 Opie::XMLElement *e1=e->firstChild();
208
209 while (e1)
210 {
211 kdDebug(13010)<<"in SyntaxDocument::getGroupInfo (inner loop) " <<endl;
212
213 if (e1->tagName()==Config)
214 {
215 syntaxContextData *data=new ( syntaxContextData);
216 data->currentGroup=0;
217 data->parent=0;
218 data->item=e1;
219 return data;
220 }
221
222 e1=e1->nextChild();
223 }
224
225 kdDebug(13010) << "WARNING :returning null 3"<< endl;
226 return 0;
227 }
228
229 e=e->nextChild();
230 }
231
232 kdDebug(13010) << "WARNING :returning null 4" << endl;
233 return 0;
234}
235
236
237
238syntaxContextData* SyntaxDocument::getGroupInfo(const QString& mainGroupName, const QString &group)
239{
240
241 Opie::XMLElement *e=m_root->firstChild()->firstChild();
242
243 while (e)
244 {
245 kdDebug(13010)<<"in SyntaxDocument::getGroupInfo (outer loop) " <<endl;
246
247 if (e->tagName().compare(mainGroupName)==0 )
248 {
249 Opie::XMLElement *e1=e->firstChild();
250
251 while (e1)
252 {
253 kdDebug(13010)<<"in SyntaxDocument::getGroupInfo (inner loop) " <<endl;
254 if (e1->tagName()==group+"s")
255 {
256 syntaxContextData *data=new ( syntaxContextData);
257 data->parent=e1;
258 data->currentGroup=0;
259 data->item=0;
260 return data;
261 }
262
263 e1=e1->nextChild();
264 }
265
266 kdDebug(13010) << "WARNING : getGroupInfo returning null :1 " << endl;
267 return 0;
268 }
269
270 e=e->nextChild();
271 }
272
273 kdDebug(13010) << "WARNING : getGroupInfo returning null :2" << endl;
274 return 0;
275}
276
277
278QStringList& SyntaxDocument::finddata(const QString& mainGroup,const QString& type,bool clearList)
279{
280 Opie::XMLElement *e = m_root->firstChild();
281 if (clearList)
282 m_data.clear();
283
284 for(e=e->firstChild(); e; e=e->nextChild())
285 {
286 if (e->tagName()==mainGroup)
287 {
288 for (Opie::XMLElement *e1=e->firstChild();e1;e1=e1->nextChild())
289 {
290 if (e1->tagName()!="list") continue;
291
292 if (e1->attribute("name")==type)
293 {
294 for (Opie::XMLElement *e2=e1->firstChild();e2;e2=e2->nextChild())
295 qDebug("FOUND A LIST ENTRY("+e2->tagName()+"):"+e2->value());
296 m_data+="TEST";//e2->value().stripWhiteSpace();
297
298 break;
299 }
300 }
301 break;
302 }
303 }
304
305 return m_data;
306}