File indexing completed on 2024-05-12 09:55:27
0001 /*************************************************************************** 0002 ruby_parser.cpp - description 0003 ------------------- 0004 begin : May 9th 2007 0005 author : 2007 Massimo Callegari 0006 email : massimocallegari@yahoo.it 0007 ***************************************************************************/ 0008 /*************************************************************************** 0009 * * 0010 * SPDX-License-Identifier: GPL-2.0-or-later 0011 * * 0012 ***************************************************************************/ 0013 #include "plugin_katesymbolviewer.h" 0014 0015 void KatePluginSymbolViewerView::parseRubySymbols(void) 0016 { 0017 if (!m_mainWindow->activeView()) { 0018 return; 0019 } 0020 0021 m_macro->setText(i18n("Show Functions")); 0022 m_struct->setText(i18n("Show Methods")); 0023 m_func->setText(i18n("Show Classes")); 0024 0025 QTreeWidgetItem *node = nullptr; 0026 QTreeWidgetItem *mtdNode = nullptr, *clsNode = nullptr, *functionNode = nullptr; 0027 QTreeWidgetItem *lastMtdNode = nullptr, *lastClsNode = nullptr; 0028 0029 KTextEditor::Document *kv = m_mainWindow->activeView()->document(); 0030 0031 if (m_treeOn->isChecked()) { 0032 clsNode = new QTreeWidgetItem(m_symbols, QStringList(i18n("Classes"))); 0033 functionNode = new QTreeWidgetItem(m_symbols, QStringList(i18n("Functions"))); 0034 clsNode->setIcon(0, m_icon_class); 0035 functionNode->setIcon(0, m_icon_function); 0036 0037 if (m_expandOn->isChecked()) { 0038 m_symbols->expandItem(clsNode); 0039 m_symbols->expandItem(functionNode); 0040 } 0041 lastClsNode = clsNode; 0042 mtdNode = clsNode; 0043 lastMtdNode = clsNode; 0044 m_symbols->setRootIsDecorated(1); 0045 } else { 0046 m_symbols->setRootIsDecorated(0); 0047 } 0048 0049 static const QRegularExpression function_regexp(QLatin1String("^(\\s*)def\\s+([a-zA-Z0-9_]+)\\s*(\\(.*\\))")); 0050 static const QRegularExpression class_regexp(QLatin1String("^class\\s+([a-zA-Z0-9]+)")); 0051 QRegularExpressionMatch match; 0052 0053 for (int i = 0; i < kv->lines(); i++) { 0054 QString cl = kv->line(i); 0055 0056 match = class_regexp.match(cl); 0057 if (match.hasMatch()) { 0058 if (m_func->isChecked()) { 0059 if (m_treeOn->isChecked()) { 0060 node = new QTreeWidgetItem(clsNode, lastClsNode); 0061 if (m_expandOn->isChecked()) { 0062 m_symbols->expandItem(node); 0063 } 0064 lastClsNode = node; 0065 mtdNode = lastClsNode; 0066 lastMtdNode = lastClsNode; 0067 } else { 0068 node = new QTreeWidgetItem(m_symbols); 0069 } 0070 node->setText(0, match.captured(1)); 0071 node->setIcon(0, m_icon_class); 0072 node->setText(1, QString::number(i, 10)); 0073 } 0074 continue; 0075 } 0076 0077 match = function_regexp.match(cl); 0078 if (match.hasMatch()) { 0079 if (m_struct->isChecked() && match.captured(1).isEmpty()) { 0080 if (m_treeOn->isChecked()) { 0081 node = new QTreeWidgetItem(functionNode); 0082 } else { 0083 node = new QTreeWidgetItem(m_symbols); 0084 } 0085 } else if (m_macro->isChecked()) { 0086 if (m_treeOn->isChecked()) { 0087 node = new QTreeWidgetItem(mtdNode, lastMtdNode); 0088 lastMtdNode = node; 0089 } else { 0090 node = new QTreeWidgetItem(m_symbols); 0091 } 0092 } 0093 0094 node->setToolTip(0, match.captured(2)); 0095 if (m_typesOn->isChecked()) { 0096 node->setText(0, match.captured(2) + match.captured(3)); 0097 } else { 0098 node->setText(0, match.captured(2)); 0099 } 0100 node->setIcon(0, m_icon_function); 0101 node->setText(1, QString::number(i, 10)); 0102 } 0103 } 0104 }