Class: Tui::SegmentWriter
- Inherits:
-
Object
- Object
- Tui::SegmentWriter
show all
- Includes:
- Helpers
- Defined in:
- lib/tui.rb
Defined Under Namespace
Classes: EmojiSegment, FillSegment
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods included from Helpers
#accent, #bold, #dim, #emoji, #fill, #highlight
Constructor Details
Returns a new instance of SegmentWriter.
685
686
687
688
689
690
|
# File 'lib/tui.rb', line 685
def initialize(z_index: 1)
@segments = []
@z_index = z_index
@has_wide = false
@width_delta = 0 end
|
Instance Attribute Details
#z_index ⇒ Object
Returns the value of attribute z_index.
683
684
685
|
# File 'lib/tui.rb', line 683
def z_index
@z_index
end
|
Instance Method Details
#empty? ⇒ Boolean
747
748
749
|
# File 'lib/tui.rb', line 747
def empty?
@segments.empty?
end
|
#has_wide? ⇒ Boolean
707
708
709
|
# File 'lib/tui.rb', line 707
def has_wide?
@has_wide
end
|
#to_s(width: nil) ⇒ Object
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
|
# File 'lib/tui.rb', line 725
def to_s(width: nil)
rendered = String.new
@segments.each do |segment|
case segment
when FillSegment
raise ArgumentError, "fill requires width context" unless width
rendered << render_fill(segment, rendered, width)
when EmojiSegment
rendered << segment.to_s
else
rendered << segment.to_s
end
end
rendered
end
|
#visible_width(rendered_str) ⇒ Object
Fast width calculation using precomputed emoji widths
742
743
744
745
|
# File 'lib/tui.rb', line 742
def visible_width(rendered_str)
stripped = rendered_str.include?("\e") ? rendered_str.gsub(ANSI_STRIP_RE, '') : rendered_str
@has_wide ? stripped.length + @width_delta : stripped.length
end
|
#write(text = "") ⇒ Object
Also known as:
<<
692
693
694
695
696
697
698
699
700
701
702
703
704
705
|
# File 'lib/tui.rb', line 692
def write(text = "")
return self if text.nil?
if text.respond_to?(:empty?) && text.empty?
return self
end
segment = normalize_segment(text)
if segment.is_a?(EmojiSegment)
@has_wide = true
@width_delta += segment.width_delta
end
@segments << segment
self
end
|
#write_bold(text) ⇒ Object
717
718
719
|
# File 'lib/tui.rb', line 717
def write_bold(text)
write(style_segment(text, :bold) { |value| bold(value) })
end
|
#write_dim(text) ⇒ Object
713
714
715
|
# File 'lib/tui.rb', line 713
def write_dim(text)
write(style_segment(text, :dim) { |value| dim(value) })
end
|
#write_highlight(text) ⇒ Object
721
722
723
|
# File 'lib/tui.rb', line 721
def write_highlight(text)
write(style_segment(text, :highlight) { |value| highlight(value) })
end
|