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.cpp | 306 |
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 | |||
30 | SyntaxDocument::SyntaxDocument() | ||
31 | { | ||
32 | m_root=0; | ||
33 | currentFile=""; | ||
34 | setupModeList(); | ||
35 | } | ||
36 | |||
37 | void 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 | |||
45 | SyntaxDocument::~SyntaxDocument() | ||
46 | { | ||
47 | } | ||
48 | |||
49 | void 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 | |||
113 | SyntaxModeList SyntaxDocument::modeList() | ||
114 | { | ||
115 | return myModeList; | ||
116 | } | ||
117 | |||
118 | bool 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 | |||
135 | bool 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 | |||
150 | QString 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 | |||
164 | QString 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 | |||
175 | void SyntaxDocument::freeGroupInfo( syntaxContextData* data) | ||
176 | { | ||
177 | if (data) | ||
178 | delete data; | ||
179 | } | ||
180 | |||
181 | syntaxContextData* 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 | |||
197 | syntaxContextData* 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 | |||
238 | syntaxContextData* 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 | |||
278 | QStringList& 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 | } | ||