// QuotedScalar void Scanner::ScanQuotedScalar() { std::string scalar; // peek at single or double quote (don't eat because we need to preserve (for // the time being) the input position) char quote = INPUT.peek(); bool single = (quote == '\''); // setup the scanning parameters ScanScalarParams params; RegEx end = (single ? RegEx(quote) && !Exp::EscSingleQuote() : RegEx(quote)); params.end = &end; params.eatEnd = true; params.escape = (single ? '\'' : '\\'); params.indent = 0; params.fold = FOLD_FLOW; params.eatLeadingWhitespace = true; params.trimTrailingSpaces = false; params.chomp = CLIP; params.onDocIndicator = THROW; // insert a potential simple key InsertPotentialSimpleKey(); Mark mark = INPUT.mark(); // now eat that opening quote INPUT.get(); // and scan scalar = ScanScalar(INPUT, params); m_simpleKeyAllowed = false; m_canBeJSONFlow = true; Token token(Token::NON_PLAIN_SCALAR, mark); token.value = scalar; m_tokens.push(token); }
// -------------------------------------------------------------------------------- // wxArrayString guSplitWords( const wxString &InputStr ) { wxArrayString RetVal; wxString TempStr = InputStr; wxString ResStr; size_t index, len; wxRegEx RegEx( wxT( " *([^ ]*|\" *[^\"]* *\") *" ) ); while( TempStr.Length() && RegEx.Matches( TempStr ) ) { RegEx.GetMatch( &index, &len ); ResStr = RegEx.GetMatch( TempStr, 1 ); ResStr.Replace( wxT( "\"" ), wxT( " " ), true ); RetVal.Add( ResStr.Trim( true ).Trim( false ) ); //guLogMessage( wxT( "%i %s" ), RetVal.Count(), ResStr.Trim( true ).Trim( false ).c_str() ); TempStr = TempStr.Mid( len ); } return RetVal; }
RegEx::RegEx(const std::string& str, REGEX_OP op): m_op(op) { for(std::size_t i=0;i<str.size();i++) m_params.push_back(RegEx(str[i])); }