%{
// html_name.cc is automatically generated from html_name.gperf.
// Author: jmarantz@google.com

#include "base/logging.h"
#include "pagespeed/kernel/base/string_util.h"
#include "pagespeed/kernel/html/html_name.h"

namespace net_instaweb {
%}
%compare-strncmp
%compare-lengths
%define class-name KeywordMapper
%define lookup-function-name Lookup
%define word-array-name kHtmlNameTable
%global-table
%ignore-case
%includes
%language=C++
%readonly-tables
%struct-type

struct KeywordMap {const char* name; net_instaweb::HtmlName::Keyword keyword;};
%%
### These names can be used as element tags, or attribute names.  This is not
### a complete list of HTML names -- just the ones we want to scan for while
### rewriting.
"?xml",                               HtmlName::kXml
"a",                                  HtmlName::kA
"abbr",                               HtmlName::kAbbr
"action",                             HtmlName::kAction
"address",                            HtmlName::kAddress
"alt",                                HtmlName::kAlt
"area",                               HtmlName::kArea
"article",                            HtmlName::kArticle
"as",                                 HtmlName::kAs
"aside",                              HtmlName::kAside
"async",                              HtmlName::kAsync
"audio",                              HtmlName::kAudio
"autocomplete",                       HtmlName::kAutocomplete
"autofocus",                          HtmlName::kAutofocus
"autoplay",                           HtmlName::kAutoplay
"b",                                  HtmlName::kB
"background",                         HtmlName::kBackground
"base",                               HtmlName::kBase
"bdi",                                HtmlName::kBdi
"bdo",                                HtmlName::kBdo
"blockquote",                         HtmlName::kBlockquote
"body",                               HtmlName::kBody
"br",                                 HtmlName::kBr
"button",                             HtmlName::kButton
"caption",                            HtmlName::kCaption
"charset",                            HtmlName::kCharset
"checked",                            HtmlName::kChecked
"cite",                               HtmlName::kCite
"class",                              HtmlName::kClass
"code",                               HtmlName::kCode
"col",                                HtmlName::kCol
"colgroup",                           HtmlName::kColgroup
"colspan",                            HtmlName::kColspan
"command",                            HtmlName::kCommand
"content",                            HtmlName::kContent
"controls",                           HtmlName::kControls
"data",                               HtmlName::kData
"datalist",                           HtmlName::kDatalist
"data-actual-height",                 HtmlName::kDataActualHeight
"data-actual-width",                  HtmlName::kDataActualWidth
"data-mobile-role",                   HtmlName::kDataMobileRole
"data-pagespeed-flush-style",         HtmlName::kDataPagespeedFlushStyle
"data-pagespeed-high-res-src",        HtmlName::kDataPagespeedHighResSrc
"data-pagespeed-high-res-srcset",     HtmlName::kDataPagespeedHighResSrcset
"data-pagespeed-href",                HtmlName::kDataPagespeedHref
"data-pagespeed-inline-src",          HtmlName::kDataPagespeedInlineSrc
"data-pagespeed-lazy-src",            HtmlName::kDataPagespeedLazySrc
"data-pagespeed-lazy-srcset",         HtmlName::kDataPagespeedLazySrcset
"data-pagespeed-low-res-src",         HtmlName::kDataPagespeedLowResSrc
"data-pagespeed-lsc-expiry",          HtmlName::kDataPagespeedLscExpiry
"data-pagespeed-lsc-hash",            HtmlName::kDataPagespeedLscHash
"data-pagespeed-lsc-url",             HtmlName::kDataPagespeedLscUrl
"data-pagespeed-no-defer",            HtmlName::kDataPagespeedNoDefer
"data-pagespeed-no-transform",        HtmlName::kDataPagespeedNoTransform
"data-pagespeed-orig-src",            HtmlName::kDataPagespeedOrigSrc
"data-pagespeed-orig-type",           HtmlName::kDataPagespeedOrigType
"data-pagespeed-prioritize",          HtmlName::kDataPagespeedPrioritize
"data-pagespeed-responsive-temp",     HtmlName::kDataPagespeedResponsiveTemp
"data-pagespeed-size",                HtmlName::kDataPagespeedSize
"data-pagespeed-url-hash",            HtmlName::kDataPagespeedUrlHash
"data-src",                           HtmlName::kDataSrc
"dd",                                 HtmlName::kDd
"declare",                            HtmlName::kDeclare
"defaultchecked",                     HtmlName::kDefaultchecked
"defaultselected",                    HtmlName::kDefaultselected
"defer",                              HtmlName::kDefer
"del",                                HtmlName::kDel
"details",                            HtmlName::kDetails
"dfn",                                HtmlName::kDfn
"dir",                                HtmlName::kDir
"disabled",                           HtmlName::kDisabled
"display",                            HtmlName::kDisplay
"div",                                HtmlName::kDiv
"dl",                                 HtmlName::kDl
"dt",                                 HtmlName::kDt
"em",                                 HtmlName::kEm
"embed",                              HtmlName::kEmbed
"enctype",                            HtmlName::kEnctype
"event",                              HtmlName::kEvent
"fieldset",                           HtmlName::kFieldset
"font",                               HtmlName::kFont
"footer",                             HtmlName::kFooter
"for",                                HtmlName::kFor
"form",                               HtmlName::kForm
"formaction",                         HtmlName::kFormaction
"formnovalidate",                     HtmlName::kFormnovalidate
"frame",                              HtmlName::kFrame
"frameborder",                        HtmlName::kFrameborder
"h1",                                 HtmlName::kH1
"h2",                                 HtmlName::kH2
"h3",                                 HtmlName::kH3
"h4",                                 HtmlName::kH4
"h5",                                 HtmlName::kH5
"h6",                                 HtmlName::kH6
"head",                               HtmlName::kHead
"header",                             HtmlName::kHeader
"height",                             HtmlName::kHeight
"hgroup",                             HtmlName::kHgroup
"hr",                                 HtmlName::kHr
"href",                               HtmlName::kHref
"html",                               HtmlName::kHtml
"http-equiv",                         HtmlName::kHttpEquiv
"i",                                  HtmlName::kI
"icon",                               HtmlName::kIcon
"id",                                 HtmlName::kId
"iframe",                             HtmlName::kIframe
"img",                                HtmlName::kImg
"indeterminate",                      HtmlName::kIndeterminate
"ins",                                HtmlName::kIns
"input",                              HtmlName::kInput
"ismap",                              HtmlName::kIsmap
"itemprop",                           HtmlName::kItemProp
"kbd",                                HtmlName::kKbd
"keygen",                             HtmlName::kKeygen
"keytype",                            HtmlName::kKeytype
"lang",                               HtmlName::kLang
"language",                           HtmlName::kLanguage
"legend",                             HtmlName::kLegend
"li",                                 HtmlName::kLi
"link",                               HtmlName::kLink
"longdesc",                           HtmlName::kLongdesc
"loop",                               HtmlName::kLoop
"main",                               HtmlName::kMain
"manifest",                           HtmlName::kManifest
"map",                                HtmlName::kMap
"mark",                               HtmlName::kMark
"marquee",                            HtmlName::kMarquee
"media",                              HtmlName::kMedia
"menu",                               HtmlName::kMenu
"meta",                               HtmlName::kMeta
"method",                             HtmlName::kMethod
"multiple",                           HtmlName::kMultiple
"muted",                              HtmlName::kMuted
"name",                               HtmlName::kName
"nav",                                HtmlName::kNav
"noembed",                            HtmlName::kNoembed
"noframes",                           HtmlName::kNoframes
"nohref",                             HtmlName::kNohref
"noresize",                           HtmlName::kNoresize
"noscript",                           HtmlName::kNoscript
"novalidate",                         HtmlName::kNovalidate
"object",                             HtmlName::kObject
"ol",                                 HtmlName::kOl
"onclick",                            HtmlName::kOnclick
"onerror",                            HtmlName::kOnerror
"onload",                             HtmlName::kOnload
"open",                               HtmlName::kOpen
"optgroup",                           HtmlName::kOptgroup
"option",                             HtmlName::kOption
"orig_index",                         HtmlName::kOrigIndex
"other",                              HtmlName::kOther
"p",                                  HtmlName::kP
"pagespeed_iframe",                   HtmlName::kPagespeedIframe
"pagespeed_no_defer",                 HtmlName::kPagespeedNoDefer
"pagespeed_no_transform",             HtmlName::kPagespeedNoTransform
"param",                              HtmlName::kParam
"poster",                             HtmlName::kPoster
"pre",                                HtmlName::kPre
"profile",                            HtmlName::kProfile
"q",                                  HtmlName::kQ
"readonly",                           HtmlName::kReadonly
"rel",                                HtmlName::kRel
"required",                           HtmlName::kRequired
"reversed",                           HtmlName::kReversed
"role",                               HtmlName::kRole
"rowspan",                            HtmlName::kRowspan
"rp",                                 HtmlName::kRp
"rt",                                 HtmlName::kRt
"ruby",                               HtmlName::kRuby
"s",                                  HtmlName::kS
"samp",                               HtmlName::kSamp
"scoped",                             HtmlName::kScoped
"script",                             HtmlName::kScript
"scrolling",                          HtmlName::kScrolling
"seamless",                           HtmlName::kSeamless
"section",                            HtmlName::kSection
"select",                             HtmlName::kSelect
"selected",                           HtmlName::kSelected
"shape",                              HtmlName::kShape
"small",                              HtmlName::kSmall
"source",                             HtmlName::kSource
"span",                               HtmlName::kSpan
"src",                                HtmlName::kSrc
"srcset",                             HtmlName::kSrcset
"strong",                             HtmlName::kStrong
"style",                              HtmlName::kStyle
"sub",                                HtmlName::kSub
"table",                              HtmlName::kTable
"tag",                                HtmlName::kTag
"tbody",                              HtmlName::kTbody
"td",                                 HtmlName::kTd
"test",                               HtmlName::kTest
"textarea",                           HtmlName::kTextarea
"tfoot",                              HtmlName::kTfoot
"th",                                 HtmlName::kTh
"thead",                              HtmlName::kThead
"time",                               HtmlName::kTime
"title",                              HtmlName::kTitle
"tr",                                 HtmlName::kTr
"track",                              HtmlName::kTrack
"type",                               HtmlName::kType
"u",                                  HtmlName::kU
"ul",                                 HtmlName::kUl
"value",                              HtmlName::kValue
"valuetype",                          HtmlName::kValuetype
"var",                                HtmlName::kVar
"video",                              HtmlName::kVideo
"wbr",                                HtmlName::kWbr
"width",                              HtmlName::kWidth
"wrap",                               HtmlName::kWrap
"xmp",                                HtmlName::kXmp
%%

HtmlName::Keyword HtmlName::Lookup(const StringPiece& keyword) {
  const KeywordMap* keyword_map = KeywordMapper::Lookup(keyword.data(),
                                                        keyword.size());
  if (keyword_map != NULL) {
    return keyword_map->keyword;
  }
  return HtmlName::kNotAKeyword;
}

bool HtmlName::Iterator::AtEnd() const {
  return index_ > MAX_HASH_VALUE;
}

void HtmlName::Iterator::Next() {
  DCHECK(!AtEnd());
  ++index_;
  while (!AtEnd() && (*(kHtmlNameTable[index_].name) == '\0')) {
    ++index_;
  }
}

const char* HtmlName::Iterator::name() const {
  DCHECK(!AtEnd());
  return kHtmlNameTable[index_].name;
}

HtmlName::Keyword HtmlName::Iterator::keyword() const {
  DCHECK(!AtEnd());
  return kHtmlNameTable[index_].keyword;
}

int HtmlName::num_keywords() {
  return TOTAL_KEYWORDS;
}

}  // namespace net_instaweb
