00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00018
00040
00041 #ifndef NET_INSTAWEB_HTMLPARSE_PUBLIC_LOGGING_HTML_FILTER_H_
00042 #define NET_INSTAWEB_HTMLPARSE_PUBLIC_LOGGING_HTML_FILTER_H_
00043
00044 #include "net/instaweb/util/public/basictypes.h"
00045 #include "net/instaweb/htmlparse/public/empty_html_filter.h"
00046 #include "net/instaweb/htmlparse/public/html_parser_types.h"
00047
00048 namespace net_instaweb {
00049
00050 class HtmlCdataNode;
00051 class HtmlCommentNode;
00052 class HtmlDirectiveNode;
00053 class HtmlElement;
00054 class HtmlIEDirectiveNode;
00055 class StatisticsLog;
00056
00057 class LoggingFilter : public EmptyHtmlFilter {
00058 public:
00062 enum Statistic {
00063 MIN_STAT = 0,
00064 NUM_EXPLICIT_CLOSED = 0,
00065 NUM_IMPLICIT_CLOSED,
00066 NUM_BRIEF_CLOSED,
00067 NUM_CLOSED,
00068 NUM_UNCLOSED,
00069 NUM_SPURIOUS_CLOSED,
00070 NUM_TAGS,
00071 NUM_CDATA,
00072 NUM_COMMENTS,
00073 NUM_DIRECTIVES,
00074 NUM_DOCUMENTS,
00075 NUM_IE_DIRECTIVES,
00076 MAX_STAT
00077 };
00078
00079 LoggingFilter();
00080
00082 virtual void StartDocument();
00083 virtual void StartElement(HtmlElement* element);
00084 virtual void EndElement(HtmlElement* element);
00085 virtual void Cdata(HtmlCdataNode* cdata);
00086 virtual void Comment(HtmlCommentNode* comment);
00087 virtual void IEDirective(HtmlIEDirectiveNode* directive);
00088 virtual void Directive(HtmlDirectiveNode* directive);
00089 virtual const char* Name() const { return "Logging"; }
00090
00092 inline int get(const Statistic statistic) const {
00093 return stats_[statistic];
00094 }
00095
00097
00099 void LogStatistics(StatisticsLog *statistics_log) const;
00100
00101 void Reset();
00102
00103 private:
00104 int stats_[MAX_STAT];
00105
00106 DISALLOW_COPY_AND_ASSIGN(LoggingFilter);
00107 };
00108
00109 }
00110
00111 #endif ///< NET_INSTAWEB_HTMLPARSE_PUBLIC_LOGGING_HTML_FILTER_H_