Sha256: 824ce269e907145cf1a6701ad8b317a64978c1fd7f68d469c0b05768ae837d87

Contents?: true

Size: 1.19 KB

Versions: 22

Compression:

Stored size: 1.19 KB

Contents

#include "tagfilter.h"
#include <parser.h>

static const char *blacklist[] = {
    "title",   "textarea", "style",  "xmp",       "iframe",
    "noembed", "noframes", "script", "plaintext", NULL,
};

static int is_tag(const unsigned char *tag_data, size_t tag_size,
                  const char *tagname) {
  size_t i;

  if (tag_size < 3 || tag_data[0] != '<')
    return 0;

  i = 1;

  if (tag_data[i] == '/') {
    i++;
  }

  for (; i < tag_size; ++i, ++tagname) {
    if (*tagname == 0)
      break;

    if (tag_data[i] != *tagname)
      return 0;
  }

  if (i == tag_size)
    return 0;

  if (cmark_isspace(tag_data[i]) || tag_data[i] == '>')
    return 1;

  if (tag_data[i] == '/' && tag_size >= i + 2 && tag_data[i + 1] == '>')
    return 1;

  return 0;
}

static int filter(cmark_syntax_extension *ext, const unsigned char *tag,
                  size_t tag_len) {
  const char **it;

  for (it = blacklist; *it; ++it) {
    if (is_tag(tag, tag_len, *it)) {
      return 0;
    }
  }

  return 1;
}

cmark_syntax_extension *create_tagfilter_extension(void) {
  cmark_syntax_extension *ext = cmark_syntax_extension_new("tagfilter");
  cmark_syntax_extension_set_html_filter_func(ext, filter);
  return ext;
}

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
commonmarker-0.16.5 ext/commonmarker/cmark/extensions/tagfilter.c
commonmarker-0.16.4 ext/commonmarker/cmark/extensions/tagfilter.c
commonmarker-0.16.1 ext/commonmarker/cmark/extensions/tagfilter.c
commonmarker-0.16.2 ext/commonmarker/cmark/extensions/tagfilter.c
commonmarker-0.16.3 ext/commonmarker/cmark/extensions/tagfilter.c
commonmarker-0.16.0 ext/commonmarker/cmark/extensions/tagfilter.c
commonmarker-0.15.0 ext/commonmarker/cmark/extensions/tagfilter.c
commonmarker-0.14.15 ext/commonmarker/cmark/extensions/tagfilter.c
commonmarker-0.14.14 ext/commonmarker/cmark/extensions/tagfilter.c
commonmarker-0.14.13 ext/commonmarker/cmark/extensions/tagfilter.c
commonmarker-0.14.12 ext/commonmarker/cmark/extensions/tagfilter.c
commonmarker-0.14.11 ext/commonmarker/cmark/extensions/tagfilter.c
commonmarker-0.14.9 ext/commonmarker/cmark/extensions/tagfilter.c
commonmarker-0.14.8 ext/commonmarker/cmark/extensions/tagfilter.c
commonmarker-0.14.7 ext/commonmarker/cmark/extensions/tagfilter.c
commonmarker-0.14.6 ext/commonmarker/cmark/extensions/tagfilter.c
commonmarker-0.14.5 ext/commonmarker/cmark/extensions/tagfilter.c
commonmarker-0.14.4 ext/commonmarker/cmark/extensions/tagfilter.c
commonmarker-0.14.3 ext/commonmarker/cmark/extensions/tagfilter.c
commonmarker-0.14.2 ext/commonmarker/cmark/extensions/tagfilter.c