blob: 6f8cf9cc3b10976186c8c6864c5e56efd193550a [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.
#include <iosfwd>
#include "base/strings/string_piece.h"
enum EscapingMode {
// No escaping.
// Ninja string escaping.
// For writing commands to ninja files.
enum EscapingPlatform {
// Do escaping for the current platform.
// Force escaping for the given platform.
struct EscapeOptions {
: mode(ESCAPE_NONE),
inhibit_quoting(false) {
EscapingMode mode;
// Controls how "fork" escaping is done. You will generally want to keep the
// default "current" platform.
EscapingPlatform platform;
// 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. Note that Windows has strange behavior where the meaning of the
// backslashes changes according to if it is followed by a quote. The
// escaping rules assume that a double-quote will be appended to the result.
bool inhibit_quoting;
// Escapes the given input, returnining the result.
// If needed_quoting is non-null, whether the string was or should have been
// (if inhibit_quoting was set) quoted will be written to it. This value should
// be initialized to false by the caller and will be written to only if it's
// true (the common use-case is for chaining calls).
std::string EscapeString(const base::StringPiece& str,
const EscapeOptions& options,
bool* needed_quoting);
// 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_