Sha256: e22b862242ed31b43401056d5f5384a49f4842165a3bb13ea2c0e615c1bd8240

Contents?: true

Size: 1.34 KB

Versions: 4

Compression:

Stored size: 1.34 KB

Contents

# encoding: utf-8

module Infoboxer
  class Parser
    module HTML
      include Tree

      def html
        case
        when @context.check(%r{/[a-z]+>})
          html_closing_tag
        when @context.check(/br\s*>/)
          html_br
        when @context.check(%r{[a-z]+[^/>]*/>})
          html_auto_closing_tag
        when @context.check(%r{[a-z]+[^>/]*>})
          html_opening_tag
        else
          # not an HTML tag at all!
          nil
        end
      end

      def html_closing_tag
        @context.skip(%r{/})
        tag = @context.scan(/[a-z]+/)
        @context.skip(/>/)
        HTMLClosingTag.new(tag)
      end

      def html_br
        @context.skip(/br\s*>/)
        HTMLTag.new('br', {})
      end

      def html_auto_closing_tag
        tag = @context.scan(/[a-z]+/)
        attrs = @context.scan(%r{[^/>]*})
        @context.skip(%r{/>})
        HTMLTag.new(tag, parse_params(attrs))
      end

      def html_opening_tag
        tag = @context.scan(/[a-z]+/)
        attrs = @context.scan(/[^>]+/)
        @context.skip(/>/)
        contents = short_inline(%r{</#{tag}>})
        if @context.matched =~ %r{</#{tag}>}
          HTMLTag.new(tag, parse_params(attrs), contents)
        else
          [
            HTMLOpeningTag.new(tag, parse_params(attrs)),
            *contents
          ]
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
infoboxer-0.3.1.pre lib/infoboxer/parser/html.rb
infoboxer-0.3.0.pre lib/infoboxer/parser/html.rb
infoboxer-0.3.0 lib/infoboxer/parser/html.rb
infoboxer-0.2.8 lib/infoboxer/parser/html.rb