ansiterm 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
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