All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ator-java.1.0.39.source-code.validator-all.protoascii Maven / Gradle / Ivy

There is a newer version: 1.0.42
Show newest version
# DEPRECATED: This value is no longer updated.
min_validator_revision_required: 475

# DEPRECATED: This value is no longer updated.
spec_file_revision: 1188

styles_spec_url: "https://amp.dev/documentation/guides-and-tutorials/develop/style_and_layout/style_pages/"
script_spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/validation-workflow/validation_errors/#custom-javascript-is-not-allowed"

# Validator extensions.
# =====================
# In addition to the rules in this file, the Validator honors the rules
# in the extensions/*/validator-*.protoascii files. This makes it
# easy to organize the rules for extensions next to their Javascript
# implementation.
# Please read how the rules in this file works:
# https://github.com/ampproject/amphtml/blob/fc447110e86db57e4391bf5c50de8dd2bf75e18f/docs/component-validator-rules.md

# Rules for AMP HTML
# https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml

doc: {
  html_format: AMP4EMAIL
  max_bytes: 200000
  max_bytes_spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/?format=email"
}

tags: {
  html_format: AMP
  html_format: AMP4EMAIL
  tag_name: "!DOCTYPE"
  spec_name: "html doctype"
  descriptive_name: "html !doctype"
  mandatory_parent: "$ROOT"
  mandatory: true
  unique: true
  explicit_attrs_only: true
  attrs: {
    name: "html"
    mandatory: true
    value: ""
  }
  # `lang` is not supported per spec but is allowed because it has been observed
  # on existing AMP documents.
  attrs: {
    name: "lang"
    deprecation: "html"
    deprecation_url: "https://github.com/ampproject/amphtml/issues/25926"
  }
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup"
}
# AMP4ADS may need time to transition  to using explicit attrs only.
# Tracking in b/123227526 to merge into tagspec with spec name "html doctype".
tags: {
  html_format: AMP4ADS
  tag_name: "!DOCTYPE"
  spec_name: "html doctype (AMP4ADS)"
  descriptive_name: "html !doctype"
  mandatory_parent: "$ROOT"
  mandatory: true
  unique: true
  attrs: {
    name: "html"
    mandatory: true
    value: ""
  }
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup"
}

# Below, we list the allowed elements in the order in which they are appear
# in the spec in section 4 "The Elements of HTML"
# (http://www.w3.org/TR/html5/single-page#html-elements).

# 4.1 The root element
# 4.1.1 The html element
tags: {  # HTML tag for non-transformed AMP.
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  disabled_by: "transformed"
  tag_name: "HTML"
  mandatory: true
  mandatory_parent: "!DOCTYPE"
  unique: true
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup"
}
tags: {  # HTML tag for transformed AMP.
  html_format: AMP
  enabled_by: "transformed"
  tag_name: "HTML"
  spec_name: "html (transformed)"
  mandatory: true
  mandatory_parent: "!DOCTYPE"
  unique: true
  attrs: {
    name: "i-amphtml-layout"
    value: ""
  }
  attrs: {
    name: "i-amphtml-no-boilerplate"
    value: ""
  }
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup"
}

# 4.2 Document metadata
# 4.2.1 The head element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "HEAD"
  mandatory: true
  mandatory_parent: "HTML"
  unique: true
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup"
}
# 4.2.2 The title element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "TITLE"
  spec_name: "title"
  attrs: { name: "[text]" }
}
tags: {
  html_format: AMP4EMAIL
  tag_name: "TITLE"
  spec_name: "title [AMP4EMAIL]"
  attrs: { name: "[text]" }
  deprecation: "Title tags in email have no meaning. This tag may become invalid in the future."
  deprecation_url: "https://github.com/ampproject/amphtml/issues/22318"
}

# 4.2.3 the base element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "BASE"
  unique: true
  mandatory_parent: "HEAD"
  # We only allow "/" right now because other value can cause havoc with PWA
  # implementations. In the future, it may be possible to widen this to any
  # absolute URL.
  attrs: {
    name: "href"
    value: "/"
  }
  attrs: {
    name: "target"
    value_casei: "_blank"
    value_casei: "_self"
    value_casei: "_top"
  }
}
# Disallowed.
# 4.2.4 the link element
attr_lists: {
  name: "common-link-attrs"
  attrs: { name: "charset" value_casei: "utf-8" }
  attrs: { name: "color" }
  attrs: { name: "crossorigin" }
  attrs: { name: "hreflang" }
  attrs: { name: "media" }
  attrs: { name: "sizes" }
  attrs: { name: "target" }
  attrs: { name: "type" }
}
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "LINK"
  spec_name: "link rel="
  disallowed_ancestor: "TEMPLATE"
  attrs: { name: "href" }
  attrs: {
    name: "rel"
    mandatory: true
    # There are a wide variety of link rel attribute values used in the wild as
    # this attribute is used as meta-data for any html client such as search
    # engines. Unfortunately, there are also a number of attribute values which
    # have behavioral impacts in modern browsers. A few places where these are
    # loosely documented include:
    # - http://microformats.org/wiki/existing-rel-values
    # - http://www.iana.org/assignments/link-relations/link-relations.xhtml
    # - https://html.spec.whatwg.org/#linkTypes
    # We denylist a few specific values which have browser behavior that could
    # negatively impact performance.
    # TODO(gregable): This could be improved such that the error message would
    # report which value in a list is the one causing problems.
    disallowed_value_regex: "(^|\\s)("  # Values are space separated.
        "canonical|"  # Handled separately below, has specific requirements.
        "components|"
        "import|"
        "manifest|"  # Handled separately below, has specific requirements.
        "modulepreload|"  # Handled separately below, has specific requirements.
        "preload|"  # Handled separately below, has specific requirements.
        "serviceworker|"
        "stylesheet|"  # Handled separately below, has specific requirements.
        "subresource"
        ")(\\s|$)"
    # It is worth noting that user-authored tags for dns-prefectch, preconnect,
    # prefetch, and prerender will be disabled by the transformations applied
    # in the AMP Cache. Therefore, these hints will only be used on publisher
    # origins, not on the AMP Cache.
  }
  attr_lists: "common-link-attrs"
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags"
}
tags: {
  html_format: AMP
  tag_name: "LINK"
  spec_name: "link rel=canonical"
  descriptive_name: "link rel=canonical"
  mandatory_parent: "HEAD"
  mandatory: true
  unique: true
  attrs: {
    name: "href"
    mandatory: true
    value_url: {
      protocol: "http"
      protocol: "https"
    }
    disallowed_value_regex: "__amp_source_origin"
  }
  attrs: {
    name: "rel"
    value_casei: "canonical"
    mandatory: true
    dispatch_key: NAME_VALUE_DISPATCH
  }
  attr_lists: "common-link-attrs"
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup"
}
# Allow  but not 
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "LINK"
  spec_name: "link rel=manifest"
  descriptive_name: "link rel=manifest"
  mandatory_parent: "HEAD"
  satisfies_condition: "amp-app-banner data source"
  attrs: {
    name: "href"
    mandatory: true
    value_url: {
      protocol: "https"
    }
    disallowed_value_regex: "__amp_source_origin"
  }
  attrs: {
    name: "rel"
    value_casei: "manifest"
    mandatory: true
    dispatch_key: NAME_VALUE_DISPATCH
  }
  attr_lists: "common-link-attrs"
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags"
}
tags: {
  html_format: AMP
  tag_name: "LINK"
  spec_name: "link rel=modulepreload"
  descriptive_name: "link rel=modulepreload"
  mandatory_parent: "HEAD"
  attrs: {
    name: "as"
    mandatory: true
    value: "script"
  }
  attrs: {
    name: "crossorigin"
    mandatory: true
    value: "anonymous"
  }
  attrs: {
    name: "href"
    mandatory: true
    value_regex: ".*\\.mjs$"
  }
  attrs: {
    name: "rel"
    mandatory: true
    value_casei: "modulepreload"
    dispatch_key: NAME_VALUE_DISPATCH
  }
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags"
}
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "LINK"
  spec_name: "link rel=preload"
  descriptive_name: "link rel=preload"
  disallowed_ancestor: "TEMPLATE"
  attrs: { name: "as" }
  attrs: { name: "href" }
  attrs: {
    name: "rel"
    mandatory: true
    value_casei: "preload"
    dispatch_key: NAME_VALUE_DISPATCH
  }
  attrs: {
    name: "imagesrcset"
    value_url: {
      protocol: "http"
      protocol: "https"
    }
    disallowed_value_regex: "__amp_source_origin"
  }
  attrs: { name: "imagesizes" }
  attr_lists: "common-link-attrs"
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags"
}
# Allowlisted CSS provider
tags: {
  html_format: AMP
  enabled_by: "transformed"
  tag_name: "LINK"
  spec_name: "link rel=stylesheet for amp-story-1.0 css"
  descriptive_name: "link rel=stylesheet for amp-story-1.0 css"
  mandatory_parent: "HEAD"
  attr_lists: "nonce-attr"
  attrs: { name: "crossorigin" }  # SRI attribute (https://www.w3.org/TR/SRI/)
  attrs: {
    name: "href"
    mandatory: true
    value: "https://cdn.ampproject.org/v0/amp-story-1.0.css"
    value: "https://cdn.ampproject.org/lts/v0/amp-story-1.0.css"
    value: "https://ampjs.org/v0/amp-story-1.0.css"
    value: "https://ampjs.org/lts/v0/amp-story-1.0.css"
  }
  attrs: { name: "integrity" }  # SRI attribute (https://www.w3.org/TR/SRI/)
  attrs: { name: "media" }
  attrs: {
    name: "rel"
    mandatory: true
    value_casei: "stylesheet"
    dispatch_key: NAME_VALUE_DISPATCH
  }
  attrs: {
    name: "type"
    value_casei: "text/css"
  }
  attrs: {
    name: "amp-extension"
    mandatory: true
    value_casei: "amp-story"
  }
}
# Allowlisted font providers
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "LINK"
  spec_name: "link rel=stylesheet for fonts"
  descriptive_name: "link rel=stylesheet for fonts"
  named_id: LINK_FONT_STYLESHEET
  mandatory_parent: "HEAD"
  attr_lists: "nonce-attr"
  attrs: { name: "async" }
  attrs: { name: "crossorigin" }  # SRI attribute (https://www.w3.org/TR/SRI/)
  attrs: {
    name: "href"
    mandatory: true
    value_regex: "https://cdn\\.materialdesignicons\\.com/"
                 "([0-9]+\\.?)+/css/materialdesignicons\\.min\\.css|"
                 "https://cloud\\.typography\\.com/"
                 "[0-9]*/[0-9]*/css/fonts\\.css|"
                 "https://fast\\.fonts\\.net/.*|"
                 "https://fonts\\.googleapis\\.com/css2?\\?.*|"
                 "https://fonts\\.googleapis\\.com/icon\\?.*|"
                 "https://fonts\\.googleapis\\.com/earlyaccess/.*\\.css|"
                 "https://maxcdn\\.bootstrapcdn\\.com/font-awesome/"
                 "([0-9]+\\.?)+/css/font-awesome\\.min\\.css(\\?.*)?|"
                 "https://(use|pro|kit)\\.fontawesome\\.com/releases/v([0-9]+\\.?)+"
                 "/css/[0-9a-zA-Z-]+\\.css|"
                 "https://(use|pro|kit)\\.fontawesome\\.com/[0-9a-zA-Z-]+\\.css|"
                 "https://use\\.typekit\\.net/[\\w\\p{L}\\p{N}_]+\\.css"
  }
  attrs: { name: "integrity" }  # SRI attribute (https://www.w3.org/TR/SRI/)
  attrs: { name: "media" }
  attrs: {
    name: "rel"
    mandatory: true
    value_casei: "stylesheet"
    dispatch_key: NAME_VALUE_DISPATCH
  }
  attrs: {
    name: "type"
    value_casei: "text/css"
  }
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#custom-fonts"
}
# itemprop=sameAs is allowed per schema.org, needs not be in head
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "LINK"
  spec_name: "link itemprop=sameAs"
  descriptive_name: "link itemprop=sameAs"
  attrs: {
    name: "href"
    mandatory: true
  }
  attrs: {
    name: "itemprop"
    mandatory: true
    value_casei: "sameas"
    dispatch_key: NAME_VALUE_DISPATCH
  }
  attr_lists: "common-link-attrs"
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags"
}
# rel= isn't mandatory when itemprop= is present.
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "LINK"
  spec_name: "link itemprop="
  descriptive_name: "link itemprop="
  attrs: {
    name: "href"
    mandatory: true
  }
  attrs: {
    name: "itemprop"
    mandatory: true
  }
  attr_lists: "common-link-attrs"
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags"
}
# rel= isn't mandatory when property= is present.
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "LINK"
  spec_name: "link property="
  descriptive_name: "link property="
  attrs: {
    name: "href"
    mandatory: true
  }
  attrs: {
    name: "property"
    mandatory: true
  }
  attr_lists: "common-link-attrs"
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags"
}
# 4.2.5 the meta element
# Charset must be utf8, and a specific viewport is required.
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "META"
  spec_name: "meta charset=utf-8"
  descriptive_name: "meta charset=utf-8"
  mandatory: true
  mandatory_parent: "HEAD"
  unique: true
  attrs: {
    dispatch_key: NAME_DISPATCH
    name: "charset"
    mandatory: true
    value_casei: "utf-8"
  }
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup"
}
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "META"
  spec_name: "meta name=viewport"
  descriptive_name: "meta name=viewport"
  mandatory: true
  mandatory_parent: "HEAD"
  unique: true
  attrs: {
    name: "content"
    mandatory: true
    value_properties: {
      properties: { name: "width" mandatory: true value: "device-width" }
      properties: { name: "height" }
      properties: { name: "initial-scale" }
      properties: { name: "minimum-scale" }
      properties: { name: "maximum-scale" }
      properties: { name: "shrink-to-fit" }
      properties: { name: "user-scalable" }
      properties: { name: "viewport-fit" }
    }
  }
  attrs: {
    name: "name"
    mandatory: true
    value: "viewport"
    dispatch_key: NAME_VALUE_DISPATCH
  }
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup"
}
# This tag is a hack to tell IE 10 to use its modern rendering engine as opposed
# to the IE8 engine. So it's explicitly allowed.
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "META"
  spec_name: "meta http-equiv=X-UA-Compatible"
  descriptive_name: "meta http-equiv=X-UA-Compatible"
  mandatory_ancestor: "HEAD"
  attrs: {
    name: "content"
    mandatory: true
    value_properties: {
      properties: { name: "ie" value: "edge" }
      properties: { name: "chrome" value: "1" }
    }
  }
  attrs: {
    name: "http-equiv"
    mandatory: true
    value_casei: "x-ua-compatible"
    dispatch_key: NAME_VALUE_DISPATCH
  }
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags"
}
# Tag specific to apple-itunes-app installs, see also .
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "META"
  spec_name: "meta name=apple-itunes-app"
  mandatory_parent: "HEAD"
  satisfies_condition: "amp-app-banner data source"
  attrs: {
    name: "content"
    mandatory: true
    value_regex: ".*app-id=.*"
  }
  attrs: {
    name: "name"
    value_casei: "apple-itunes-app"
    mandatory: true
    dispatch_key: NAME_VALUE_DISPATCH
  }

  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags"
}
# AMP & AMP4ADS metadata, name=amp-experiments-opt-in
# https://github.com/ampproject/amphtml/blob/main/tools/experiments/README.md
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "META"
  spec_name: "meta name=amp-experiments-opt-in"
  mandatory_parent: "HEAD"
  attrs: {
    name: "content"
    mandatory: true
  }
  attrs: {
    name: "name"
    mandatory: true
    value_casei: "amp-experiments-opt-in"
    dispatch_key: NAME_VALUE_DISPATCH
  }
}
# AMP metadata, name=amp-3p-iframe-src
tags: {
  html_format: AMP
  tag_name: "META"
  spec_name: "meta name=amp-3p-iframe-src"
  mandatory_parent: "HEAD"
  attrs: {
    name: "content"
    mandatory: true
    value_url: {
      protocol: "https"
    }
  }
  attrs: {
    name: "name"
    mandatory: true
    value_casei: "amp-3p-iframe-src"
    dispatch_key: NAME_VALUE_DISPATCH
  }
  spec_url: "https://amp.dev/documentation/components/amp-ad/"
}
# AMP metadata, name=amp-consent-blocking
tags: {
  html_format: AMP
  tag_name: "META"
  spec_name: "meta name=amp-consent-blocking"
  mandatory_parent: "HEAD"
  satisfies_condition: "meta name=amp-consent-blocking"
  unique: true
  attrs: {
    name: "content"
    mandatory: true
  }
  attrs: {
    name: "name"
    mandatory: true
    value_casei: "amp-consent-blocking"
    dispatch_key: NAME_VALUE_DISPATCH
  }
}
# AMP metadata, name=amp-experiment-token
# Related to AMP Origin Experiments
tags: {
  html_format: AMP
  tag_name: "META"
  spec_name: "meta name=amp-experiment-token"
  mandatory_parent: "HEAD"
  attrs: {
    name: "content"
    mandatory: true
  }
  attrs: {
    name: "name"
    mandatory: true
    value_casei: "amp-experiment-token"
    dispatch_key: NAME_VALUE_DISPATCH
  }
  # Disabled because there are no active origin experiments; uncomment when
  # there is at least one corresponding `requires` clause.
  # satisfies_condition: "amp-experiment-token"
}
# AMP metadata, name=amp-link-variable-allowed-origin
# https://github.com/ampproject/amphtml/issues/8132
tags: {
  html_format: AMP
  tag_name: "META"
  spec_name: "meta name=amp-link-variable-allowed-origin"
  mandatory_parent: "HEAD"
  attrs: {
    name: "content"
    mandatory: true
  }
  attrs: {
    name: "name"
    mandatory: true
    value_casei: "amp-link-variable-allowed-origin"
    dispatch_key: NAME_VALUE_DISPATCH
  }
}
# AMP metadata, name=amp-google-client-id-api
tags: {
  html_format: AMP
  tag_name: "META"
  spec_name: "meta name=amp-google-clientid-id-api"
  mandatory_parent: "HEAD"
  attrs: {
    name: "content"
    mandatory: true
  }
  attrs: {
    name: "name"
    mandatory: true
    value_casei: "amp-google-client-id-api"
    dispatch_key: NAME_VALUE_DISPATCH
  }
}
# AMP metadata, name=amp-ad-doubleclick-sra
# Enables SRA for amp-ad doubleclick Fast Fetch
tags: {
  html_format: AMP
  tag_name: "META"
  spec_name: "meta name=amp-ad-doubleclick-sra"
  mandatory_parent: "HEAD"
  attrs: {
    name: "name"
    mandatory: true
    value_casei: "amp-ad-doubleclick-sra"
    dispatch_key: NAME_VALUE_DISPATCH
  }
}
# AMP metadata, name=amp-list-load-more
tags: {
  html_format: AMP
  tag_name: "META"
  spec_name: "meta name=amp-list-load-more"
  mandatory_parent: "HEAD"
  attrs: {
    name: "content"
    mandatory: true
  }
  attrs: {
    name: "name"
    mandatory: true
    value_casei: "amp-list-load-more"
    dispatch_key: NAME_VALUE_DISPATCH
  }
}
# AMP metadata, name=amp-recaptcha-input
tags: {
  html_format: AMP
  tag_name: "META"
  spec_name: "meta name=amp-recaptcha-input"
  mandatory_parent: "HEAD"
  attrs: {
    name: "content"
    mandatory: true
  }
  attrs: {
    name: "name"
    mandatory: true
    value_casei: "amp-recaptcha-input"
    dispatch_key: NAME_VALUE_DISPATCH
  }
}
# AMP metadata, name=amp-script-src
tags: {
  html_format: AMP
  tag_name: "META"
  spec_name: "meta name=amp-script-src"
  mandatory_parent: "HEAD"
  attrs: {
    name: "content"
    mandatory: true
  }
  attrs: {
    name: "name"
    mandatory: true
    value_casei: "amp-script-src"
    dispatch_key: NAME_VALUE_DISPATCH
  }
}
# AMP4ADS metadata, name=amp4ads-id
# https://github.com/ampproject/amphtml/issues/7730
tags: {
  html_format: AMP4ADS
  tag_name: "META"
  spec_name: "meta name=amp4ads-id"
  mandatory_parent: "HEAD"
  attrs: {
    name: "content"
    mandatory: true
  }
  attrs: {
    name: "name"
    mandatory: true
    value_casei: "amp4ads-id"
    dispatch_key: NAME_VALUE_DISPATCH
  }
}
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "META"
  spec_name: "meta name= and content="
  attrs: { name: "content" }
  attrs: { name: "itemprop" }  # itemprop is non-standard, but commonly seen.
  # The validator accepts any name="..." attribute values except
  # for a few specific name values which have more specific rules above or
  # are altogether disallowed.
  attrs: {
    name: "name"
    disallowed_value_regex: "(^|\\s)("
        "amp-.*|"
        "amp4ads-.*|"
        "apple-itunes-app|"
        "content-disposition|"
        "revisit-after|"
        "viewport"
        ")(\\s|$)"
  }
  attrs: { name: "media" } # For varying theme-color.
  attrs: { name: "property" }  # property is non-standard, but commonly seen.
  # scheme is used by Dublin Core, see issue #13993
  attrs: { name: "scheme" }
}
# This is redundant with meta charset, but also harmless as long as it's
# set to utf-8.
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "META"
  spec_name: "meta http-equiv=Content-Type"
  mandatory_ancestor: "HEAD"
  attrs: {
    name: "content"
    mandatory: true
    value_casei: "text/html; charset=utf-8"
  }
  attrs: {
    name: "http-equiv"
    mandatory: true
    value_casei: "content-type"
    dispatch_key: NAME_VALUE_DISPATCH
  }
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags"
}
# http-equiv content-language tag
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "META"
  spec_name: "meta http-equiv=content-language"
  mandatory_ancestor: "HEAD"
  attrs: {
    name: "content"
    mandatory: true
  }
  attrs: {
    name: "http-equiv"
    mandatory: true
    value_casei: "content-language"
    dispatch_key: NAME_VALUE_DISPATCH
  }
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags"
}
# http-equiv pics-label tag
# https://www.w3.org/PICS/
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "META"
  spec_name: "meta http-equiv=pics-label"
  mandatory_ancestor: "HEAD"
  attrs: {
    name: "content"
    mandatory: true
  }
  attrs: {
    name: "http-equiv"
    mandatory: true
    value_casei: "pics-label"
    dispatch_key: NAME_VALUE_DISPATCH
  }
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags"
}
# http-equiv imagetoolbar tag
# https://msdn.microsoft.com/en-us/library/ms532986(v=vs.85).aspx
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "META"
  spec_name: "meta http-equiv=imagetoolbar"
  mandatory_ancestor: "HEAD"
  attrs: {
    name: "content"
    mandatory: true
  }
  attrs: {
    name: "http-equiv"
    mandatory: true
    value_casei: "imagetoolbar"
    dispatch_key: NAME_VALUE_DISPATCH
  }
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags"
}
# http-equiv content-style-type
# https://www.w3.org/TR/REC-html40/present/styles#h-14.2.1
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "META"
  spec_name: "meta http-equiv=Content-Style-Type"
  mandatory_ancestor: "HEAD"
  attrs: {
    name: "content"
    mandatory: true
    value_casei: "text/css"
  }
  attrs: {
    name: "http-equiv"
    mandatory: true
    value_casei: "content-style-type"
    dispatch_key: NAME_VALUE_DISPATCH
  }
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags"
}
# http-equiv content-script-type
# https://www.w3.org/TR/html4/interact/scripts#h-18.2.2.1
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "META"
  spec_name: "meta http-equiv=Content-Script-Type"
  mandatory_ancestor: "HEAD"
  attrs: {
    name: "content"
    mandatory: true
    value_casei: "text/javascript"
  }
  attrs: {
    name: "http-equiv"
    mandatory: true
    value_casei: "content-script-type"
    dispatch_key: NAME_VALUE_DISPATCH
  }
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags"
}
# http-equiv origin-trial tag
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "META"
  spec_name: "meta http-equiv=origin-trial"
  mandatory_ancestor: "HEAD"
  attrs: {
    name: "content"
    mandatory: true
  }
  attrs: {
    name: "http-equiv"
    mandatory: true
    value_casei: "origin-trial"
    dispatch_key: NAME_VALUE_DISPATCH
  }
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags"
}
# http-equiv resource-type
# http://www.metatags.info/meta_http_equiv_resource_type
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "META"
  spec_name: "meta http-equiv=resource-type"
  mandatory_ancestor: "HEAD"
  attrs: {
    name: "content"
    mandatory: true
  }
  attrs: {
    name: "http-equiv"
    mandatory: true
    value_casei: "resource-type"
    dispatch_key: NAME_VALUE_DISPATCH
  }
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags"
}
# http-equiv x-dns-prefetch-control
# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-DNS-Prefetch-Control
tags: {
  html_format: AMP
  tag_name: "META"
  spec_name: "meta http-equiv=x-dns-prefetch-control"
  mandatory_ancestor: "HEAD"
  attrs: {
    name: "content"
    mandatory: true
    value_casei: "off"
    value_casei: "on"
  }
  attrs: {
    name: "http-equiv"
    mandatory: true
    value_casei: "x-dns-prefetch-control"
    dispatch_key: NAME_VALUE_DISPATCH
  }
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags"
}
# AMP metadata, name=amp-ad-enable-refresh
# Enables Refresh for amp-ad doubleclick Fast Fetch
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "META"
  spec_name: "meta name=amp-ad-enable-refresh"
  mandatory_ancestor: "HEAD"
  attrs: {
    name: "content"
    mandatory: true
  }
  attrs: {
    name: "name"
    mandatory: true
    value_casei: "amp-ad-enable-refresh"
    dispatch_key: NAME_VALUE_DISPATCH
  }
}
# AMP metadata, name=amp-to-amp-navigation
# Enables AMP-to-AMP navigation
tags: {
  html_format: AMP
  tag_name: "META"
  spec_name: "meta name=amp-to-amp-navigation"
  mandatory_parent: "HEAD"
  unique: true
  attrs: {
    name: "content"
    mandatory: true
  }
  attrs: {
    name: "name"
    mandatory: true
    value_casei: "amp-to-amp-navigation"
    dispatch_key: NAME_VALUE_DISPATCH
  }
}
# AMP metadata, name=amp-cta-type
# Specifies the Single Page Story Ad call to action enum
tags: {
  html_format: AMP4ADS
  tag_name: "META"
  spec_name: "meta name=amp-cta-type"
  mandatory_parent: "HEAD"
  unique: true
  attrs: {
    name: "content"
    mandatory: true
  }
  attrs: {
    name: "name"
    mandatory: true
    value_casei: "amp-cta-type"
    dispatch_key: NAME_VALUE_DISPATCH
  }
}
# AMP metadata, name=amp-cta-url
# Specifies the Single Page Story Ad call to action outlink
tags: {
  html_format: AMP4ADS
  tag_name: "META"
  spec_name: "meta name=amp-cta-url"
  mandatory_parent: "HEAD"
  unique: true
  attrs: {
    name: "content"
    mandatory: true
  }
  attrs: {
    name: "name"
    mandatory: true
    value_casei: "amp-cta-url"
    dispatch_key: NAME_VALUE_DISPATCH
  }
}
# AMP metadata, name=amp-cta-landing-page-type
# Specifies the Single Page Story Ad landing page type
tags: {
  html_format: AMP4ADS
  tag_name: "META"
  spec_name: "meta name=amp-cta-landing-page-type"
  mandatory_parent: "HEAD"
  unique: true
  attrs: {
    name: "content"
    mandatory: true
    value_casei: "amp"
    value_casei: "nonamp"
    value_casei: "story"
  }
  attrs: {
    name: "name"
    mandatory: true
    value_casei: "amp-cta-landing-page-type"
    dispatch_key: NAME_VALUE_DISPATCH
  }
}
# AMP metadata, name=amp4ads-vars-*
# Allows advertisers to pass information from creatives
# to be included in amp-ad-metadata.
tags: {
  html_format: AMP4ADS
  tag_name: "META"
  spec_name: "meta name=amp4ads-vars-*"
  mandatory_parent: "HEAD"
  attrs: {
    name: "content"
    mandatory: true
  }
  attrs: {
    name: "name"
    mandatory: true
    value_regex: "amp4ads-vars-.+"
  }
}
# 4.2.6 The style
# See `validator-css.protoascii`.

# 4.3 Sections
# 4.3.1 The body element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "BODY"
  mandatory: true
  unique: true
  mandatory_parent: "HTML"
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup"
}
# 4.3.2 The article element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "ARTICLE"
}
# 4.3.3 The section element
attr_lists: {
  name: "poool-access-attrs"
  attrs: {
    name: "poool-access-preview"
    requires_extension: "amp-access-poool"
  }
  attrs: {
    name: "poool-access-content"
    requires_extension: "amp-access-poool"
  }
}
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "SECTION"
  disallowed_ancestor: "AMP-ACCORDION"
  attr_lists: "poool-access-attrs"
}
tags: {
  html_format: AMP4EMAIL
  tag_name: "SECTION"
  spec_name: "section (AMP4EMAIL)"
  disallowed_ancestor: "AMP-ACCORDION"
}
# 4.3.4 The nav element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "NAV"
}
# 4.3.5 The aside element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "ASIDE"
}
# 4.3.6 The h1, h2, h3, h4, h5, and h6 elements
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "H1"
  attrs: { name: "align" }
}
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "H2"
  attrs: { name: "align" }
}
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "H3"
  attrs: { name: "align" }
}
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "H4"
  attrs: { name: "align" }
}
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "H5"
  attrs: { name: "align" }
}
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "H6"
  attrs: { name: "align" }
}
# 4.3 7 The header element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "HEADER"
}
# 4.3 7 The footer element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "FOOTER"
}
# 4.3 7 The address element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "ADDRESS"
}

# 4.4 Grouping Content
# 4.4.1 The p element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "P"
  attrs: { name: "align" }
}
# 4.4.2 The hr element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "HR"
}
# 4.4.3 The pre element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "PRE"
}
# 4.4.4 The blockquote element
attr_lists: {
  name: "cite-attr"
  attrs: {
    name: "cite"
    value_url: {
      protocol: "http"
      protocol: "https"
      allow_empty: true
    }
    disallowed_value_regex: "__amp_source_origin"
  }
}
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "BLOCKQUOTE"
  attrs: { name: "align" }
  attr_lists: "cite-attr"
}
# 4.4.5 The ol element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "OL"
  attrs: {
    name: "reversed"
    value: ""
  }
  attrs: {
    name: "start"
    value_regex: "[0-9]*"
  }
  attrs: {
    name: "type"
    value_regex: "[1AaIi]"
  }
}
# 4.4.6 The ul element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "UL"
}
# 4.4.7 The li element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "LI"
  attrs: {
    name: "value"
    value_regex: "[0-9]*"
  }
}
# 4.4.8 The dl element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "DL"
}
# 4.4.9 The dt element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "DT"
}
# 4.4.10 The dd element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "DD"
}
# 4.4.11 The figure element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "FIGURE"
}
# 4.4.12 The figcaption element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "FIGCAPTION"
}
# 4.4.13 The div element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "DIV"
  attrs: { name: "align" }
}
# 4.4.14 The main element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "MAIN"
}

# 4.5 Text-level semantics
# 4.5.1 The a element
attr_lists: {
  # https://github.com/ampproject/amphtml/issues/35067
  name: "click-attributions"
  attrs: { name: "attributiondestination" }
  attrs: { name: "attributionexpiry" }
  attrs: { name: "attributionreportto" }
  attrs: { name: "attributionsourceeventid" }
  attrs: { name: "attributionsourceid" }
  attrs: { name: "conversiondestination" }
  attrs: { name: "impressiondata" }
  attrs: { name: "impressionexpiry" }
  attrs: { name: "reportingorigin" }
}
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "A"
  attrs: {
    name: "attributionsrc"
    value_url: {
      protocol: "https"
      allow_empty: true
    }
  }
  attrs: { name: "border" }  # Not valid html5 but commonly used and supported.
  attrs: { name: "download" }
  attrs: {
    name: "href"
    value_url: {
      # When updating this list, make sure to also update bind-validator.js.
      protocol: "ftp"
      protocol: "geo"
      protocol: "http"
      protocol: "https"
      protocol: "mailto"
      protocol: "maps"
      # Allowlisting additional commonly observed third party
      # protocols which should be safe.
      # BiP Messenger
      protocol: "bip"
      # Blackberry messenger
      # (http://devblog.blackberry.com/2015/02/cross-platform-sharing-with-bbm/)
      protocol: "bbmi"
      protocol: "chrome"
      # IOS over-the-air app installation
      # (https://github.com/nifcblm/AHPP-iOS-App/wiki/How-to-distribute-enterprise-iOS-App)
      protocol: "itms-services"
      protocol: "facetime"
      protocol: "fb-me"
      protocol: "fb-messenger"
      protocol: "feed"
      protocol: "intent"
      # Line messenger (https://media.line.me/howto/en/)
      protocol: "line"
      # (https://docs.microsoft.com/en-us/windows/uwp/launch-resume/launch-default-app#microsoft-edge-uri-scheme)
      protocol: "microsoft-edge"
      protocol: "skype"
      protocol: "sms"
      protocol: "snapchat"
      protocol: "tel"
      protocol: "tg"
      protocol: "threema"
      protocol: "twitter"
      protocol: "viber"
      protocol: "webcal"
      protocol: "web+mastodon"  # See GitHub issue #14793
      protocol: "wh"
      protocol: "whatsapp"
      allow_empty: true
    }
    disallowed_value_regex: "__amp_source_origin"
  }
  attrs: { name: "hreflang" }
  attrs: { name: "media" }
  attrs: { name: "referrerpolicy" }
  attrs: {
    name: "rel"
    # There are a wide variety of link rel attribute values used in the wild as
    # this attribute is used as meta-data for any html client such as search
    # engines. Unfortunately, there are also a number of attribute values which
    # have behavioral impacts in modern browsers. A few places where these are
    # loosely documented include:
    # - http://microformats.org/wiki/existing-rel-values
    # - http://www.iana.org/assignments/link-relations/link-relations.xhtml
    # - https://html.spec.whatwg.org/#linkTypes
    # We denylist a few specific values which have browser behavior that could
    # negatively impact performance.
    # TODO(gregable): This could be improved such that the error message would
    # report which value in a list is the one causing problems.
    disallowed_value_regex: "(^|\\s)("  # Values are space separated.
        "components|"
        "dns-prefetch|"
        "import|"
        "manifest|"
        "preconnect|"
        "prefetch|"
        "preload|"
        "prerender|"
        "serviceworker|"
        "stylesheet|"  # Only allowed for link tags, specific req's for AMP.
        "subresource"
        ")(\\s|$)"
  }
  attrs: {
    name: "role"
    implicit: true
  }
  attrs: {
    name: "show-tooltip"
    value: "auto"
    value: "true"
  }
  attrs: {
    name: "tabindex"
    implicit: true
  }
  attrs: {
    name: "target"
    value: "_blank"
    value: "_self"
    value: "_top"
  }
  attrs: {
    name: "type"
    value_casei: "text/html"
    value_casei: "application/rss+xml"
  }
  attr_lists: "click-attributions"
  attr_lists: "name-attr"
  attr_lists: "private-click-measurement-attributes"
  # 
  attrs: { name: "[href]" }
  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#links"
}
# AMP4EMAIL restricts the use of mustache delimiters in href. The only allowed
# protocols for href are http, https and mailto. Relative urls are disallowed.
tags: {
  html_format: AMP4EMAIL
  tag_name: "A"
  spec_name: "A (AMP4EMAIL)"
  attrs: { name: "border" }  # Not valid html5 but commonly used and supported.
  attrs: {
    name: "href"
    value_url: {
      protocol: "http"
      protocol: "https"
      protocol: "mailto"
      protocol: "tel"
      allow_relative: false
    }
    # Openning doubly curly brackets {{ (these are mustache delimiters) can only
    # appear at the beginnig of the attribute's value. Likewise closing doubly
    # curly brackets }} can only appear at the end of the attribute's value.
    # Furthermore unbalanced delimiters are not allowed.
    # Additionally section mustache delimiters, i.e., {{#, {{^, {{/ are
    # disallowed.
    disallowed_value_regex: "__amp_source_origin|"
        "(.|\\s){{|"    # Openning delimiter can only appear at the beginning.
        "}}(.|\\s)|"    # Closing delimiter can only appear at the end.
        "^{{.*[^}][^}]$|"    # Delimiters must be balanced.
        "^[^{][^{].*}}$|"    # Delimiters must be balanced.
        "^}}|"    # Also caught by the requirements on balanced delimiters.
        "{{$|"    # Also caught by the requirements on balanced delimiters.
        "{{#|"    # Section delimiters are disallowed.
        "{{/|"    # Section delimiters are disallowed.
        "{{\\^"   # Section delimiters are disallowed.
  }
  attrs: { name: "hreflang" }
  # TODO(gregable): Specify the set of allowed media queries.
  attrs: { name: "media" }
  attrs: {
    name: "role"
    implicit: true
  }
  attrs: {
    name: "tabindex"
    implicit: true
  }
  attrs: {
    name: "target"
    value: "_blank"
  }
  attrs: {
    name: "type"
    value_casei: "text/html"
  }
}
# Private Click Measurement attributes for anchor tags.
# See https://github.com/ampproject/amphtml/issues/35067
attr_lists {
  name: "private-click-measurement-attributes"
  attrs: { name: "attributiondestination" }
  attrs: { name: "attributionexpiry" }
  attrs: { name: "attributionreportto" }
  attrs: { name: "attributionsourceeventid" }
  attrs: { name: "attributionsourceid" }
  attrs: { name: "conversiondestination" }
  attrs: { name: "impressiondata" }
  attrs: { name: "impressionexpiry" }
  attrs: { name: "reportingorigin" }
}

# 4.5.2 The em element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "EM"
}
# 4.5.3 The strong element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "STRONG"
}
# 4.5.4 The small element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "SMALL"
}
# 4.5.5 The s element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "S"
}
# 4.5.6 The cite element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "CITE"
}
# 4.5.7 The q element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "Q"
  attr_lists: "cite-attr"
}
# 4.5.8 The dfn element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "DFN"
}
# 4.5.9 The abbr element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "ABBR"
}
# 4.5.10 The data element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "DATA"
}
# 4.5.11 The time element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "TIME"
  attrs: {
    name: "datetime"
  }
  attrs: {
    name: "pubdate"
    value: ""
  }
}
# 4.5.12 The code element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "CODE"
}
# 4.5.13 The var element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "VAR"
}
# 4.5.14 The samp element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "SAMP"
}
# 4.5.15 The kbd element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "KBD"
}
# 4.5.16 The sub and sup elements
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "SUB"
}
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "SUP"
}
# 4.5.17 The i element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "I"
}
# 4.5.18 The b element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "B"
}
# 4.5.19 The u element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "U"
}
# 4.5.20 The mark element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "MARK"
}
# 4.5.21 The ruby element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "RUBY"
}
# 4.5.22 The rb element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "RB"
}
# 4.5.23 The rt element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "RT"
}
# 4.5.24 The rtc element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "RTC"
}
# 4.5.25 The rp element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "RP"
}
# 4.5.26 The bdi element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  tag_name: "BDI"
}
# 4.5.27 The bdo element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "BDO"
  attrs: { name: "dir" }
}
# 4.5.28 The span element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "SPAN"
}
# 4.5.29 The br element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "BR"
}
# 4.5.30 The wbr element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "WBR"
}

# 4.6 Edits
# 4.6.1 The ins element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "INS"
  # https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ins
  # These attributes have specific formatting, but as they are metadata
  # that can't hurt performance, rendering or security, we don't validate
  # the values.
  attrs { name: "datetime" }
  attr_lists: "cite-attr"
}
# 4.6.2 The del element
tags: {
  html_format: AMP
  html_format: AMP4ADS
  html_format: AMP4EMAIL
  tag_name: "DEL"
  # https://developer.mozilla.org/en-US/docs/Web/HTML/Element/del
  # These attributes have specific formatting, but as they are metadata
  # that can't hurt performance, rendering or security, we don't validate
  # the values.
  attrs { name: "datetime" }
  attr_lists: "cite-attr"
}

# 4.7 Embedded Content
# AMP HTML allows embedded content only via its own tags (e.g. amp-img), with
# the exception of tags inside of a 


© 2015 - 2024 Weber Informatics LLC | Privacy Policy