33#ifndef PARSERWRAPPER_H
34#define PARSERWRAPPER_H
39#include "formatting_style.h"
41#include "parser_builder.h"
47template<
typename ParserType>
51 explicit ParserWrapper(
const std::string& file_name,
const std::shared_ptr<doctotext::ParserManager> &inParserManager =
nullptr)
53 m_parser(ParserType(file_name))
56 ParserWrapper(
const char* buffer,
size_t size,
const std::shared_ptr<doctotext::ParserManager> &inParserManager =
nullptr)
57 :
Parser(inParserManager) ,
58 m_parser(ParserType(buffer, size))
69 doctotext::Parser::withParameters(parameters);
70 m_parser.setVerboseLogging(isVerboseLogging());
71 m_parser.setLogStream(getLogOutStream());
75 void setParserManager(
const std::shared_ptr<doctotext::ParserManager> &inParserManager)
77 m_parser_manager = inParserManager;
81 mutable ParserType m_parser;
84template<
typename ParserType>
88 static std::unique_ptr<doctotext::Parser>
89 create(
const std::string &inFileName,
const std::shared_ptr<doctotext::ParserManager> &parserManager)
91 return std::make_unique<ParserWrapper<ParserType>>(inFileName, parserManager);
94 static std::unique_ptr<doctotext::Parser>
95 create(
const char* buffer,
size_t size,
const std::shared_ptr<doctotext::ParserManager> &parserManager)
97 return std::make_unique<ParserWrapper<ParserType>>(buffer, size, parserManager);
101template<
typename ParserType>
105 static std::unique_ptr<doctotext::Parser>
106 create(
const std::string &inFileName,
const std::shared_ptr<doctotext::ParserManager> &parserManager)
108 return std::make_unique<ParserType>(inFileName, parserManager);
111 static std::unique_ptr<doctotext::Parser>
112 create(
const char* buffer,
size_t size,
const std::shared_ptr<doctotext::ParserManager> &parserManager)
114 return std::make_unique<ParserType>(buffer, size, parserManager);
122template<
typename ParserCreator>
127 : m_parser_creator(ParserCreator()),
128 m_log_stream(&std::cerr),
134 std::unique_ptr<doctotext::Parser>
135 build(
const std::string &inFileName)
const override
137 auto parser = m_parser_creator.create(inFileName, m_parser_manager);
138 for (
auto &callback : m_callbacks)
140 parser->addOnNewNodeCallback(callback);
142 parser->withParameters(m_parameters);
146 std::unique_ptr<doctotext::Parser>
147 build(
const char* buffer,
size_t size)
const override
149 auto parser = m_parser_creator.create(buffer, size, m_parser_manager);
150 for (
auto &callback : m_callbacks)
152 parser->addOnNewNodeCallback(callback);
154 parser->withParameters(m_parameters);
162 m_log_stream = log_stream;
174 withOnNewNodeCallbacks(
const std::vector<doctotext::NewNodeCallback> &callbacks)
override
176 m_callbacks = callbacks;
181 withParserManager(
const std::shared_ptr<doctotext::ParserManager> &inParserManager)
override
183 m_parser_manager = inParserManager;
190 m_parameters += inParameter;
195 ParserCreator m_parser_creator;
196 std::ostream *m_log_stream;
198 std::vector<doctotext::NewNodeCallback> m_callbacks;
199 std::shared_ptr<doctotext::ParserManager> m_parser_manager;
Provides the basic mechanism to build any parser.
doctotext::ParserBuilder & withParameters(const ParserParameters &inParameter) override
Sets parser parameters.
doctotext::ParserBuilder & withVerboseLogging(bool verbose) override
Turns on/off verbose logging.
doctotext::ParserBuilder & withLogStream(std::ostream *log_stream) override
Sets log stream for parser.
std::unique_ptr< doctotext::Parser > build(const std::string &inFileName) const override
Builds new parser object.
std::unique_ptr< doctotext::Parser > build(const char *buffer, size_t size) const override
Builds new parser object.
Abstract class for all parsers.
Stores list of parsers parameters. Every parser can query ParserParameter for a specific parameter....
void parse() const override
Executes text parsing.
static const std::string TAG_TEXT
Tag for text.
static const std::string TAG_METADATA
Tag for metadata.