ansiterm 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d38217a9590237a3e098e5cf097fc03bc055dbab158c7eaab8b730a9c51e28d8
4
- data.tar.gz: fa2661f67e062ad9e8a12f930bb80e93aff47d41641da140ec8bc51a293b98ba
3
+ metadata.gz: 594990b07d22ef5777b36348387c47a3061c4772f5e830a2240294c77574b3ea
4
+ data.tar.gz: 772aa91059ffa9d4e59bd06b33fd607726befacd0ecfafa61db3a5df862897a9
5
5
  SHA512:
6
- metadata.gz: 84474fe763a85f88560157e7bf70d047e1bbf1efb72407b64b6f4cd9cac57be295f99d9720c5a28d7531873c8ac192c1c3ab63b37fa6d44d877729f96442d1bc
7
- data.tar.gz: 809ec57358492a2b71a9ae095907248b1ff2e681f679ab3139d5cd7bede8198cb42408ece26e109859f3a0862702a37be9bb75de0b04ca1d9227abc1644a450d
6
+ metadata.gz: d3e0fba3540ea67e4126c9ccc6918b778d7fffd971f407c3d4045148dda5b5edf2ef00761ec2465eea55e1e930da15e8a111e62a214753cbfd8a2c6d77fd753b
7
+ data.tar.gz: 59a9fa226a211ce692a446c7e895631bc19c30e729d3597a7f5f6f97e1de267ac16e4593fe363f460d4a37e3c02bbfb01112772d1cd7489e05cc6ae0406d471c
data/lib/ansiterm/attr.rb CHANGED
@@ -12,7 +12,7 @@ module AnsiTerm
12
12
  # whether to e.g. encode a string as spans with one Attr,
13
13
  # or characters with one Attr per character.
14
14
  #
15
- # Use Attr#transition(other_attr) to retrieve an ANSI
15
+ # Use `Attr#transition(other_attr)` to retrieve an ANSI
16
16
  # sequence that represents the changes from self to
17
17
  # other_attr.
18
18
  #
@@ -32,7 +32,15 @@ module AnsiTerm
32
32
  freeze
33
33
  end
34
34
 
35
+ def ==(other)
36
+ return false if !other.kind_of?(self.class)
37
+ return fgcol == other.fgcol &&
38
+ bgcol == other.bgcol &&
39
+ flags == other.flags
40
+ end
41
+
35
42
  def merge(attrs)
43
+ return self if self == attrs
36
44
  if attrs.kind_of?(self.class)
37
45
  old = attrs
38
46
  attrs = {}
@@ -64,8 +72,8 @@ module AnsiTerm
64
72
 
65
73
  def transition_to(other)
66
74
  t = []
67
- t << [other.fgcol] if other.fgcol && other.fgcol != self.fgcol
68
- t << [other.bgcol] if other.bgcol && other.bgcol != self.bgcol
75
+ t << [other.fgcol] if other.fgcol != self.fgcol && other.fgcol
76
+ t << [other.bgcol] if other.bgcol != self.fgcol && other.bgcol
69
77
 
70
78
  if other.bold? != self.bold?
71
79
  t << [other.bold? ? 1 : 22]
@@ -89,4 +97,7 @@ module AnsiTerm
89
97
  end
90
98
  end
91
99
 
100
+ def self.attr(*args)
101
+ Attr.new(*args)
102
+ end
92
103
  end
@@ -1,16 +1,20 @@
1
-
2
- # This is a test
1
+ # coding: utf-8
3
2
  module AnsiTerm
4
3
 
5
4
  class String
6
- def initialize(str="")
7
- parse(str)
5
+ def initialize(str=nil)
6
+ if str
7
+ parse(str)
8
+ else
9
+ @str = ""
10
+ @attrs = []
11
+ end
8
12
  end
9
13
 
10
14
  def to_plain_str
11
15
  @str.dup
12
16
  end
13
-
17
+
14
18
  def to_str
15
19
  out = ""
16
20
  a = Attr.new
@@ -45,15 +49,39 @@ module AnsiTerm
45
49
  @str, @attrs = str,Array(attrs)
46
50
  end
47
51
 
52
+ def raw
53
+ return @str, Array(@attrs)
54
+ end
55
+
48
56
  def set_attr(range, attr)
49
- min = range.first - 1
57
+ min = [range.first - 1,0].max
58
+ fattr = @attrs[min]
59
+ attr = fattr.merge(attr)
60
+ r = Array(@attrs[range]).count # Inefficient, but saves dealing with negative offsets etc. "manually"
61
+ last = nil
62
+ @attrs[range] = @attrs[range].map do |a|
63
+ n = a.merge(attr)
64
+ last == n ? last : n
65
+ end
66
+ rm = range.last
67
+ if a = @attrs[rm]
68
+ @attrs[rm] = Attr.new(bgcol:40).merge(fattr).merge(a)
69
+ end
70
+ end
71
+
72
+ def merge_attr_below(range, attr)
73
+ min = [0,range.first - 1].max
50
74
  fattr = @attrs[min]
51
- attr = fattr.merge(attr) if fattr
52
75
  r = Array(@attrs[range]).count # Inefficient, but saves dealing with negative offsets etc. "manually"
53
76
  last = nil
54
- @attrs[range] = @attrs[range].map do |a|
55
- a == last ? a : last = attr.merge(a)
77
+ @attrs[range] = @attrs[range].map do |a|
78
+ if a.bgcol == 49
79
+ a.merge(attr)
80
+ else
81
+ attr.merge(a)
82
+ end
56
83
  end
84
+ #fattr #@attrs[min+r].merge(fattr)
57
85
  end
58
86
 
59
87
  def[]= range, str
@@ -75,12 +103,25 @@ module AnsiTerm
75
103
  end
76
104
  end
77
105
 
106
+ def char_at(index)
107
+ @str[index]
108
+ end
109
+
78
110
  def attr_at(index)
79
111
  @attrs[index]
80
112
  end
81
113
 
82
114
  def << str
83
- parse(self.to_str + "\e[0m" + str.to_str)
115
+ return self if str.nil?
116
+ if !str.kind_of?(self.class)
117
+ parse(self.to_str + "\e[0m" + str.to_str)
118
+ return self
119
+ end
120
+
121
+ s,a = str.raw
122
+ @str.concat(s)
123
+ @attrs.concat(a)
124
+ self
84
125
  end
85
126
 
86
127
  private
@@ -162,4 +203,8 @@ module AnsiTerm
162
203
  self
163
204
  end
164
205
  end
206
+
207
+ def self.str(*args)
208
+ AnsiTerm::String.new(*args)
209
+ end
165
210
  end
@@ -1,3 +1,3 @@
1
1
  module AnsiTerm
2
- VERSION = "0.3.2"
2
+ VERSION = "0.3.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ansiterm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vidar Hokstad
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-09-26 00:00:00.000000000 Z
11
+ date: 2021-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -91,8 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
91
  - !ruby/object:Gem::Version
92
92
  version: '0'
93
93
  requirements: []
94
- rubyforge_project:
95
- rubygems_version: 2.7.6
94
+ rubygems_version: 3.1.4
96
95
  signing_key:
97
96
  specification_version: 4
98
97
  summary: ANSI/VT102 terminal output with windowing