%{
// 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::kCachePartialHtml
"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_spdy",                   RewriteOptions::kExperimentSpdy
"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
"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_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
