00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00018
00019 #ifndef NET_INSTAWEB_REWRITER_PUBLIC_ELIDE_ATTRIBUTES_FILTER_H_
00020 #define NET_INSTAWEB_REWRITER_PUBLIC_ELIDE_ATTRIBUTES_FILTER_H_
00021
00022 #include <map>
00023 #include <set>
00024
00025 #include "net/instaweb/htmlparse/public/empty_html_filter.h"
00026 #include "net/instaweb/htmlparse/public/html_name.h"
00027 #include "net/instaweb/util/public/basictypes.h"
00028
00029 namespace net_instaweb {
00030 class HtmlElement;
00031 class HtmlParse;
00032
00034 class ElideAttributesFilter : public EmptyHtmlFilter {
00035 public:
00036 explicit ElideAttributesFilter(HtmlParse* html_parse);
00037 virtual ~ElideAttributesFilter();
00038
00039 virtual void StartElement(HtmlElement* element);
00040 virtual const char* Name() const { return "ElideAttributes"; }
00041
00042 private:
00043 struct AttrValue {
00044 const char* attr_value;
00045 bool requires_version_5;
00046 };
00047
00048 typedef std::set<HtmlName::Keyword> KeywordSet;
00049 typedef std::map<HtmlName::Keyword, KeywordSet> KeywordSetMap;
00050 typedef std::map<HtmlName::Keyword, AttrValue> ValueMap;
00051 typedef std::map<HtmlName::Keyword, ValueMap> ValueMapMap;
00052
00053 HtmlParse* html_parse_;
00054 KeywordSetMap one_value_attrs_map_;
00055 ValueMapMap default_value_map_;
00056
00057 DISALLOW_COPY_AND_ASSIGN(ElideAttributesFilter);
00058 };
00059
00060 }
00061
00062 #endif ///< NET_INSTAWEB_REWRITER_PUBLIC_ELIDE_ATTRIBUTES_FILTER_H_