Sha256: f5d0432998e6a80642eb3f7c5de56369101583950ea1665f77f5fded60e5fd99

Contents?: true

Size: 1.83 KB

Versions: 2

Compression:

Stored size: 1.83 KB

Contents

require "htmlbeautifier/parser"

module HtmlBeautifier
  class HtmlParser < Parser
    ELEMENT_CONTENT = %r{ (?:<%.*?%>|[^>])* }mx
    HTML_VOID_ELEMENTS = %r{(?:
      area | base | br | col | command | embed | hr | img | input | keygen |
      link | meta | param | source | track | wbr
    )}mix
    HTML_BLOCK_ELEMENTS = %r{(?:
      address | article | aside | audio | blockquote | canvas | dd | dir | div |
      dl | dt | fieldset | figcaption | figure | footer | form | h1 | h2 | h3 |
      h4 | h5 | h6 | header | hr | li | menu | noframes | noscript | ol | p |
      pre | section | table | tbody | td | tfoot | th | thead | tr | ul | video
    )}mix

    MAPPINGS = [
      [%r{(<%-?=?)(.*?)(-?%>)}om,
       :embed],
      [%r{<!--\[.*?\]>}om,
       :open_ie_cc],
      [%r{<!\[.*?\]-->}om,
       :close_ie_cc],
      [%r{<!--.*?-->}om,
       :standalone_element],
      [%r{<!.*?>}om,
       :standalone_element],
      [%r{(<script#{ELEMENT_CONTENT}>)(.*?)(</script>)}omi,
       :foreign_block],
      [%r{(<style#{ELEMENT_CONTENT}>)(.*?)(</style>)}omi,
       :foreign_block],
      [%r{(<pre#{ELEMENT_CONTENT}>)(.*?)(</pre>)}omi,
       :preformatted_block],
      [%r{(<textarea#{ELEMENT_CONTENT}>)(.*?)(</textarea>)}omi,
       :preformatted_block],
      [%r{<#{HTML_VOID_ELEMENTS}(?: #{ELEMENT_CONTENT})?/?>}om,
       :standalone_element],
      [%r{</#{HTML_BLOCK_ELEMENTS}>}om,
       :close_block_element],
      [%r{<#{HTML_BLOCK_ELEMENTS}(?: #{ELEMENT_CONTENT})?>}om,
       :open_block_element],
      [%r{</#{ELEMENT_CONTENT}>}om,
       :close_element],
      [%r{<#{ELEMENT_CONTENT}>}om,
       :open_element],
      [%r{\s*\r?\n\s*}om,
       :new_line],
      [%r{[^<]+},
       :text]]

    def initialize
      super do |p|
        MAPPINGS.each do |regexp, method|
          p.map regexp, method
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
htmlbeautifier-1.2.0 lib/htmlbeautifier/html_parser.rb
htmlbeautifier-1.1.1 lib/htmlbeautifier/html_parser.rb