mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-28 08:16:09 +03:00
81 lines
2.7 KiB
C++
81 lines
2.7 KiB
C++
// 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"
|
|
|
|
enum EscapingMode {
|
|
// No escaping.
|
|
ESCAPE_NONE,
|
|
|
|
// Ninja string escaping.
|
|
ESCAPE_NINJA,
|
|
|
|
// For writing commands to ninja files. This assumes the output is "one
|
|
// thing" like a filename, so will escape or quote spaces as necessary for
|
|
// both Ninja and the shell to keep that thing together.
|
|
ESCAPE_NINJA_COMMAND,
|
|
|
|
// For writing preformatted shell commands to Ninja files. This assumes the
|
|
// output already has the proper quoting and may include special shell
|
|
// shell characters which we want to pass to the shell (like when writing
|
|
// tool commands). Only Ninja "$" are escaped.
|
|
ESCAPE_NINJA_PREFORMATTED_COMMAND,
|
|
};
|
|
|
|
enum EscapingPlatform {
|
|
// Do escaping for the current platform.
|
|
ESCAPE_PLATFORM_CURRENT,
|
|
|
|
// Force escaping for the given platform.
|
|
ESCAPE_PLATFORM_POSIX,
|
|
ESCAPE_PLATFORM_WIN,
|
|
};
|
|
|
|
struct EscapeOptions {
|
|
EscapeOptions()
|
|
: mode(ESCAPE_NONE),
|
|
platform(ESCAPE_PLATFORM_CURRENT),
|
|
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_
|