Landing Recent QUIC changes until 8/19/2015 17:00 UTC.
[chromium-blink-merge.git] / tools / gn / escape.h
blob838de94370919ed0658523c67357a9a71d811f9a
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef TOOLS_GN_ESCAPE_H_
6 #define TOOLS_GN_ESCAPE_H_
8 #include <iosfwd>
10 #include "base/strings/string_piece.h"
12 enum EscapingMode {
13 // No escaping.
14 ESCAPE_NONE,
16 // Ninja string escaping.
17 ESCAPE_NINJA,
19 // For writing commands to ninja files. This assumes the output is "one
20 // thing" like a filename, so will escape or quote spaces as necessary for
21 // both Ninja and the shell to keep that thing together.
22 ESCAPE_NINJA_COMMAND,
24 // For writing preformatted shell commands to Ninja files. This assumes the
25 // output already has the proper quoting and may include special shell
26 // shell characters which we want to pass to the shell (like when writing
27 // tool commands). Only Ninja "$" are escaped.
28 ESCAPE_NINJA_PREFORMATTED_COMMAND,
31 enum EscapingPlatform {
32 // Do escaping for the current platform.
33 ESCAPE_PLATFORM_CURRENT,
35 // Force escaping for the given platform.
36 ESCAPE_PLATFORM_POSIX,
37 ESCAPE_PLATFORM_WIN,
40 struct EscapeOptions {
41 EscapeOptions()
42 : mode(ESCAPE_NONE),
43 platform(ESCAPE_PLATFORM_CURRENT),
44 inhibit_quoting(false) {
47 EscapingMode mode;
49 // Controls how "fork" escaping is done. You will generally want to keep the
50 // default "current" platform.
51 EscapingPlatform platform;
53 // When the escaping mode is ESCAPE_SHELL, the escaper will normally put
54 // quotes around things with spaces. If this value is set to true, we'll
55 // disable the quoting feature and just add the spaces.
57 // This mode is for when quoting is done at some higher-level. Defaults to
58 // false. Note that Windows has strange behavior where the meaning of the
59 // backslashes changes according to if it is followed by a quote. The
60 // escaping rules assume that a double-quote will be appended to the result.
61 bool inhibit_quoting;
64 // Escapes the given input, returnining the result.
66 // If needed_quoting is non-null, whether the string was or should have been
67 // (if inhibit_quoting was set) quoted will be written to it. This value should
68 // be initialized to false by the caller and will be written to only if it's
69 // true (the common use-case is for chaining calls).
70 std::string EscapeString(const base::StringPiece& str,
71 const EscapeOptions& options,
72 bool* needed_quoting);
74 // Same as EscapeString but writes the results to the given stream, saving a
75 // copy.
76 void EscapeStringToStream(std::ostream& out,
77 const base::StringPiece& str,
78 const EscapeOptions& options);
80 #endif // TOOLS_GN_ESCAPE_H_