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