1283625Sdim//===- LinePrinter.h ------------------------------------------ *- C++ --*-===// 2283625Sdim// 3283625Sdim// The LLVM Compiler Infrastructure 4283625Sdim// 5283625Sdim// This file is distributed under the University of Illinois Open Source 6283625Sdim// License. See LICENSE.TXT for details. 7283625Sdim// 8283625Sdim//===----------------------------------------------------------------------===// 9283625Sdim 10283625Sdim#ifndef LLVM_TOOLS_LLVMPDBDUMP_LINEPRINTER_H 11283625Sdim#define LLVM_TOOLS_LLVMPDBDUMP_LINEPRINTER_H 12283625Sdim 13283625Sdim#include "llvm/ADT/StringRef.h" 14283625Sdim#include "llvm/ADT/Twine.h" 15283625Sdim#include "llvm/Support/raw_ostream.h" 16283625Sdim#include "llvm/Support/Regex.h" 17283625Sdim 18283625Sdim#include <list> 19283625Sdim 20283625Sdimnamespace llvm { 21283625Sdim 22283625Sdimclass LinePrinter { 23283625Sdim friend class WithColor; 24283625Sdim 25283625Sdimpublic: 26283625Sdim LinePrinter(int Indent, raw_ostream &Stream); 27283625Sdim 28283625Sdim void Indent(); 29283625Sdim void Unindent(); 30283625Sdim void NewLine(); 31283625Sdim 32283625Sdim raw_ostream &getStream() { return OS; } 33283625Sdim int getIndentLevel() const { return CurrentIndent; } 34283625Sdim 35283625Sdim bool IsTypeExcluded(llvm::StringRef TypeName); 36283625Sdim bool IsSymbolExcluded(llvm::StringRef SymbolName); 37283625Sdim bool IsCompilandExcluded(llvm::StringRef CompilandName); 38283625Sdim 39283625Sdimprivate: 40283625Sdim template <typename Iter> 41283625Sdim void SetFilters(std::list<Regex> &List, Iter Begin, Iter End) { 42283625Sdim List.clear(); 43283625Sdim for (; Begin != End; ++Begin) 44284236Sdim List.emplace_back(StringRef(*Begin)); 45283625Sdim } 46283625Sdim 47283625Sdim raw_ostream &OS; 48283625Sdim int IndentSpaces; 49283625Sdim int CurrentIndent; 50283625Sdim 51296417Sdim std::list<Regex> ExcludeCompilandFilters; 52296417Sdim std::list<Regex> ExcludeTypeFilters; 53296417Sdim std::list<Regex> ExcludeSymbolFilters; 54296417Sdim 55296417Sdim std::list<Regex> IncludeCompilandFilters; 56296417Sdim std::list<Regex> IncludeTypeFilters; 57296417Sdim std::list<Regex> IncludeSymbolFilters; 58283625Sdim}; 59283625Sdim 60283625Sdimtemplate <class T> 61283625Sdiminline raw_ostream &operator<<(LinePrinter &Printer, const T &Item) { 62283625Sdim Printer.getStream() << Item; 63283625Sdim return Printer.getStream(); 64283625Sdim} 65283625Sdim 66283625Sdimenum class PDB_ColorItem { 67283625Sdim None, 68283625Sdim Address, 69283625Sdim Type, 70283625Sdim Keyword, 71283625Sdim Offset, 72283625Sdim Identifier, 73283625Sdim Path, 74283625Sdim SectionHeader, 75283625Sdim LiteralValue, 76283625Sdim Register, 77283625Sdim}; 78283625Sdim 79283625Sdimclass WithColor { 80283625Sdimpublic: 81283625Sdim WithColor(LinePrinter &P, PDB_ColorItem C); 82283625Sdim ~WithColor(); 83283625Sdim 84283625Sdim raw_ostream &get() { return OS; } 85283625Sdim 86283625Sdimprivate: 87296417Sdim void applyColor(PDB_ColorItem C); 88283625Sdim raw_ostream &OS; 89283625Sdim}; 90283625Sdim} 91283625Sdim 92283625Sdim#endif 93