blob: 388c457e84bc6fb9cf7b6025a19cd0ed026b77bf [file] [log] [blame]
%{
// 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