File indexing completed on 2024-05-05 05:51:37
0001 /*************************************************************************** 0002 * SPDX-FileCopyrightText: 2001-2002 Bernd Gehrmann * 0003 * bernd@kdevelop.org * 0004 * * 0005 * SPDX-License-Identifier: GPL-2.0-or-later 0006 * * 0007 ***************************************************************************/ 0008 0009 #include "ctagskinds.h" 0010 0011 #include <KLazyLocalizedString> 0012 0013 struct CTagsKindMapping { 0014 char abbrev; 0015 const KLazyLocalizedString verbose; 0016 }; 0017 0018 struct CTagsExtensionMapping { 0019 const char *extension; 0020 const CTagsKindMapping *kinds; 0021 }; 0022 0023 static const CTagsKindMapping kindMappingAsm[] = {{'d', kli18nc("Tag Type", "define")}, 0024 {'l', kli18nc("Tag Type", "label")}, 0025 {'m', kli18nc("Tag Type", "macro")}, 0026 {0, {}}}; 0027 0028 static const CTagsKindMapping kindMappingAsp[] = {{'f', kli18nc("Tag Type", "function")}, {'s', kli18nc("Tag Type", "subroutine")}, {0, {}}}; 0029 0030 static const CTagsKindMapping kindMappingAwk[] = {{'f', kli18nc("Tag Type", "function")}, {0, {}}}; 0031 0032 static const CTagsKindMapping kindMappingBeta[] = {{'f', kli18nc("Tag Type", "fragment definition")}, 0033 {'p', kli18nc("Tag Type", "any pattern")}, 0034 {'s', kli18nc("Tag Type", "slot")}, 0035 {'v', kli18nc("Tag Type", "pattern")}, 0036 {0, {}}}; 0037 0038 static const CTagsKindMapping kindMappingC[] = {{'c', kli18nc("Tag Type", "class")}, 0039 {'d', kli18nc("Tag Type", "macro")}, 0040 {'e', kli18nc("Tag Type", "enumerator")}, 0041 {'f', kli18nc("Tag Type", "function")}, 0042 {'g', kli18nc("Tag Type", "enumeration")}, 0043 {'m', kli18nc("Tag Type", "member")}, 0044 {'n', kli18nc("Tag Type", "namespace")}, 0045 {'p', kli18nc("Tag Type", "prototype")}, 0046 {'s', kli18nc("Tag Type", "struct")}, 0047 {'t', kli18nc("Tag Type", "typedef")}, 0048 {'u', kli18nc("Tag Type", "union")}, 0049 {'v', kli18nc("Tag Type", "variable")}, 0050 {'x', kli18nc("Tag Type", "external variable")}, 0051 {0, {}}}; 0052 0053 static const CTagsKindMapping kindMappingCobol[] = {{'p', kli18nc("Tag Type", "paragraph")}, {0, {}}}; 0054 0055 static const CTagsKindMapping kindMappingEiffel[] = {{'c', kli18nc("Tag Type", "class")}, 0056 {'f', kli18nc("Tag Type", "feature")}, 0057 {'l', kli18nc("Tag Type", "local entity")}, 0058 {0, {}}}; 0059 0060 static const CTagsKindMapping kindMappingFortran[] = {{'b', kli18nc("Tag Type", "block")}, 0061 {'c', kli18nc("Tag Type", "common")}, 0062 {'e', kli18nc("Tag Type", "entry")}, 0063 {'f', kli18nc("Tag Type", "function")}, 0064 {'i', kli18nc("Tag Type", "interface")}, 0065 {'k', kli18nc("Tag Type", "type component")}, 0066 {'l', kli18nc("Tag Type", "label")}, 0067 {'L', kli18nc("Tag Type", "local")}, 0068 {'m', kli18nc("Tag Type", "module")}, 0069 {'n', kli18nc("Tag Type", "namelist")}, 0070 {'p', kli18nc("Tag Type", "program")}, 0071 {'s', kli18nc("Tag Type", "subroutine")}, 0072 {'t', kli18nc("Tag Type", "type")}, 0073 {'v', kli18nc("Tag Type", "variable")}, 0074 {0, {}}}; 0075 0076 static const CTagsKindMapping kindMappingJava[] = {{'c', kli18nc("Tag Type", "class")}, 0077 {'f', kli18nc("Tag Type", "field")}, 0078 {'i', kli18nc("Tag Type", "interface")}, 0079 {'m', kli18nc("Tag Type", "method")}, 0080 {'p', kli18nc("Tag Type", "package")}, 0081 {0, {}}}; 0082 0083 static const CTagsKindMapping kindMappingLisp[] = {{'f', kli18nc("Tag Type", "function")}, {0, {}}}; 0084 0085 static const CTagsKindMapping kindMappingMake[] = {{'m', kli18nc("Tag Type", "macro")}, {0, {}}}; 0086 0087 static const CTagsKindMapping kindMappingPascal[] = {{'f', kli18nc("Tag Type", "function")}, {'p', kli18nc("Tag Type", "procedure")}, {0, {}}}; 0088 0089 static const CTagsKindMapping kindMappingPerl[] = {{'s', kli18nc("Tag Type", "subroutine")}, {0, {}}}; 0090 0091 static const CTagsKindMapping kindMappingPHP[] = {{'c', kli18nc("Tag Type", "class")}, {'f', kli18nc("Tag Type", "function")}, {0, {}}}; 0092 0093 static const CTagsKindMapping kindMappingPython[] = {{'c', kli18nc("Tag Type", "class")}, {'f', kli18nc("Tag Type", "function")}, {0, {}}}; 0094 0095 static const CTagsKindMapping kindMappingRexx[] = {{'s', kli18nc("Tag Type", "subroutine")}, {0, {}}}; 0096 0097 static const CTagsKindMapping kindMappingRuby[] = {{'c', kli18nc("Tag Type", "class")}, 0098 {'f', kli18nc("Tag Type", "function")}, 0099 {'m', kli18nc("Tag Type", "mixin")}, 0100 {0, {}}}; 0101 0102 static const CTagsKindMapping kindMappingScheme[] = {{'f', kli18nc("Tag Type", "function")}, {'s', kli18nc("Tag Type", "set")}, {0, {}}}; 0103 0104 static const CTagsKindMapping kindMappingSh[] = {{'f', kli18nc("Tag Type", "function")}, {0, {}}}; 0105 0106 static const CTagsKindMapping kindMappingSlang[] = {{'f', kli18nc("Tag Type", "function")}, {'n', kli18nc("Tag Type", "namespace")}, {0, {}}}; 0107 0108 static const CTagsKindMapping kindMappingTcl[] = {{'p', kli18nc("Tag Type", "procedure")}, {0, {}}}; 0109 0110 static const CTagsKindMapping kindMappingVim[] = {{'f', kli18nc("Tag Type", "function")}, {0, {}}}; 0111 0112 static CTagsExtensionMapping extensionMapping[] = { 0113 {"asm", kindMappingAsm}, {"s", kindMappingAsm}, {"S", kindMappingAsm}, {"asp", kindMappingAsp}, 0114 {"asa", kindMappingAsp}, {"awk", kindMappingAwk}, {"c++", kindMappingC}, {"cc", kindMappingC}, 0115 {"cp", kindMappingC}, {"cpp", kindMappingC}, {"cxx", kindMappingC}, {"h", kindMappingC}, 0116 {"h++", kindMappingC}, {"hh", kindMappingC}, {"hp", kindMappingC}, {"hpp", kindMappingC}, 0117 {"hxx", kindMappingC}, {"beta", kindMappingBeta}, {"cob", kindMappingCobol}, {"COB", kindMappingCobol}, 0118 {"e", kindMappingEiffel}, {"f", kindMappingFortran}, {"for", kindMappingFortran}, {"ftn", kindMappingFortran}, 0119 {"f77", kindMappingFortran}, {"f90", kindMappingFortran}, {"f95", kindMappingFortran}, {"java", kindMappingJava}, 0120 {"cl", kindMappingLisp}, {"clisp", kindMappingLisp}, {"el", kindMappingLisp}, {"l", kindMappingLisp}, 0121 {"lisp", kindMappingLisp}, {"lsp", kindMappingLisp}, {"ml", kindMappingLisp}, {"mak", kindMappingMake}, 0122 {"p", kindMappingPascal}, {"pas", kindMappingPascal}, {"pl", kindMappingPerl}, {"pm", kindMappingPerl}, 0123 {"perl", kindMappingPerl}, {"php", kindMappingPHP}, {"php3", kindMappingPHP}, {"phtml", kindMappingPHP}, 0124 {"py", kindMappingPython}, {"python", kindMappingPython}, {"cmd", kindMappingRexx}, {"rexx", kindMappingRexx}, 0125 {"rx", kindMappingRexx}, {"rb", kindMappingRuby}, {"sch", kindMappingScheme}, {"scheme", kindMappingScheme}, 0126 {"scm", kindMappingScheme}, {"sm", kindMappingScheme}, {"SCM", kindMappingScheme}, {"SM", kindMappingScheme}, 0127 {"sh", kindMappingSh}, {"SH", kindMappingSh}, {"bsh", kindMappingSh}, {"bash", kindMappingSh}, 0128 {"ksh", kindMappingSh}, {"zsh", kindMappingSh}, {"sl", kindMappingSlang}, {"tcl", kindMappingTcl}, 0129 {"wish", kindMappingTcl}, {"vim", kindMappingVim}, {nullptr, nullptr}}; 0130 0131 static const CTagsKindMapping *findKindMapping(const char *pextension) 0132 { 0133 CTagsExtensionMapping *pem = extensionMapping; 0134 while (pem->extension != nullptr) { 0135 if (strcmp(pem->extension, pextension) == 0) { 0136 return pem->kinds; 0137 } 0138 ++pem; 0139 } 0140 0141 return nullptr; 0142 } 0143 0144 QString CTagsKinds::findKind(const char *kindChar, const QString &extension) 0145 { 0146 if (kindChar == nullptr || extension.isEmpty()) { 0147 return QString(); 0148 } 0149 0150 const CTagsKindMapping *kindMapping = findKindMapping(extension.toLocal8Bit().constData()); 0151 if (kindMapping) { 0152 const CTagsKindMapping *pkm = kindMapping; 0153 while (!pkm->verbose.isEmpty()) { 0154 if (pkm->abbrev == *kindChar) { 0155 return pkm->verbose.toString(); 0156 } 0157 ++pkm; 0158 } 0159 } 0160 0161 return QString(); 0162 } 0163 0164 QString CTagsKinds::findKindNoi18n(const char *kindChar, const QStringView &extension) 0165 { 0166 if (kindChar == nullptr || extension.isEmpty()) { 0167 return QString(); 0168 } 0169 0170 const CTagsKindMapping *kindMapping = findKindMapping(extension.toLocal8Bit().constData()); 0171 if (kindMapping) { 0172 const CTagsKindMapping *pkm = kindMapping; 0173 while (!pkm->verbose.isEmpty()) { 0174 if (pkm->abbrev == *kindChar) { 0175 return pkm->verbose.toString(); 0176 } 0177 ++pkm; 0178 } 0179 } 0180 0181 return QString(); 0182 }