diff --git a/src/Parser/Parsing/Impl/DefinesStreamProxy.cpp b/src/Parser/Parsing/Impl/DefinesStreamProxy.cpp index 0356f7b0..d36f3c28 100644 --- a/src/Parser/Parsing/Impl/DefinesStreamProxy.cpp +++ b/src/Parser/Parsing/Impl/DefinesStreamProxy.cpp @@ -122,8 +122,9 @@ void DefinesStreamProxy::Define::IdentifyParameters(const std::vectorNextLine(); } else if (MatchDirectives(line) || !m_modes.empty() && m_modes.top() != BlockMode::IN_BLOCK) { + if (!m_skip_directive_lines) + { + line.m_line = std::string(); + return line; + } + line = m_stream->NextLine(); } else diff --git a/src/Parser/Parsing/Impl/DefinesStreamProxy.h b/src/Parser/Parsing/Impl/DefinesStreamProxy.h index 948bd1e3..6a93ac36 100644 --- a/src/Parser/Parsing/Impl/DefinesStreamProxy.h +++ b/src/Parser/Parsing/Impl/DefinesStreamProxy.h @@ -54,6 +54,7 @@ private: }; IParserLineStream* const m_stream; + const bool m_skip_directive_lines; std::map m_defines; std::stack m_modes; unsigned m_ignore_depth; @@ -79,7 +80,7 @@ private: bool FindDefineForWord(const ParserLine& line, unsigned wordStart, unsigned wordEnd, Define*& value); public: - explicit DefinesStreamProxy(IParserLineStream* stream); + DefinesStreamProxy(IParserLineStream* stream, bool skipDirectiveLines = false); void AddDefine(Define define); void Undefine(const std::string& name); diff --git a/src/RawTemplater/Templating/Templater.cpp b/src/RawTemplater/Templating/Templater.cpp index dc0e0c0f..a0cb5235 100644 --- a/src/RawTemplater/Templating/Templater.cpp +++ b/src/RawTemplater/Templating/Templater.cpp @@ -32,7 +32,7 @@ namespace templating m_base_stream = std::make_unique(stream, fileName); m_templating_proxy = std::make_unique(m_base_stream.get(), templaterControl); - m_defines_proxy = std::make_unique(m_templating_proxy.get()); + m_defines_proxy = std::make_unique(m_templating_proxy.get(), true); m_directive_escape_proxy = std::make_unique(m_defines_proxy.get()); m_skip_until_first_non_empty_proxy = std::make_unique(m_directive_escape_proxy.get());