summaryrefslogtreecommitdiffstats
path: root/tools/gn/escape.h
blob: 17911613b200fed130354aba12bbf1f0eaeda679 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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_