Skip to main content

The ParserManager Class Reference

Manages programming language parsers. More...

Declaration

class ParserManager { ... }

Included Headers

#include <src/parserintf.h>

Public Constructors Index

ParserManager (const OutlineParserFactory &outlineParserFactory, const CodeParserFactory &codeParserFactory)

Create the parser manager. More...

Public Member Functions Index

voidregisterParser (const QCString &name, const OutlineParserFactory &outlineParserFactory, const CodeParserFactory &codeParserFactory)

Registers an additional parser. More...

boolregisterExtension (const QCString &extension, const QCString &parserName)

Registers a file extension with a parser with name parserName. More...

std::unique_ptr< OutlineParserInterface >getOutlineParser (const QCString &extension)

Gets the interface to the parser associated with a given extension. More...

std::unique_ptr< CodeParserInterface >getCodeParser (const QCString &extension)

Gets the interface to the parser associated with a given extension. More...

CodeParserFactory &getCodeParserFactory (const QCString &extension)

Get the factory for create code parser objects with a given extension. More...

QCStringgetParserName (const QCString &extension)

Gets the name of the parser associated with given extension. More...

Private Member Functions Index

ParserPair &getParsers (const QCString &extension)

Private Member Attributes Index

std::map< std::string, ParserPair >m_parsers
std::map< std::string, ParserPair & >m_extensions
ParserPairm_defaultParsers

Description

Manages programming language parsers.

This class manages the language parsers in the system. One can register parsers, and obtain a parser given a file extension.

Definition at line 146 of file parserintf.h.

Public Constructors

ParserManager()

ParserManager::ParserManager (const OutlineParserFactory & outlineParserFactory, const CodeParserFactory & codeParserFactory)
inline

Create the parser manager.

Parameters
outlineParserFactory

the fallback outline parser factory to use for unknown extensions

codeParserFactory

the fallback code parser factory to use for unknown extensions

Definition at line 166 of file parserintf.h.

166 ParserManager(const OutlineParserFactory &outlineParserFactory,
167 const CodeParserFactory &codeParserFactory)
168 : m_defaultParsers(outlineParserFactory,codeParserFactory, QCString())
169 {
170 }

Reference m_defaultParsers.

Public Member Functions

getCodeParser()

std::unique_ptr< CodeParserInterface > ParserManager::getCodeParser (const QCString & extension)
inline

Gets the interface to the parser associated with a given extension.

If there is no parser explicitly registered for the supplied extension, the interface to the default parser will be returned.

Definition at line 218 of file parserintf.h.

218 std::unique_ptr<CodeParserInterface> getCodeParser(const QCString &extension)
219 {
220 auto factory = getCodeParserFactory(extension);
221 return factory();
222 }

Reference getCodeParserFactory.

getCodeParserFactory()

CodeParserFactory & ParserManager::getCodeParserFactory (const QCString & extension)
inline

Get the factory for create code parser objects with a given extension.

Definition at line 225 of file parserintf.h.

226 {
227 return getParsers(extension).codeParserFactory;
228 }

Reference getParsers.

Referenced by getCodeParser.

getOutlineParser()

std::unique_ptr< OutlineParserInterface > ParserManager::getOutlineParser (const QCString & extension)
inline

Gets the interface to the parser associated with a given extension.

If there is no parser explicitly registered for the supplied extension, the interface to the default parser will be returned.

Definition at line 209 of file parserintf.h.

209 std::unique_ptr<OutlineParserInterface> getOutlineParser(const QCString &extension)
210 {
211 return getParsers(extension).outlineParserFactory();
212 }

Reference getParsers.

getParserName()

QCString ParserManager::getParserName (const QCString & extension)
inline

Gets the name of the parser associated with given extension.

If there is no parser explicitly registered for the supplied extension, the empty string will be returned.

Definition at line 234 of file parserintf.h.

235 {
236 return getParsers(extension).parserName;
237 }

Reference getParsers.

registerExtension()

bool ParserManager::registerExtension (const QCString & extension, const QCString & parserName)
inline

Registers a file extension with a parser with name parserName.

Returns TRUE if the extension was successfully registered.

Definition at line 189 of file parserintf.h.

189 bool registerExtension(const QCString &extension, const QCString &parserName)
190 {
191 if (parserName.isEmpty() || extension.isEmpty()) return FALSE;
192
193 const auto &parserIt = m_parsers.find(parserName.str());
194 if (parserIt == m_parsers.end()) return FALSE;
195
196 auto extensionIt = m_extensions.find(extension.str());
197 if (extensionIt != m_extensions.end()) // extension already exists
198 {
199 m_extensions.erase(extensionIt); // remove it (e.g. user specified extension overrules built in one)
200 }
201 m_extensions.emplace(extension.str(),parserIt->second); // add new mapping
202 return TRUE;
203 }

References FALSE, QCString::isEmpty, m_extensions, m_parsers, QCString::str and TRUE.

registerParser()

void ParserManager::registerParser (const QCString & name, const OutlineParserFactory & outlineParserFactory, const CodeParserFactory & codeParserFactory)
inline

Registers an additional parser.

Parameters
[in] name

A symbolic name of the parser, i.e. "c", "python", "fortran", "vhdl", ...

[in] outlineParserFactory

A factory method to create a language parser (scanner) that is to be used for the given name.

[in] codeParserFactory

A factory method to create a code parser that is to be used for the given name.

Definition at line 180 of file parserintf.h.

180 void registerParser(const QCString &name,const OutlineParserFactory &outlineParserFactory,
181 const CodeParserFactory &codeParserFactory)
182 {
183 m_parsers.emplace(name.str(),ParserPair(outlineParserFactory,codeParserFactory,name));
184 }

References m_parsers and QCString::str.

Private Member Functions

getParsers()

ParserPair & ParserManager::getParsers (const QCString & extension)
inline

Definition at line 240 of file parserintf.h.

240 ParserPair &getParsers(const QCString &extension)
241 {
242 QCString ext = extension.lower();
243 if (ext.isEmpty()) ext=".no_extension";
244 auto it = m_extensions.find(ext.data());
245 if (it==m_extensions.end() && ext.length()>4)
246 {
247 it = m_extensions.find(ext.left(4).data());
248 }
249 return it!=m_extensions.end() ? it->second : m_defaultParsers;
250 }

References QCString::data, QCString::isEmpty, QCString::left, QCString::length, QCString::lower, m_defaultParsers and m_extensions.

Referenced by getCodeParserFactory, getOutlineParser and getParserName.

Private Member Attributes

m_defaultParsers

ParserPair ParserManager::m_defaultParsers

Definition at line 254 of file parserintf.h.

Referenced by getParsers and ParserManager.

m_extensions

std::map<std::string,ParserPair &> ParserManager::m_extensions

Definition at line 253 of file parserintf.h.

253 std::map<std::string,ParserPair &> m_extensions;

Referenced by getParsers and registerExtension.

m_parsers

std::map<std::string,ParserPair> ParserManager::m_parsers

Definition at line 252 of file parserintf.h.

252 std::map<std::string,ParserPair> m_parsers;

Referenced by registerExtension and registerParser.


The documentation for this class was generated from the following file:


Generated via doxygen2docusaurus by Doxygen 1.14.0.