/*************************************************************************** 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; TQString currline, prevline; bool prevComment = false; TQString varStr("set "); TQString procStr("proc"); TQString stripped; uint i, j, args_par = 0, graph = 0; char block = 0, parse_func = 0; TQListViewItem *node = NULL; TQListViewItem *mcrNode = NULL, *clsNode = NULL; TQListViewItem *lastMcrNode = NULL, *lastClsNode = NULL; TQPixmap mcr( ( const char** ) macro_xpm ); TQPixmap cls( ( const char** ) class_xpm ); if(treeMode) { clsNode = new TQListViewItem(symbols, symbols->lastItem(), i18n("Functions")); mcrNode = new TQListViewItem(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; inumLines(); i++) { currline = kDoc->textLine(i); currline = currline.stripWhiteSpace(); bool comment = false; kdDebug(13000)< 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 TQListViewItem(mcrNode, lastMcrNode, stripped); lastMcrNode = node; } else node = new TQListViewItem(symbols, symbols->lastItem(), stripped); node->setPixmap(0, (const TQPixmap &)mcr); node->setText(1, TQString::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 TQListViewItem(clsNode, lastClsNode, stripped); lastClsNode = node; } else node = new TQListViewItem(symbols, symbols->lastItem(), stripped); node->setPixmap(0, (const TQPixmap &)cls); node->setText(1, TQString::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); }