# frozen_string_literal: true
require "set"

module Loofah
  module Elements
    STRICT_BLOCK_LEVEL_HTML4 = Set.new %w[
                                         address
                                         blockquote
                                         center
                                         dir
                                         div
                                         dl
                                         fieldset
                                         form
                                         h1
                                         h2
                                         h3
                                         h4
                                         h5
                                         h6
                                         hr
                                         isindex
                                         menu
                                         noframes
                                         noscript
                                         ol
                                         p
                                         pre
                                         table
                                         ul
                                       ]

    # https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements
    STRICT_BLOCK_LEVEL_HTML5 = Set.new %w[
                                         address
                                         article
                                         aside
                                         blockquote
                                         canvas
                                         dd
                                         div
                                         dl
                                         dt
                                         fieldset
                                         figcaption
                                         figure
                                         footer
                                         form
                                         h1
                                         h2
                                         h3
                                         h4
                                         h5
                                         h6
                                         header
                                         hgroup
                                         hr
                                         li
                                         main
                                         nav
                                         noscript
                                         ol
                                         output
                                         p
                                         pre
                                         section
                                         table
                                         tfoot
                                         ul
                                         video
                                       ]

    # The following elements may also be considered block-level
    # elements since they may contain block-level elements
    LOOSE_BLOCK_LEVEL = Set.new %w[dd
                                   dt
                                   frameset
                                   li
                                   tbody
                                   td
                                   tfoot
                                   th
                                   thead
                                   tr
                                ]

    # Elements that aren't block but should generate a newline in #to_text
    INLINE_LINE_BREAK = Set.new(["br"])

    STRICT_BLOCK_LEVEL = STRICT_BLOCK_LEVEL_HTML4 + STRICT_BLOCK_LEVEL_HTML5
    BLOCK_LEVEL = STRICT_BLOCK_LEVEL + LOOSE_BLOCK_LEVEL
    LINEBREAKERS = BLOCK_LEVEL + INLINE_LINE_BREAK
  end

  ::Loofah::MetaHelpers.add_downcased_set_members_to_all_set_constants ::Loofah::Elements
end
