#!/usr/bin/env ruby # -*- encoding: utf-8 -*- # Copyright muflax , 2013 # License: GNU GPL 3 class String alias :starts_with? :start_with? alias :ends_with? :end_with? def align str=" ", alignment: :left self.split("\n").align(str, alignment: alignment).join("\n") end def align! str=" ", alignment: :left self.replace(self.align(str, aligment: alignment)) end def whackuum str=/\s+/ self.split(str).map(&:strip) end ANSIColorRegexp = Regexp.new(/(?: \e \[ \d+ (?: ;\d+)* m )+/x) def truncate length, omission: "..." return self if self.length <= length ss = StringScanner.new(self) out = ss.scan(ANSIColorRegexp) || "" cut_length = length - omission.str_length used = 0 cut_at = 0 while used < length and not ss.eos? out << ss.getch c = ss.scan(ANSIColorRegexp) out << c unless c.nil? used += 1 cut_at = out.length if used == cut_length end if not ss.eos? out = out[0, cut_at] out << omission end out end end