Sha256: ba997300a7f08395e68f559665117bbd0fc7b9e07fd70088b4b4dc999ec9e5d7

Contents?: true

Size: 1.34 KB

Versions: 12

Compression:

Stored size: 1.34 KB

Contents

# encoding: utf-8
module Infoboxer
  class Parser
    module HTML
      include Tree
      
      def html
        case
        when @context.check(/\/[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(/[a-z]+[^>\/]*>/)
          html_opening_tag
        else
          # not an HTML tag at all!
          nil
        end
      end

      def html_closing_tag
        @context.skip(/\//)
        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(/<\/#{tag}>/)
        if @context.matched =~ /<\/#{tag}>/
          HTMLTag.new(tag, parse_params(attrs), contents)
        else
          [
            HTMLOpeningTag.new(tag, parse_params(attrs)),
            *contents
          ]
        end
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
infoboxer-0.2.7 lib/infoboxer/parser/html.rb
infoboxer-0.2.6 lib/infoboxer/parser/html.rb
infoboxer-0.2.5 lib/infoboxer/parser/html.rb
infoboxer-0.2.4 lib/infoboxer/parser/html.rb
infoboxer-0.2.3 lib/infoboxer/parser/html.rb
infoboxer-0.2.2 lib/infoboxer/parser/html.rb
infoboxer-0.2.1 lib/infoboxer/parser/html.rb
infoboxer-0.2.0 lib/infoboxer/parser/html.rb
infoboxer-0.1.2.1 lib/infoboxer/parser/html.rb
infoboxer-0.1.2 lib/infoboxer/parser/html.rb
infoboxer-0.1.1 lib/infoboxer/parser/html.rb
infoboxer-0.1.0 lib/infoboxer/parser/html.rb