// Copyright (c) 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef TOOLS_GN_ESCAPE_H_ #define TOOLS_GN_ESCAPE_H_ #include #include "base/strings/string_piece.h" // TODO(brettw) we may need to make this a bitfield. If we want to write a // shell command in a ninja file, we need the shell characters to be escaped, // and THEN the ninja characters. Or maybe we require the caller to do two // passes. enum EscapingMode { ESCAPE_NONE, // No escaping. ESCAPE_NINJA, // Ninja string escaping. ESCAPE_SHELL, // Shell string escaping. }; struct EscapeOptions { EscapeOptions() : mode(ESCAPE_NONE), convert_slashes(false), inhibit_quoting(false) { } EscapingMode mode; // When set, converts forward-slashes to system-specific path separators. bool convert_slashes; // When the escaping mode is ESCAPE_SHELL, the escaper will normally put // quotes around things with spaces. If this value is set to true, we'll // disable the quoting feature and just add the spaces. // // This mode is for when quoting is done at some higher-level. Defaults to // false. bool inhibit_quoting; }; // Escapes the given input, returnining the result. std::string EscapeString(const base::StringPiece& str, const EscapeOptions& options); // Same as EscapeString but writes the results to the given stream, saving a // copy. void EscapeStringToStream(std::ostream& out, const base::StringPiece& str, const EscapeOptions& options); #endif // TOOLS_GN_ESCAPE_H_