summaryrefslogtreecommitdiffstats
path: root/tools/gn/escape.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/gn/escape.h')
-rw-r--r--tools/gn/escape.h53
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_