diff --git a/addons/symbolviewer/xml_parser.cpp b/addons/symbolviewer/xml_parser.cpp --- a/addons/symbolviewer/xml_parser.cpp +++ b/addons/symbolviewer/xml_parser.cpp @@ -1,94 +1,98 @@ /*************************************************************************** - xml_parser.cpp - description - ------------------- - begin : Mar 28 2007 - author : 2007 jiri Tyr - email : jiri.tyr@vslib.cz - ***************************************************************************/ - /*************************************************************************** - * * - * 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. * - * * - ***************************************************************************/ + xml_parser.cpp - Produce a rudimentary list of tags/elements + present in XML or HTML files. In the tree view of the + symbolviewer plugin the list is grouped by the element type. + ------------------- + begin : May 3 2019 + author : 20019 Andreas Hohenegger based on + xslt_parser.cpp by jiri Tyr + email : hohenegger@gmail.com +***************************************************************************/ +/*************************************************************************** +* +* 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::parseXMLSymbols(void) { - if (!m_mainWindow->activeView()) - return; - - m_struct->setText(i18n("Show Tags")); - - QString cl; // Current Line - QString stripped; - - char comment = 0; - int i; - - QPixmap cls( ( const char** ) class_xpm ); - QPixmap sct( ( const char** ) struct_xpm ); - - QTreeWidgetItem *node = nullptr; - QTreeWidgetItem *topNode = nullptr; - - KTextEditor::Document *kv = m_mainWindow->activeView()->document(); - //kdDebug(13000)<<"Lines counted :"<numLines()<setRootIsDecorated(0); - - for (i=0; ilines(); i++) - { - cl = kv->line(i); - cl = cl.trimmed(); - - if(cl.indexOf(QRegularExpression(QLatin1String(""))) >= 0) { comment = 0; continue; } - - if (comment==1) { continue; } - - if(cl.indexOf(QRegularExpression(QLatin1String("^<[a-zA-Z_]+[a-zA-Z0-9_\\.\\-]*"))) == 0 && m_struct->isChecked()) - { - - /* Get the tag type */ - QString type; - QRegularExpressionMatch match; - QRegularExpression re(QLatin1String("^<([a-zA-Z_]+[a-zA-Z0-9_\\.\\-]*)")); - if (cl.contains(re, &match)) - type = match.captured(1); - else - continue; - - QString stripped = cl.remove(QRegularExpression(QLatin1String("^<[a-zA-Z_]+[a-zA-Z0-9_\\.\\-]* *"))); - stripped = stripped.remove(QRegularExpression(QLatin1String(" */*>.*"))); - - if (m_treeOn->isChecked()) - { - /* See if group already exists */ - QList reslist = m_symbols->findItems(type, Qt::MatchExactly); - if(reslist.isEmpty()){ - topNode = new QTreeWidgetItem(m_symbols, QStringList(type) ); - topNode->setIcon(0, QIcon(cls)); - if (m_expandOn->isChecked()) - { - m_symbols->expandItem(topNode); - } - }else{ - topNode = reslist[0]; - } - node = new QTreeWidgetItem(topNode); - topNode->addChild(node); - } else { - node = new QTreeWidgetItem(m_symbols); - } - node->setIcon(0, QIcon(sct)); - node->setText(0, stripped); - node->setText(1, QString::number( i, 10)); - } - + if (!m_mainWindow->activeView()) + return; + + m_struct->setText(i18n("Show Tags")); + + QString cl; + QString stripped; + + char comment = 0; + int i; + + QPixmap cls( ( const char** ) class_xpm ); + QPixmap sct( ( const char** ) struct_xpm ); + + QTreeWidgetItem *node = nullptr; + QTreeWidgetItem *topNode = nullptr; + + KTextEditor::Document *kv = m_mainWindow->activeView()->document(); + + m_symbols->setRootIsDecorated(0); + + for (i=0; ilines(); i++){ + cl = kv->line(i); + cl = cl.trimmed(); + + if(cl.indexOf(QRegularExpression(QLatin1String(""))) >= 0) { + comment = 0; + continue; + } + + if (comment==1) { + continue; + } + + if(cl.indexOf(QRegularExpression(QLatin1String("^<[a-zA-Z_]+[a-zA-Z0-9_\\.\\-]*"))) == 0 && m_struct->isChecked()){ + + /* Get the tag type */ + QString type; + QRegularExpressionMatch match; + QRegularExpression re(QLatin1String("^<([a-zA-Z_]+[a-zA-Z0-9_\\.\\-]*)")); + if (cl.contains(re, &match)) + type = match.captured(1); + else + continue; + + QString stripped = cl.remove(QRegularExpression(QLatin1String("^<[a-zA-Z_]+[a-zA-Z0-9_\\.\\-]* *"))); + stripped = stripped.remove(QRegularExpression(QLatin1String(" */*>.*"))); + + if (m_treeOn->isChecked()){ + /* See if group already exists */ + QList reslist = m_symbols->findItems(type, Qt::MatchExactly); + if(reslist.isEmpty()){ + topNode = new QTreeWidgetItem(m_symbols, QStringList(type) ); + topNode->setIcon(0, QIcon(cls)); + if (m_expandOn->isChecked()) + { + m_symbols->expandItem(topNode); + } + }else{ + topNode = reslist[0]; + } + node = new QTreeWidgetItem(topNode); + topNode->addChild(node); + } else { + node = new QTreeWidgetItem(m_symbols); + } + node->setIcon(0, QIcon(sct)); + node->setText(0, stripped); + node->setText(1, QString::number( i, 10)); + } } }