Doxygen
Loading...
Searching...
No Matches
ParserManager Class Reference

Manages programming language parsers. More...

#include <src/parserintf.h>

Collaboration diagram for ParserManager:

Classes

struct  ParserPair

Public Member Functions

 ParserManager (const OutlineParserFactory &outlineParserFactory, const CodeParserFactory &codeParserFactory)
 Create the parser manager.
void registerParser (const DString &name, const OutlineParserFactory &outlineParserFactory, const CodeParserFactory &codeParserFactory)
 Registers an additional parser.
bool registerExtension (const DString &extension, const DString &parserName)
 Registers a file extension with a parser with name parserName.
std::unique_ptr< OutlineParserInterfacegetOutlineParser (const DString &extension)
 Gets the interface to the parser associated with a given extension.
std::unique_ptr< CodeParserInterfacegetCodeParser (const DString &extension)
 Gets the interface to the parser associated with a given extension.
CodeParserFactorygetCodeParserFactory (const DString &extension)
 Get the factory for create code parser objects with a given extension.
DString getParserName (const DString &extension)
 Gets the name of the parser associated with given extension.

Private Member Functions

ParserPairgetParsers (const DString &extension)

Private Attributes

std::map< std::string, ParserPairm_parsers
std::map< std::string, ParserPair & > m_extensions
ParserPair m_defaultParsers

Detailed 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 181 of file parserintf.h.

Constructor & Destructor Documentation

◆ ParserManager()

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

Create the parser manager.

Parameters
outlineParserFactorythe fallback outline parser factory to use for unknown extensions
codeParserFactorythe fallback code parser factory to use for unknown extensions

Definition at line 201 of file parserintf.h.

203 : m_defaultParsers(outlineParserFactory,codeParserFactory, DString())
204 {
205 }
ParserPair m_defaultParsers
Definition parserintf.h:288

References m_defaultParsers.

Member Function Documentation

◆ getCodeParser()

std::unique_ptr< CodeParserInterface > ParserManager::getCodeParser ( const DString & 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 253 of file parserintf.h.

254 {
255 return getCodeParserFactory(extension)();
256 }
CodeParserFactory & getCodeParserFactory(const DString &extension)
Get the factory for create code parser objects with a given extension.
Definition parserintf.h:259

References getCodeParserFactory().

Referenced by MemberDefImpl::_writeMultiLineInitializer(), generateExampleDocs(), generateXMLForConcept(), CodeFragmentManager::parseCodeFragment(), FileDefImpl::parseSource(), ConceptDefImpl::writeDefinition(), DefinitionImpl::writeInlineCode(), VhdlDocGen::writeSource(), FileDefImpl::writeSourceBody(), and writeXMLCodeBlock().

◆ getCodeParserFactory()

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

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

Definition at line 259 of file parserintf.h.

260 {
261 return getParsers(extension).codeParserFactory;
262 }
ParserPair & getParsers(const DString &extension)
Definition parserintf.h:274
CodeParserFactory codeParserFactory
Definition parserintf.h:192

References getParsers().

Referenced by DocVisitor::getCodeParser(), and getCodeParser().

◆ getOutlineParser()

std::unique_ptr< OutlineParserInterface > ParserManager::getOutlineParser ( const DString & 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 244 of file parserintf.h.

245 {
246 return getParsers(extension).outlineParserFactory();
247 }
OutlineParserFactory outlineParserFactory
Definition parserintf.h:191

References getParsers().

Referenced by VhdlDocGen::createFlowChart(), getParserForFile(), and MarkdownOutlineParser::parsePrototype().

◆ getParserName()

DString ParserManager::getParserName ( const DString & 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 268 of file parserintf.h.

269 {
270 return getParsers(extension).parserName;
271 }

References getParsers().

Referenced by convertFileNameFortranParserCode().

◆ getParsers()

ParserPair & ParserManager::getParsers ( const DString & extension)
inlineprivate

Definition at line 274 of file parserintf.h.

275 {
276 DString ext = extension.lower();
277 if (ext.empty()) ext=".no_extension";
278 auto it = m_extensions.find(ext.data());
279 if (it==m_extensions.end() && ext.length()>4)
280 {
281 it = m_extensions.find(ext.left(4).data());
282 }
283 return it!=m_extensions.end() ? it->second : m_defaultParsers;
284 }
DString lower() const
Definition dstring.h:330
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
Definition dstring.h:152
DString left(size_t len) const
Definition dstring.h:310
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition dstring.h:161
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition dstring.h:155
std::map< std::string, ParserPair & > m_extensions
Definition parserintf.h:287

References DString::data(), DString::empty(), DString::find(), DString::left(), DString::length(), DString::lower(), m_defaultParsers, and m_extensions.

Referenced by getCodeParserFactory(), getOutlineParser(), and getParserName().

◆ registerExtension()

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

Registers a file extension with a parser with name parserName.

Returns true if the extension was successfully registered.

Definition at line 224 of file parserintf.h.

225 {
226 if (parserName.empty() || extension.empty()) return false;
227
228 const auto &parserIt = m_parsers.find(parserName.str());
229 if (parserIt == m_parsers.end()) return false;
230
231 auto extensionIt = m_extensions.find(extension.str());
232 if (extensionIt != m_extensions.end()) // extension already exists
233 {
234 m_extensions.erase(extensionIt); // remove it (e.g. user specified extension overrules built in one)
235 }
236 m_extensions.emplace(extension.str(),parserIt->second); // add new mapping
237 return true;
238 }
const std::string & str() const
Definition dstring.h:649
std::map< std::string, ParserPair > m_parsers
Definition parserintf.h:286

References DString::empty(), m_extensions, m_parsers, and DString::str().

◆ registerParser()

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

Registers an additional parser.

Parameters
[in]nameA symbolic name of the parser, i.e. "c", "python", "fortran", "vhdl", ...
[in]outlineParserFactoryA factory method to create a language parser (scanner) that is to be used for the given name.
[in]codeParserFactoryA factory method to create a code parser that is to be used for the given name.

Definition at line 215 of file parserintf.h.

217 {
218 m_parsers.emplace(name.str(),ParserPair(outlineParserFactory,codeParserFactory,name));
219 }

References m_parsers, and DString::str().

Referenced by initDoxygen().

Member Data Documentation

◆ m_defaultParsers

ParserPair ParserManager::m_defaultParsers
private

Definition at line 288 of file parserintf.h.

Referenced by getParsers(), and ParserManager().

◆ m_extensions

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

Definition at line 287 of file parserintf.h.

Referenced by getParsers(), and registerExtension().

◆ m_parsers

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

Definition at line 286 of file parserintf.h.

Referenced by registerExtension(), and registerParser().


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