class MultiMovingsign::LineSegment
Attributes
prefix[RW]
segment[RW]
Public Class Methods
new(prefix, segment)
click to toggle source
# File lib/multi_movingsign/page_renderer.rb, line 119 def initialize(prefix, segment) self.prefix = prefix self.segment = segment end
Public Instance Methods
inspect()
click to toggle source
# File lib/multi_movingsign/page_renderer.rb, line 159 def inspect to_s.inspect end
prefix?()
click to toggle source
# File lib/multi_movingsign/page_renderer.rb, line 124 def prefix? !!self.prefix end
split_if_necessary(max_width)
click to toggle source
If necessary, splits this LineSegment
into multiple appropriate for displaying at once on the screen
# File lib/multi_movingsign/page_renderer.rb, line 129 def split_if_necessary(max_width) raise InvalidInputError, "Prefix '' is too wide!" if (prefix? && PageRenderer.calculate_width(prefix) > max_width) if PageRenderer.calculate_width(self.to_s) <= max_width # segment isn't too long with prefix, return it as is [self] else # segment is too long, split it up into word segments finding the largest with the prefix appended that fits segments = [] # calculated segments prefix_width = prefix? ? PageRenderer.calculate_width(prefix) : 0 words = segment.split(/ /) while !words.empty? index = words.length while index > 0 && PageRenderer.calculate_width(candidate = (candidate_words = words[0, index]).join(' ')) + prefix_width > max_width index -= 1 end segments << self.class.new(prefix, candidate) words = words.drop index end segments end end
to_s()
click to toggle source
# File lib/multi_movingsign/page_renderer.rb, line 155 def to_s prefix? ? prefix + segment : segment end