00001 // 00002 // C++ Interface: SourceFileHighlighter 00003 // 00004 // Description: 00005 // 00006 // 00007 // Author: Lorenzo Bettini <http://www.lorenzobettini.it>, (C) 2008 00008 // 00009 // Copyright: See COPYING file that comes with this distribution 00010 // 00011 // 00012 00013 #ifndef SOURCEFILEHIGHLIGHTER_H_ 00014 #define SOURCEFILEHIGHLIGHTER_H_ 00015 00016 #include <string> 00017 #include <istream> 00018 00019 namespace srchilite { 00020 00021 class SourceHighlighter; 00022 class BufferedOutput; 00023 class PreFormatter; 00024 class LineNumGenerator; 00025 class LineRanges; 00026 class RegexRanges; 00027 class Formatter; 00028 00030 enum FileHighlighterDebug { 00031 NO_DEBUG = 0, DEBUG, DEBUG_INTERACTIVE 00032 }; 00033 00037 class SourceFileHighlighter { 00039 const std::string fileName; 00040 00042 SourceHighlighter *sourceHighlighter; 00043 00045 BufferedOutput *output; 00046 00048 FileHighlighterDebug debugPolicy; 00049 00051 PreFormatter *preformatter; 00052 00054 LineNumGenerator *lineNumGenerator; 00055 00057 LineRanges *lineRanges; 00058 00060 RegexRanges *regexRanges; 00061 00063 Formatter *contextFormatter; 00064 00066 std::string linePrefix; 00067 00069 std::string rangeSeparator; 00070 00071 public: 00078 SourceFileHighlighter(const std::string &file, 00079 SourceHighlighter *sourceHighlighter, BufferedOutput *output); 00080 00081 void setDebugPolicy(FileHighlighterDebug p) { 00082 debugPolicy = p; 00083 } 00084 00085 void setPreformatter(PreFormatter *pf) { 00086 preformatter = pf; 00087 } 00088 00089 void setContextFormatter(Formatter *cf) { 00090 contextFormatter = cf; 00091 } 00092 00093 void setLineNumGenerator(LineNumGenerator *lG) { 00094 lineNumGenerator = lG; 00095 } 00096 00097 void setLinePrefix(const std::string &prefix) { 00098 linePrefix = prefix; 00099 } 00100 00107 void setRangeSeparator(const std::string &rangeSep); 00108 00109 const LineRanges *getLineRanges() const { 00110 return lineRanges; 00111 } 00112 00113 void setLineRanges(LineRanges *lr) { 00114 lineRanges = lr; 00115 } 00116 00117 void setRegexRanges(RegexRanges *rr) { 00118 regexRanges = rr; 00119 } 00120 00125 void highlight(); 00126 00132 void highlight(std::istream &is); 00133 00139 void highlight(const std::string &is); 00140 00141 }; 00142 00143 } 00144 00145 #endif /*SOURCEFILEHIGHLIGHTER_H_*/