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

#include "base/basictypes.h"
#include "net/instaweb/rewriter/public/rewrite_options.h"
#include "pagespeed/kernel/base/string_util.h"

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

struct FilterMap {
  const char* name;
  net_instaweb::RewriteOptions::Filter filter;
};
%%
# IMPORTANT: Do not add any internal filters (that would blow up if triggered
# from e.g. query params!) here.
"add_base_tag",                      RewriteOptions::kAddBaseTag
"add_head",                          RewriteOptions::kAddHead
"add_ids",                           RewriteOptions::kAddIds
"add_instrumentation",               RewriteOptions::kAddInstrumentation
"cache_partial_html",                RewriteOptions::kCachePartialHtmlDeprecated
"canonicalize_javascript_libraries", RewriteOptions::kCanonicalizeJavascriptLibraries
"collapse_whitespace",               RewriteOptions::kCollapseWhitespace
"combine_css",                       RewriteOptions::kCombineCss
"combine_javascript",                RewriteOptions::kCombineJavascript
"combine_heads",                     RewriteOptions::kCombineHeads
"compute_statistics",                RewriteOptions::kComputeStatistics
"compute_critical_css",              RewriteOptions::kComputeCriticalCss
"convert_gif_to_png",                RewriteOptions::kConvertGifToPng
"convert_jpeg_to_progressive",       RewriteOptions::kConvertJpegToProgressive
"convert_jpeg_to_webp",              RewriteOptions::kConvertJpegToWebp
"convert_meta_tags",                 RewriteOptions::kConvertMetaTags
"convert_png_to_jpeg",               RewriteOptions::kConvertPngToJpeg
"convert_to_webp_animated",          RewriteOptions::kConvertToWebpAnimated
"convert_to_webp_lossless",          RewriteOptions::kConvertToWebpLossless
"debug",                             RewriteOptions::kDebug
"decode_rewritten_urls",             RewriteOptions::kDecodeRewrittenUrls
"dedup_inlined_images",              RewriteOptions::kDedupInlinedImages
"defer_iframe",                      RewriteOptions::kDeferIframe
"defer_javascript",                  RewriteOptions::kDeferJavascript
"deterministic_js",                  RewriteOptions::kDeterministicJs
"disable_javascript",                RewriteOptions::kDisableJavascript
"div_structure",                     RewriteOptions::kDivStructure
"elide_attributes",                  RewriteOptions::kElideAttributes
"experiment_collect_mob_image_info", RewriteOptions::kExperimentCollectMobImageInfo
"experiment_http2",                  RewriteOptions::kExperimentHttp2
"explicit_close_tags",               RewriteOptions::kExplicitCloseTags
"extend_cache_css",                  RewriteOptions::kExtendCacheCss
"extend_cache_images",               RewriteOptions::kExtendCacheImages
"extend_cache_pdfs",                 RewriteOptions::kExtendCachePdfs
"extend_cache_scripts",              RewriteOptions::kExtendCacheScripts
"fallback_rewrite_css_urls",         RewriteOptions::kFallbackRewriteCssUrls
"fix_reflows",                       RewriteOptions::kFixReflows
"flatten_css_imports",               RewriteOptions::kFlattenCssImports
"flush_subresources",                RewriteOptions::kFlushSubresources
"hint_preload_subresources",         RewriteOptions::kHintPreloadSubresources
"in_place_optimize_for_browser",     RewriteOptions::kInPlaceOptimizeForBrowser
"include_js_source_maps",            RewriteOptions::kIncludeJsSourceMaps
"inline_css",                        RewriteOptions::kInlineCss
"inline_google_font_css",            RewriteOptions::kInlineGoogleFontCss
"inline_images",                     RewriteOptions::kInlineImages
"inline_import_to_link",             RewriteOptions::kInlineImportToLink
"inline_javascript",                 RewriteOptions::kInlineJavascript
"inline_preview_images",             RewriteOptions::kDelayImages
"insert_amp_link",                   RewriteOptions::kInsertAmpLink
"insert_dns_prefetch",               RewriteOptions::kInsertDnsPrefetch
"insert_ga",                         RewriteOptions::kInsertGA
"insert_img_dimensions",             RewriteOptions::kInsertImageDimensions
"insert_image_dimensions",           RewriteOptions::kInsertImageDimensions
"jpeg_subsampling",                  RewriteOptions::kJpegSubsampling
"lazyload_images",                   RewriteOptions::kLazyloadImages
"local_storage_cache",               RewriteOptions::kLocalStorageCache
"left_trim_urls",                    RewriteOptions::kLeftTrimUrls
"make_google_analytics_async",       RewriteOptions::kMakeGoogleAnalyticsAsync
"make_show_ads_async",               RewriteOptions::kMakeShowAdsAsync
"mobilize",                          RewriteOptions::kMobilize
"mobilize_precompute",               RewriteOptions::kMobilizePrecompute
"move_css_above_scripts",            RewriteOptions::kMoveCssAboveScripts
"move_css_to_head",                  RewriteOptions::kMoveCssToHead
"outline_css",                       RewriteOptions::kOutlineCss
"outline_javascript",                RewriteOptions::kOutlineJavascript
"pedantic",                          RewriteOptions::kPedantic
"prioritize_critical_css",           RewriteOptions::kPrioritizeCriticalCss
"recompress_jpeg",                   RewriteOptions::kRecompressJpeg
"recompress_png",                    RewriteOptions::kRecompressPng
"recompress_webp",                   RewriteOptions::kRecompressWebp
"remove_comments",                   RewriteOptions::kRemoveComments
"remove_quotes",                     RewriteOptions::kRemoveQuotes
"resize_images",                     RewriteOptions::kResizeImages
"resize_mobile_images",              RewriteOptions::kResizeMobileImages
"resize_rendered_image_dimensions",  RewriteOptions::kResizeToRenderedImageDimensions
"responsive_images",                 RewriteOptions::kResponsiveImages
"responsive_images_zoom",            RewriteOptions::kResponsiveImagesZoom
"rewrite_css",                       RewriteOptions::kRewriteCss
"rewrite_domains",                   RewriteOptions::kRewriteDomains
"rewrite_javascript_external",       RewriteOptions::kRewriteJavascriptExternal
"rewrite_javascript_inline",         RewriteOptions::kRewriteJavascriptInline
"rewrite_style_attributes",          RewriteOptions::kRewriteStyleAttributes
"rewrite_style_attributes_with_url", RewriteOptions::kRewriteStyleAttributesWithUrl
"split_html",                        RewriteOptions::kSplitHtml
"split_html_helper",                 RewriteOptions::kSplitHtmlHelper
"sprite_images",                     RewriteOptions::kSpriteImages
"strip_image_color_profile",         RewriteOptions::kStripImageColorProfile
"strip_image_meta_data",             RewriteOptions::kStripImageMetaData
"strip_scripts",                     RewriteOptions::kStripScripts
"trim_urls",                         RewriteOptions::kLeftTrimUrls
%%

RewriteOptions::Filter RewriteOptions::LookupFilter(
    const StringPiece& filter_name) {
  const FilterMap* entry = FilterMapper::Lookup(
      filter_name.data(), filter_name.size());
  if (entry != NULL) {
    return entry->filter;
  }
  return RewriteOptions::kEndOfFilters;
}

}  // namespace net_instaweb
