00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00018
00019 #ifndef NET_INSTAWEB_HTMLPARSE_PUBLIC_HTML_NAME_H_
00020 #define NET_INSTAWEB_HTMLPARSE_PUBLIC_HTML_NAME_H_
00021
00022 #include "net/instaweb/util/public/string_util.h"
00023
00024 namespace net_instaweb {
00025
00031 class HtmlName {
00032 public:
00039 enum Keyword {
00040 kXml,
00041 kA,
00042 kAbbr,
00043 kAction,
00044 kAddress,
00045 kAlt,
00046 kArea,
00047 kArticle,
00048 kAside,
00049 kAsync,
00050 kAudio,
00051 kAutocomplete,
00052 kAutofocus,
00053 kAutoplay,
00054 kB,
00055 kBase,
00056 kBdi,
00057 kBdo,
00058 kBlockquote,
00059 kBody,
00060 kBr,
00061 kButton,
00062 kCharset,
00063 kChecked,
00064 kCite,
00065 kClass,
00066 kCode,
00067 kCol,
00068 kColgroup,
00069 kColspan,
00070 kCommand,
00071 kContent,
00072 kControls,
00073 kDd,
00074 kDeclare,
00075 kDefaultchecked,
00076 kDefaultselected,
00077 kDefer,
00078 kDetails,
00079 kDfn,
00080 kDir,
00081 kDisabled,
00082 kDisplay,
00083 kDiv,
00084 kDl,
00085 kDt,
00086 kEm,
00087 kEmbed,
00088 kEnctype,
00089 kEvent,
00090 kFieldset,
00091 kFont,
00092 kFooter,
00093 kFor,
00094 kForm,
00095 kFormnovalidate,
00096 kFrame,
00097 kFrameborder,
00098 kH1,
00099 kH2,
00100 kH3,
00101 kH4,
00102 kH5,
00103 kH6,
00104 kHead,
00105 kHeader,
00106 kHeight,
00107 kHgroup,
00108 kHr,
00109 kHref,
00110 kHtml,
00111 kHttpEquiv,
00112 kI,
00113 kId,
00114 kIframe,
00115 kImg,
00116 kIndeterminate,
00117 kInput,
00118 kIsmap,
00119 kKbd,
00120 kKeygen,
00121 kKeytype,
00122 kLang,
00123 kLanguage,
00124 kLi,
00125 kLink,
00126 kLoop,
00127 kManifest,
00128 kMark,
00129 kMedia,
00130 kMenu,
00131 kMeta,
00132 kMethod,
00133 kMultiple,
00134 kMuted,
00135 kName,
00136 kNav,
00137 kNohref,
00138 kNoresize,
00139 kNoscript,
00140 kNovalidate,
00141 kObject,
00142 kOl,
00143 kOnclick,
00144 kOnload,
00145 kOpen,
00146 kOptgroup,
00147 kOption,
00148 kOther,
00149 kP,
00150 kPagespeedHighResSrc,
00151 kPagespeedLazySrc,
00152 kPagespeedLowResSrc,
00153 kPagespeedLscExpiry,
00154 kPagespeedLscHash,
00155 kPagespeedLscUrl,
00156 kPagespeedNoDefer,
00157 kParam,
00158 kPre,
00159 kQ,
00160 kReadonly,
00161 kRel,
00162 kRequired,
00163 kReversed,
00164 kRowspan,
00165 kRp,
00166 kRt,
00167 kRuby,
00168 kS,
00169 kSamp,
00170 kScoped,
00171 kScript,
00172 kScrolling,
00173 kSeamless,
00174 kSection,
00175 kSelect,
00176 kSelected,
00177 kShape,
00178 kSmall,
00179 kSource,
00180 kSpan,
00181 kSrc,
00182 kStrong,
00183 kStyle,
00184 kSub,
00185 kTable,
00186 kTag,
00187 kTbody,
00188 kTd,
00189 kTest,
00190 kTextarea,
00191 kTfoot,
00192 kTh,
00193 kThead,
00194 kTime,
00195 kTr,
00196 kTrack,
00197 kType,
00198 kU,
00199 kUl,
00200 kValuetype,
00201 kVar,
00202 kVideo,
00203 kWbr,
00204 kWidth,
00205 kWrap,
00206 kXmp,
00207 kNotAKeyword
00208 };
00209
00215 HtmlName(Keyword keyword, const char* str)
00216 : keyword_(keyword), c_str_(str) {
00217 }
00218
00221 Keyword keyword() const { return keyword_; }
00222
00224 const char* c_str() const { return c_str_; }
00225
00230 class Iterator {
00231 public:
00232 Iterator() : index_(-1) { Next(); }
00233 bool AtEnd() const;
00234 void Next();
00235 Keyword keyword() const;
00236 const char* name() const;
00237
00238 private:
00239 int index_;
00240
00242 };
00243
00244 static int num_keywords();
00245 static Keyword Lookup(const StringPiece& name);
00246
00247 private:
00248 friend class HtmlNameTest;
00249
00250 Keyword keyword_;
00251 const char* c_str_;
00252
00254 };
00255
00256 }
00257
00258 #endif ///< NET_INSTAWEB_HTMLPARSE_PUBLIC_HTML_NAME_H_