summaryrefslogtreecommitdiffstats
path: root/kate/cppsymbolviewer/tcl_parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kate/cppsymbolviewer/tcl_parser.cpp')
-rw-r--r--kate/cppsymbolviewer/tcl_parser.cpp150
1 files changed, 150 insertions, 0 deletions
diff --git a/kate/cppsymbolviewer/tcl_parser.cpp b/kate/cppsymbolviewer/tcl_parser.cpp
new file mode 100644
index 0000000..ff51e60
--- /dev/null
+++ b/kate/cppsymbolviewer/tcl_parser.cpp
@@ -0,0 +1,150 @@
+/***************************************************************************
+ tcl_parser.cpp - description
+ -------------------
+ begin : Apr 2 2003
+ author : 2003 Massimo Callegari
+ email : massimocallegari@yahoo.it
+ ***************************************************************************/
+ /***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "plugin_katesymbolviewer.h"
+
+void KatePluginSymbolViewerView::parseTclSymbols(void)
+{
+ if (!win->viewManager()->activeView())
+ return;
+
+ QString currline, prevline;
+ bool prevComment = false;
+ QString varStr("set ");
+ QString procStr("proc");
+ QString stripped;
+ uint i, j, args_par = 0, graph = 0;
+ char block = 0, parse_func = 0;
+
+ QListViewItem *node = NULL;
+ QListViewItem *mcrNode = NULL, *clsNode = NULL;
+ QListViewItem *lastMcrNode = NULL, *lastClsNode = NULL;
+
+ QPixmap mcr( ( const char** ) macro_xpm );
+ QPixmap cls( ( const char** ) class_xpm );
+
+ if(treeMode)
+ {
+ clsNode = new QListViewItem(symbols, symbols->lastItem(), i18n("Functions"));
+ mcrNode = new QListViewItem(symbols, symbols->lastItem(), i18n("Globals"));
+ lastMcrNode = mcrNode;
+ lastClsNode = clsNode;
+ if (expanded_on)
+ {
+ clsNode->setOpen(TRUE);
+ mcrNode->setOpen(TRUE);
+ }
+ symbols->setRootIsDecorated(1);
+ }
+ else
+ symbols->setRootIsDecorated(0);
+
+ Kate::Document *kDoc = win->viewManager()->activeView()->getDoc();
+
+ //positions.resize(kDoc->numLines() + 3); // Maximum symbols number o.O
+ //positions.fill(0);
+
+ for (i = 0; i<kDoc->numLines(); i++)
+ {
+ currline = kDoc->textLine(i);
+ currline = currline.stripWhiteSpace();
+ bool comment = false;
+ kdDebug(13000)<<currline<<endl;
+ if(currline.at(0) == '#') comment = true;
+
+ if(i > 0)
+ {
+ prevline = kDoc->textLine(i-1);
+ if(prevline.endsWith("\\") && prevComment) comment = true;
+ }
+ prevComment = comment;
+
+ if(!comment)
+ {
+ if(currline.startsWith(varStr) && block == 0)
+ {
+ if (macro_on == true) // not really a macro, but a variable
+ {
+ stripped = currline.right(currline.length() - 3);
+ stripped = stripped.simplifyWhiteSpace();
+ int fnd = stripped.find(' ');
+ //fnd = stripped.find(";");
+ if(fnd > 0) stripped = stripped.left(fnd);
+
+ if (treeMode)
+ {
+ node = new QListViewItem(mcrNode, lastMcrNode, stripped);
+ lastMcrNode = node;
+ }
+ else
+ node = new QListViewItem(symbols, symbols->lastItem(), stripped);
+
+ node->setPixmap(0, (const QPixmap &)mcr);
+ node->setText(1, QString::number( i, 10));
+ stripped = "";
+ }//macro
+ } // starts with "set"
+
+ else if(currline.startsWith(procStr)) { parse_func = 1; }
+
+ if (parse_func == 1)
+ {
+ for (j = 0; j < currline.length(); j++)
+ {
+ if (block == 1)
+ {
+ if(currline.at(j)=='{') graph++;
+ if(currline.at(j)=='}')
+ {
+ graph--;
+ if (graph == 0) { block = 0; parse_func = 0; continue; }
+ }
+ }
+ if (block == 0)
+ {
+ stripped += currline.at(j);
+ if(currline.at(j) == '{') args_par++;
+ if(currline.at(j) == '}')
+ {
+ args_par--;
+ if (args_par == 0)
+ {
+ //stripped = stripped.simplifyWhiteSpace();
+ if(func_on == true)
+ {
+ if (treeMode)
+ {
+ node = new QListViewItem(clsNode, lastClsNode, stripped);
+ lastClsNode = node;
+ }
+ else
+ node = new QListViewItem(symbols, symbols->lastItem(), stripped);
+ node->setPixmap(0, (const QPixmap &)cls);
+ node->setText(1, QString::number( i, 10));
+ }
+ stripped = "";
+ block = 1;
+ }
+ }
+ } // block = 0
+ } // for j loop
+ }//func_on
+ } // not a comment
+ } //for i loop
+
+ //positions.resize(symbols->itemIndex(node) + 1);
+}
+