diff --git a/src/emitterutils.cpp b/src/emitterutils.cpp index d5a72cc..34da1bc 100644 --- a/src/emitterutils.cpp +++ b/src/emitterutils.cpp @@ -175,11 +175,17 @@ bool IsValidPlainScalar(const std::string& str, FlowType::value flowType, } // then check until something is disallowed - const RegEx& disallowed = (flowType == FlowType::Flow ? Exp::EndScalarInFlow() - : Exp::EndScalar()) || - (Exp::BlankOrBreak() + Exp::Comment()) || - Exp::NotPrintable() || Exp::Utf8_ByteOrderMark() || - Exp::Break() || Exp::Tab(); + static const RegEx& disallowed_flow = + Exp::EndScalarInFlow() || (Exp::BlankOrBreak() + Exp::Comment()) || + Exp::NotPrintable() || Exp::Utf8_ByteOrderMark() || Exp::Break() || + Exp::Tab(); + static const RegEx& disallowed_block = + Exp::EndScalar() || (Exp::BlankOrBreak() + Exp::Comment()) || + Exp::NotPrintable() || Exp::Utf8_ByteOrderMark() || Exp::Break() || + Exp::Tab(); + const RegEx& disallowed = + flowType == FlowType::Flow ? disallowed_flow : disallowed_block; + StringCharSource buffer(str.c_str(), str.size()); while (buffer) { if (disallowed.Matches(buffer)) {