Sha256: 954839fd0ae21309ad0fe735354e1cba0d86ffca88c8721b0d1d55cd35663746

Contents?: true

Size: 1.36 KB

Versions: 10

Compression:

Stored size: 1.36 KB

Contents

module Hamlit
  module Concerns
    module LineReader
      def reset_lines(lines)
        @lines = lines
        @current_lineno = -1
      end

      def current_line
        @lines[@current_lineno]
      end

      # Return nearest line ignoring empty lines.
      def next_line
        lineno = @current_lineno + 1
        while @lines[lineno] && empty_line?(@lines[lineno])
          lineno += 1
        end
        @lines[lineno]
      end

      def empty_line?(line)
        line = line.rest if line.respond_to?(:rest)
        line =~ /\A *\Z/
      end

      def skip_lines
        while next_line && next_indent >= @current_indent
          @current_lineno += 1
        end
      end

      def read_lines
        lines = []
        while read_line?
          lines << @lines[@current_lineno + 1]
          @current_lineno += 1
        end
        trim_lines(lines)
      end

      private

      def trim_lines(lines)
        size = (lines.first || '').index(/[^\s]/) || 0
        lines.map { |line| line.gsub(/\A {#{size}}/, '') }
      end

      def read_line?
        return false unless next_line
        return true if next_line.index(/^#{@indent_logs.last}[ \t]/)

        line = @lines[@current_lineno + 1]
        return false unless line

        # NOTE: preserve filter also requires an empty line
        line.gsub(/ /, '').length == 0
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
hamlit-1.7.2 lib/hamlit/concerns/line_reader.rb
hamlit-1.7.1 lib/hamlit/concerns/line_reader.rb
hamlit-1.7.0 lib/hamlit/concerns/line_reader.rb
hamlit-1.6.7 lib/hamlit/concerns/line_reader.rb
hamlit-1.6.6 lib/hamlit/concerns/line_reader.rb
hamlit-1.6.5 lib/hamlit/concerns/line_reader.rb
hamlit-1.6.4 lib/hamlit/concerns/line_reader.rb
hamlit-1.6.3 lib/hamlit/concerns/line_reader.rb
hamlit-1.6.2 lib/hamlit/concerns/line_reader.rb
hamlit-1.6.1 lib/hamlit/concerns/line_reader.rb