diff options
Diffstat (limited to 'tools/gn/escape.h')
-rw-r--r-- | tools/gn/escape.h | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/tools/gn/escape.h b/tools/gn/escape.h new file mode 100644 index 0000000..1791161 --- /dev/null +++ b/tools/gn/escape.h @@ -0,0 +1,53 @@ +// 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 <iosfwd> + +#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_ |