Sha256: 0dac31c53c23b9f75803b914d0598a55d5ab54d4e7a70f65a5f742b68fb1ce78

Contents?: true

Size: 970 Bytes

Versions: 52

Compression:

Stored size: 970 Bytes

Contents

module Hamlit
  module Filters
    class Base
      attr_reader :options

      def self.indent_source(source, indent_width: 0)
        lines = source.split("\n")
        self.new.compile_lines(lines, indent_width: indent_width)
      end

      def initialize(options = {})
        @options = options
      end

      def compile(lines)
        raise NotImplementedError
      end

      def compile_lines(lines, indent_width: 0)
        base  = (lines.first || '').index(/[^\s]/) || 0
        width = indent_width - base
        width = 0 if width < 0

        lines = strip_last(lines).map do |line|
          ' ' * width + line
        end

        text = lines.join("\n") + "\n"
        text
      end

      private

      # NOTE: empty line is reserved for preserve filter.
      def strip_last(lines)
        lines = lines.dup
        while lines.last && lines.last.length == 0
          lines.delete_at(-1)
        end
        lines
      end
    end
  end
end

Version data entries

52 entries across 52 versions & 1 rubygems

Version Path
hamlit-1.6.7 lib/hamlit/filters/base.rb
hamlit-1.6.6 lib/hamlit/filters/base.rb
hamlit-1.6.5 lib/hamlit/filters/base.rb
hamlit-1.6.4 lib/hamlit/filters/base.rb
hamlit-1.6.3 lib/hamlit/filters/base.rb
hamlit-1.6.2 lib/hamlit/filters/base.rb
hamlit-1.6.1 lib/hamlit/filters/base.rb
hamlit-1.6.0 lib/hamlit/filters/base.rb
hamlit-1.5.9 lib/hamlit/filters/base.rb
hamlit-1.5.8 lib/hamlit/filters/base.rb
hamlit-1.5.7 lib/hamlit/filters/base.rb
hamlit-1.5.6 lib/hamlit/filters/base.rb
hamlit-1.5.5 lib/hamlit/filters/base.rb
hamlit-1.5.4 lib/hamlit/filters/base.rb
hamlit-1.5.3 lib/hamlit/filters/base.rb
hamlit-1.5.2 lib/hamlit/filters/base.rb
hamlit-1.5.1 lib/hamlit/filters/base.rb
hamlit-1.5.0 lib/hamlit/filters/base.rb
hamlit-1.4.7 lib/hamlit/filters/base.rb
hamlit-1.4.6 lib/hamlit/filters/base.rb