Sha256: d46c704bdf2cf3a03ad5f1b2b89d30052704084b2cfee53b544808f751e6248d

Contents?: true

Size: 1.38 KB

Versions: 31

Compression:

Stored size: 1.38 KB

Contents

require 'ripper'
require 'hamlit/concerns/balanceable'

module Hamlit
  module Parsers
    module Attribute
      include Concerns::Balanceable

      def parse_attributes(scanner)
        if scanner.match?(/{/)
          parse_old_attributes(scanner) + parse_new_attributes(scanner)
        else
          parse_new_attributes(scanner) + parse_old_attributes(scanner)
        end
      end

      private

      def parse_old_attributes(scanner)
        return [] unless scanner.match?(/{/)

        tokens = Ripper.lex(scanner.rest)
        until balanced_braces_exist?(tokens)
          @current_lineno += 1
          break unless @lines[@current_lineno]
          scanner.concat(current_line)
          tokens = Ripper.lex(scanner.rest)
        end

        tokens = fetch_balanced_braces(tokens)
        scanner.pos += tokens.last.first.last + 1
        [tokens.map(&:last).join]
      end

      def parse_new_attributes(scanner)
        return [] unless scanner.match?(/\(/)

        tokens = Ripper.lex(scanner.rest)
        until balanced_parens_exist?(tokens)
          @current_lineno += 1
          break unless @lines[@current_lineno]
          scanner.concat(current_line)
          tokens = Ripper.lex(scanner.rest)
        end

        tokens = fetch_balanced_parentheses(tokens)
        scanner.pos += tokens.last.first.last + 1
        [tokens.map(&:last).join]
      end
    end
  end
end

Version data entries

31 entries across 31 versions & 1 rubygems

Version Path
hamlit-1.4.3 lib/hamlit/parsers/attribute.rb
hamlit-1.4.2 lib/hamlit/parsers/attribute.rb
hamlit-1.4.1 lib/hamlit/parsers/attribute.rb
hamlit-1.3.2 lib/hamlit/parsers/attribute.rb
hamlit-1.3.1 lib/hamlit/parsers/attribute.rb
hamlit-1.3.0 lib/hamlit/parsers/attribute.rb
hamlit-1.2.1 lib/hamlit/parsers/attribute.rb
hamlit-1.2.0 lib/hamlit/parsers/attribute.rb
hamlit-1.1.1 lib/hamlit/parsers/attribute.rb
hamlit-1.1.0 lib/hamlit/parsers/attribute.rb
hamlit-1.0.0 lib/hamlit/parsers/attribute.rb
hamlit-0.6.2 lib/hamlit/parsers/attribute.rb
hamlit-0.6.1 lib/hamlit/parsers/attribute.rb
hamlit-0.6.0 lib/hamlit/parsers/attribute.rb
hamlit-0.5.3 lib/hamlit/parsers/attribute.rb
hamlit-0.5.2 lib/hamlit/parsers/attribute.rb
hamlit-0.5.1 lib/hamlit/parsers/attribute.rb
hamlit-0.5.0 lib/hamlit/parsers/attribute.rb
hamlit-0.4.3 lib/hamlit/parsers/attribute.rb
hamlit-0.4.2 lib/hamlit/parsers/attribute.rb