1 //===-- Highlighter.cpp -----------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "lldb/Core/Highlighter.h" 11 12 #include "lldb/Target/Language.h" 13 #include "lldb/Utility/AnsiTerminal.h" 14 #include "lldb/Utility/StreamString.h" 15 16 using namespace lldb_private; 17 18 void HighlightStyle::ColorStyle::Apply(Stream &s, llvm::StringRef value) const { 19 s << m_prefix << value << m_suffix; 20 } 21 22 void HighlightStyle::ColorStyle::Set(llvm::StringRef prefix, 23 llvm::StringRef suffix) { 24 m_prefix = lldb_utility::ansi::FormatAnsiTerminalCodes(prefix); 25 m_suffix = lldb_utility::ansi::FormatAnsiTerminalCodes(suffix); 26 } 27 28 void NoHighlighter::Highlight(const HighlightStyle &options, 29 llvm::StringRef line, 30 llvm::StringRef previous_lines, Stream &s) const { 31 // We just forward the input to the output and do no highlighting. 32 s << line; 33 } 34 35 static HighlightStyle::ColorStyle GetColor(const char *c) { 36 return HighlightStyle::ColorStyle(c, "${ansi.normal}"); 37 } 38 39 HighlightStyle HighlightStyle::MakeVimStyle() { 40 HighlightStyle result; 41 result.comment = GetColor("${ansi.fg.purple}"); 42 result.scalar_literal = GetColor("${ansi.fg.red}"); 43 result.keyword = GetColor("${ansi.fg.green}"); 44 return result; 45 } 46 47 const Highlighter & 48 HighlighterManager::getHighlighterFor(lldb::LanguageType language_type, 49 llvm::StringRef path) const { 50 Language *language = lldb_private::Language::FindPlugin(language_type, path); 51 if (language && language->GetHighlighter()) 52 return *language->GetHighlighter(); 53 return m_no_highlighter; 54 } 55 56 std::string Highlighter::Highlight(const HighlightStyle &options, 57 llvm::StringRef line, 58 llvm::StringRef previous_lines) const { 59 StreamString s; 60 Highlight(options, line, previous_lines, s); 61 s.Flush(); 62 return s.GetString().str(); 63 } 64