diff --git a/include/inja/lexer.hpp b/include/inja/lexer.hpp index e5d4d0f..e9a900f 100644 --- a/include/inja/lexer.hpp +++ b/include/inja/lexer.hpp @@ -281,6 +281,11 @@ public: pos = 0; state = State::Text; minus_state = MinusState::Number; + + // Consume byte order mark (BOM) for UTF-8 + if (inja::string_view::starts_with(m_in, "\xEF\xBB\xBF")) { + m_in = m_in.substr(3); + } } Token scan() { @@ -326,8 +331,7 @@ public: } else if (inja::string_view::starts_with(open_str, config.comment_open)) { state = State::CommentStart; must_lstrip = config.lstrip_blocks; - } else if ((pos == 0 || m_in[pos - 1] == '\n') && - inja::string_view::starts_with(open_str, config.line_statement)) { + } else if ((pos == 0 || m_in[pos - 1] == '\n') && inja::string_view::starts_with(open_str, config.line_statement)) { state = State::LineStart; } else { pos += 1; // wasn't actually an opening sequence diff --git a/single_include/inja/inja.hpp b/single_include/inja/inja.hpp index daf6b33..6710d81 100644 --- a/single_include/inja/inja.hpp +++ b/single_include/inja/inja.hpp @@ -2160,6 +2160,11 @@ public: pos = 0; state = State::Text; minus_state = MinusState::Number; + + // Consume byte order mark (BOM) for UTF-8 + if (inja::string_view::starts_with(m_in, "\xEF\xBB\xBF")) { + m_in = m_in.substr(3); + } } Token scan() { @@ -2205,8 +2210,7 @@ public: } else if (inja::string_view::starts_with(open_str, config.comment_open)) { state = State::CommentStart; must_lstrip = config.lstrip_blocks; - } else if ((pos == 0 || m_in[pos - 1] == '\n') && - inja::string_view::starts_with(open_str, config.line_statement)) { + } else if ((pos == 0 || m_in[pos - 1] == '\n') && inja::string_view::starts_with(open_str, config.line_statement)) { state = State::LineStart; } else { pos += 1; // wasn't actually an opening sequence