84 lines
2.2 KiB
C++
84 lines
2.2 KiB
C++
// Copyright 2020 The Tint Authors.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#ifndef SRC_DIAGNOSTIC_PRINTER_H_
|
|
#define SRC_DIAGNOSTIC_PRINTER_H_
|
|
|
|
#include <memory>
|
|
#include <sstream>
|
|
#include <string>
|
|
|
|
namespace tint {
|
|
namespace diag {
|
|
|
|
class List;
|
|
|
|
/// Color is an enumerator of colors used by Style.
|
|
enum class Color {
|
|
kDefault,
|
|
kBlack,
|
|
kRed,
|
|
kGreen,
|
|
kYellow,
|
|
kBlue,
|
|
kMagenta,
|
|
kCyan,
|
|
kWhite,
|
|
};
|
|
|
|
/// Style describes how a diagnostic message should be printed.
|
|
struct Style {
|
|
/// The foreground text color
|
|
Color color = Color::kDefault;
|
|
/// If true the text will be displayed with a strong weight
|
|
bool bold = false;
|
|
};
|
|
|
|
/// Printers are used to print formatted diagnostic messages to a terminal.
|
|
class Printer {
|
|
public:
|
|
/// @returns a diagnostic Printer
|
|
/// @param out the file to print to.
|
|
/// @param use_colors if true, the printer will use colors if `out` is a
|
|
/// terminal and supports them.
|
|
static std::unique_ptr<Printer> create(FILE* out, bool use_colors);
|
|
|
|
virtual ~Printer();
|
|
|
|
/// writes the string str to the printer with the given style.
|
|
/// @param str the string to write to the printer
|
|
/// @param style the style used to print `str`
|
|
virtual void write(const std::string& str, const Style& style) = 0;
|
|
};
|
|
|
|
/// StringPrinter is an implementation of Printer that writes to a std::string.
|
|
class StringPrinter : public Printer {
|
|
public:
|
|
StringPrinter();
|
|
~StringPrinter() override;
|
|
|
|
/// @returns the printed string.
|
|
std::string str() const;
|
|
|
|
void write(const std::string& str, const Style&) override;
|
|
|
|
private:
|
|
std::stringstream stream;
|
|
};
|
|
|
|
} // namespace diag
|
|
} // namespace tint
|
|
|
|
#endif // SRC_DIAGNOSTIC_PRINTER_H_
|