• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
4 
5 #ifndef TOOLS_GN_ESCAPE_H_
6 #define TOOLS_GN_ESCAPE_H_
7 
8 #include <iosfwd>
9 
10 #include "base/strings/string_piece.h"
11 
12 enum EscapingMode {
13   // No escaping.
14   ESCAPE_NONE,
15 
16   // Ninja string escaping.
17   ESCAPE_NINJA = 1,
18 
19   // Shell string escaping.
20   ESCAPE_SHELL = 2,
21 
22   // For writing shell commands to ninja files.
23   ESCAPE_NINJA_SHELL = ESCAPE_NINJA | ESCAPE_SHELL,
24 
25   ESCAPE_JSON = 4,
26 };
27 
28 struct EscapeOptions {
EscapeOptionsEscapeOptions29   EscapeOptions()
30       : mode(ESCAPE_NONE),
31         convert_slashes(false),
32         inhibit_quoting(false) {
33   }
34 
35   EscapingMode mode;
36 
37   // When set, converts forward-slashes to system-specific path separators.
38   bool convert_slashes;
39 
40   // When the escaping mode is ESCAPE_SHELL, the escaper will normally put
41   // quotes around things with spaces. If this value is set to true, we'll
42   // disable the quoting feature and just add the spaces.
43   //
44   // This mode is for when quoting is done at some higher-level. Defaults to
45   // false.
46   bool inhibit_quoting;
47 };
48 
49 // Escapes the given input, returnining the result.
50 //
51 // If needed_quoting is non-null, whether the string was or should have been
52 // (if inhibit_quoting was set) quoted will be written to it. This value should
53 // be initialized to false by the caller and will be written to only if it's
54 // true (the common use-case is for chaining calls).
55 std::string EscapeString(const base::StringPiece& str,
56                          const EscapeOptions& options,
57                          bool* needed_quoting);
58 
59 // Same as EscapeString but writes the results to the given stream, saving a
60 // copy.
61 void EscapeStringToStream(std::ostream& out,
62                           const base::StringPiece& str,
63                           const EscapeOptions& options);
64 
65 #endif  // TOOLS_GN_ESCAPE_H_
66