blob: 17911613b200fed130354aba12bbf1f0eaeda679 [file] [log] [blame]
// 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_