sparklemotion/nokogiri

View on GitHub
gumbo-parser/src/tag_lookup.c

Summary

Maintainability
Test Coverage
/* ANSI-C code produced by gperf version 3.1 */
/* Command-line: gperf -m100 src/tag_lookup.gperf  */
/* Computed positions: -k'1-2,$' */
/* Filtered by: gperf-filter.sed */

#include "tag_lookup.h"
#include "macros.h"
#include "ascii.h"
#include <string.h>

#define TOTAL_KEYWORDS 151
#define MIN_WORD_LENGTH 1
#define MAX_WORD_LENGTH 14
#define MIN_HASH_VALUE 9
#define MAX_HASH_VALUE 271
/* maximum key range = 263, duplicates = 0 */



static inline unsigned int
hash (register const char *str, register size_t len)
{
  static const unsigned short asso_values[] =
    {
      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
      272, 272, 272, 272, 272, 272, 272, 272, 272,  11,
        7,   6,   4,   4,   3,   4,   3,   3, 272, 272,
      272, 272, 272, 272, 272,  70,  83, 152,   7,  16,
       61,  98,   5,  76, 102, 126,  12,  19,  54,  54,
       31,  97,   3,   4,   9,  33, 136, 113,  86,  15,
      272, 272, 272, 272, 272, 272, 272,  70,  83, 152,
        7,  16,  61,  98,   5,  76, 102, 126,  12,  19,
       54,  54,  31,  97,   3,   4,   9,  33, 136, 113,
       86,  15, 272, 272, 272, 272, 272, 272, 272, 272,
      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
      272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
      272, 272, 272, 272, 272, 272, 272, 272, 272
    };
  register unsigned int hval = len;

  switch (hval)
    {
      default:
        hval += asso_values[(unsigned char)str[1]+3];
      /*FALLTHROUGH*/
      case 1:
        hval += asso_values[(unsigned char)str[0]];
        break;
    }
  return hval + asso_values[(unsigned char)str[len - 1]];
}

const TagHashSlot *
gumbo_tag_lookup (register const char *str, register size_t len)
{
  static const unsigned char lengthtable[] =
    {
       0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  2,
       2,  2,  2,  6,  2,  6,  6,  4,  2,  7,  6,  3,  0,  3,
       0,  6,  6,  8,  5,  0,  0,  4,  5,  5,  8,  0,  2,  4,
       5,  2,  0,  5,  4,  2,  0,  7,  0,  8,  5,  0,  0,  0,
       0,  0,  0,  5,  3,  4,  5,  1,  4,  0,  4,  1,  2,  8,
       7,  7,  6,  6,  8,  2,  8,  4,  2,  0,  6,  0,  0,  3,
       4,  6, 13,  4,  4,  6,  8,  0,  8,  4,  0,  6,  0,  8,
       4,  5,  0,  2,  2,  9,  2,  4,  0,  8,  4,  2,  4,  8,
       7,  0,  2,  5,  2,  0,  6,  0,  3,  2,  2,  6,  3,  8,
       7,  2,  5,  7,  0,  2,  6,  2,  4,  3,  0, 10,  5,  6,
       3,  1,  2,  0,  6,  0,  5,  5,  0,  3,  0,  3,  3,  1,
       4,  6,  4,  7,  3,  0,  0,  2, 10, 10,  0,  0,  6,  1,
       4,  6,  3,  0,  2,  5,  6,  4,  3,  4,  0,  7,  3,  0,
       0,  0,  4,  0,  0,  5,  0,  0,  0,  6,  0, 14,  8,  1,
       3,  0,  0,  7,  3,  0,  0,  0,  0,  0,  0,  5,  3,  0,
       0,  0,  0,  0,  0,  5,  0,  0,  0,  0,  7,  6,  0,  0,
       0,  0,  0,  5,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,
       3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
       0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  0,
       0,  0,  5,  0,  0,  3
    };
  static const TagHashSlot wordlist[] =
    {
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"s", GUMBO_TAG_S},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"h6", GUMBO_TAG_H6},
      {"h5", GUMBO_TAG_H5},
      {"h4", GUMBO_TAG_H4},
      {"h3", GUMBO_TAG_H3},
      {"spacer", GUMBO_TAG_SPACER},
      {"h2", GUMBO_TAG_H2},
      {"header", GUMBO_TAG_HEADER},
      {"search", GUMBO_TAG_SEARCH},
      {"head", GUMBO_TAG_HEAD},
      {"h1", GUMBO_TAG_H1},
      {"details", GUMBO_TAG_DETAILS},
      {"select", GUMBO_TAG_SELECT},
      {"dir", GUMBO_TAG_DIR},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"del", GUMBO_TAG_DEL},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"source", GUMBO_TAG_SOURCE},
      {"legend", GUMBO_TAG_LEGEND},
      {"datalist", GUMBO_TAG_DATALIST},
      {"meter", GUMBO_TAG_METER},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"math", GUMBO_TAG_MATH},
      {"label", GUMBO_TAG_LABEL},
      {"table", GUMBO_TAG_TABLE},
      {"template", GUMBO_TAG_TEMPLATE},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"rp", GUMBO_TAG_RP},
      {"time", GUMBO_TAG_TIME},
      {"title", GUMBO_TAG_TITLE},
      {"hr", GUMBO_TAG_HR},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"tbody", GUMBO_TAG_TBODY},
      {"samp", GUMBO_TAG_SAMP},
      {"tr", GUMBO_TAG_TR},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"marquee", GUMBO_TAG_MARQUEE},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"menuitem", GUMBO_TAG_MENUITEM},
      {"small", GUMBO_TAG_SMALL},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"embed", GUMBO_TAG_EMBED},
      {"map", GUMBO_TAG_MAP},
      {"menu", GUMBO_TAG_MENU},
      {"param", GUMBO_TAG_PARAM},
      {"p", GUMBO_TAG_P},
      {"nobr", GUMBO_TAG_NOBR},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"span", GUMBO_TAG_SPAN},
      {"u", GUMBO_TAG_U},
      {"em", GUMBO_TAG_EM},
      {"noframes", GUMBO_TAG_NOFRAMES},
      {"section", GUMBO_TAG_SECTION},
      {"noembed", GUMBO_TAG_NOEMBED},
      {"nextid", GUMBO_TAG_NEXTID},
      {"footer", GUMBO_TAG_FOOTER},
      {"noscript", GUMBO_TAG_NOSCRIPT},
      {"dl", GUMBO_TAG_DL},
      {"progress", GUMBO_TAG_PROGRESS},
      {"font", GUMBO_TAG_FONT},
      {"mo", GUMBO_TAG_MO},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"script", GUMBO_TAG_SCRIPT},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"pre", GUMBO_TAG_PRE},
      {"main", GUMBO_TAG_MAIN},
      {"object", GUMBO_TAG_OBJECT},
      {"foreignobject", GUMBO_TAG_FOREIGNOBJECT},
      {"form", GUMBO_TAG_FORM},
      {"data", GUMBO_TAG_DATA},
      {"applet", GUMBO_TAG_APPLET},
      {"fieldset", GUMBO_TAG_FIELDSET},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"textarea", GUMBO_TAG_TEXTAREA},
      {"abbr", GUMBO_TAG_ABBR},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"figure", GUMBO_TAG_FIGURE},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"optgroup", GUMBO_TAG_OPTGROUP},
      {"meta", GUMBO_TAG_META},
      {"tfoot", GUMBO_TAG_TFOOT},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"ul", GUMBO_TAG_UL},
      {"li", GUMBO_TAG_LI},
      {"plaintext", GUMBO_TAG_PLAINTEXT},
      {"rb", GUMBO_TAG_RB},
      {"body", GUMBO_TAG_BODY},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"basefont", GUMBO_TAG_BASEFONT},
      {"ruby", GUMBO_TAG_RUBY},
      {"mi", GUMBO_TAG_MI},
      {"base", GUMBO_TAG_BASE},
      {"frameset", GUMBO_TAG_FRAMESET},
      {"summary", GUMBO_TAG_SUMMARY},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"dd", GUMBO_TAG_DD},
      {"frame", GUMBO_TAG_FRAME},
      {"td", GUMBO_TAG_TD},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"option", GUMBO_TAG_OPTION},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"svg", GUMBO_TAG_SVG},
      {"br", GUMBO_TAG_BR},
      {"ol", GUMBO_TAG_OL},
      {"dialog", GUMBO_TAG_DIALOG},
      {"sup", GUMBO_TAG_SUP},
      {"multicol", GUMBO_TAG_MULTICOL},
      {"article", GUMBO_TAG_ARTICLE},
      {"rt", GUMBO_TAG_RT},
      {"image", GUMBO_TAG_IMAGE},
      {"listing", GUMBO_TAG_LISTING},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"dt", GUMBO_TAG_DT},
      {"mglyph", GUMBO_TAG_MGLYPH},
      {"tt", GUMBO_TAG_TT},
      {"html", GUMBO_TAG_HTML},
      {"wbr", GUMBO_TAG_WBR},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"figcaption", GUMBO_TAG_FIGCAPTION},
      {"style", GUMBO_TAG_STYLE},
      {"strike", GUMBO_TAG_STRIKE},
      {"dfn", GUMBO_TAG_DFN},
      {"a", GUMBO_TAG_A},
      {"th", GUMBO_TAG_TH},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"hgroup", GUMBO_TAG_HGROUP},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"mtext", GUMBO_TAG_MTEXT},
      {"thead", GUMBO_TAG_THEAD},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"var", GUMBO_TAG_VAR},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"xmp", GUMBO_TAG_XMP},
      {"kbd", GUMBO_TAG_KBD},
      {"i", GUMBO_TAG_I},
      {"link", GUMBO_TAG_LINK},
      {"output", GUMBO_TAG_OUTPUT},
      {"mark", GUMBO_TAG_MARK},
      {"acronym", GUMBO_TAG_ACRONYM},
      {"div", GUMBO_TAG_DIV},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"ms", GUMBO_TAG_MS},
      {"malignmark", GUMBO_TAG_MALIGNMARK},
      {"blockquote", GUMBO_TAG_BLOCKQUOTE},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"center", GUMBO_TAG_CENTER},
      {"b", GUMBO_TAG_B},
      {"desc", GUMBO_TAG_DESC},
      {"canvas", GUMBO_TAG_CANVAS},
      {"col", GUMBO_TAG_COL},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"mn", GUMBO_TAG_MN},
      {"track", GUMBO_TAG_TRACK},
      {"iframe", GUMBO_TAG_IFRAME},
      {"code", GUMBO_TAG_CODE},
      {"sub", GUMBO_TAG_SUB},
      {"area", GUMBO_TAG_AREA},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"address", GUMBO_TAG_ADDRESS},
      {"ins", GUMBO_TAG_INS},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"cite", GUMBO_TAG_CITE},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"input", GUMBO_TAG_INPUT},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"keygen", GUMBO_TAG_KEYGEN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"annotation-xml", GUMBO_TAG_ANNOTATION_XML},
      {"colgroup", GUMBO_TAG_COLGROUP},
      {"q", GUMBO_TAG_Q},
      {"big", GUMBO_TAG_BIG},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"bgsound", GUMBO_TAG_BGSOUND},
      {"nav", GUMBO_TAG_NAV},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"video", GUMBO_TAG_VIDEO},
      {"img", GUMBO_TAG_IMG},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"audio", GUMBO_TAG_AUDIO},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"caption", GUMBO_TAG_CAPTION},
      {"strong", GUMBO_TAG_STRONG},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"aside", GUMBO_TAG_ASIDE},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"button", GUMBO_TAG_BUTTON},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"bdo", GUMBO_TAG_BDO},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"bdi", GUMBO_TAG_BDI},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"blink", GUMBO_TAG_BLINK},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {(char*)0,GUMBO_TAG_UNKNOWN},
      {"rtc", GUMBO_TAG_RTC}
    };

  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
    {
      register unsigned int key = hash (str, len);

      if (key <= MAX_HASH_VALUE)
        if (len == lengthtable[key])
          {
            register const char *s = wordlist[key].key;

            if (s && (((unsigned char)*str ^ (unsigned char)*s) & ~32) == 0 && !gumbo_ascii_strncasecmp(str, s, len))
              return &wordlist[key];
          }
    }
  return 0;
}