Source-highlight Library
/home/bettini/work/source-highlight/src-highlite/lib/srchilite/sourcefilehighlighter.h
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_*/