ansi 1.2.4 → 1.2.5

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.
data/.ruby CHANGED
@@ -31,7 +31,7 @@ requires:
31
31
  name: ko
32
32
  version: 0+
33
33
  manifest: MANIFEST
34
- version: 1.2.4
34
+ version: 1.2.5
35
35
  licenses:
36
36
  - Apache 2.0
37
37
  copyright: Copyright (c) 2009 Thomas Sawyer
@@ -1,13 +1,25 @@
1
1
  = RELEASE HISTORY
2
2
 
3
- == 1.2.4 // 2011-04-09
3
+ == 1.2.5 // 2011-05-03
4
+
5
+ This release introduces a preliminary rendition of a Diff class
6
+ for getting colorized comparisons of strings and other objects.
7
+ It's not officially supported yet, so this is only a point release.
8
+
9
+ Changes:
10
+
11
+ * Added Diff class for colorized comparisons.
12
+ * Fixed minor issue with Columns format block; col comes before row.
13
+
14
+
15
+ == 1.2.4 // 2011-04-29
4
16
 
5
17
  This release improves to the ANSI::Columns class. In particular the
6
- layout is more consitent with intended functionality.
18
+ layout is more consistent with intended functionality.
7
19
 
8
20
  Changes:
9
21
 
10
- * Improved ANSI::Columns to give more consitant output.
22
+ * Improved ANSI::Columns to give more consistent output.
11
23
  * ANSI::Columns#to_s can override number of columns.
12
24
  * ANSI::Columns can take a String or Array list.
13
25
 
@@ -37,12 +49,12 @@ Changes:
37
49
 
38
50
  * Remove string argument warnings.
39
51
  * Add String#unansi and String#unansi!
40
- * Add ANIS::Mixin#display.
52
+ * Add ANSI::Mixin#display.
41
53
 
42
54
 
43
55
  == 1.2.1 // 2010-05-10
44
56
 
45
- This release was simply a quick fix to remove the incorecct embedded
57
+ This release was simply a quick fix to remove the incorrect embedded
46
58
  version number, until it gets fixed.
47
59
 
48
60
 
@@ -51,7 +63,7 @@ version number, until it gets fixed.
51
63
  This release entails numerous improvements. First and foremost
52
64
  the Code module is transitioning to a block interface only
53
65
  and phasing out the string argument interface. Admittedly this
54
- is mildly unconvential, but it allows the arguments to be used
66
+ is mildly unconventional, but it allows the arguments to be used
55
67
  as options with common defaults more elegantly.
56
68
 
57
69
  Another important change is that ANSI::Code no longer provides
@@ -59,10 +71,10 @@ String extension methods when included. For this use the new
59
71
  ANSI::Mixin.
60
72
 
61
73
  Other improvements include a String extension, #ansi, added to
62
- code.rb, which makes it even easir to apply ANSI codes to strings.
74
+ code.rb, which makes it even easier to apply ANSI codes to strings.
63
75
  Also, the ANSI::String class has been fixed (a few bugs crept
64
76
  it with the last release) and continues to improve. On top of all
65
- this testing has substatially improved thanks to QED.
77
+ this testing has substantially improved thanks to QED.
66
78
 
67
79
  Changes:
68
80
 
@@ -75,7 +87,7 @@ Changes:
75
87
  == 1.1.0 // 2009-10-04
76
88
 
77
89
  This release is the first toward making the ANSI library
78
- more widely useable.
90
+ more widely usable.
79
91
 
80
92
  Changes:
81
93
 
@@ -35,12 +35,12 @@ Please see HISTORY file.
35
35
  == SYNOPSIS
36
36
 
37
37
  There are a number of modules and classes provided by the ANSI
38
- package. To get a good unserstanding of them it is best to puruse
38
+ package. To get a good understanding of them it is best to pursue
39
39
  the QED documents[http://github.com/rubyworks/ansi/tree/master/qed/]
40
40
  or the API documentation[http://rubyworks.github.com/ansi/rdoc/].
41
41
 
42
42
  At the heart of all the provided libraries lies the ANSI::Code module
43
- which defines ANSI codes as constants and methods. For exmaple:
43
+ which defines ANSI codes as constants and methods. For example:
44
44
 
45
45
  require 'ansi/code'
46
46
 
@@ -54,7 +54,7 @@ Or in block form.
54
54
  red{ "Hello" } + blue{ "World" }
55
55
  => "\e[31mHello\e[0m\e[34mWorld\e[0m"
56
56
 
57
- Rather than include +ANSI::Code+, these mehods can also be called as module
57
+ Rather than include +ANSI::Code+, these methods can also be called as module
58
58
  methods. Either as <code>ANSI::Code.red</code> or just <code>ANSI.red</code>.
59
59
 
60
60
  The methods defined by this module are used throughout the rest of
@@ -81,7 +81,7 @@ Windows users use 'ruby setup.rb all'.
81
81
 
82
82
  Copyright (c) 2004 Thomas Sawyer
83
83
 
84
- This program is ditributed unser the terms of the Apache 2 license.
84
+ This program is distributed under the terms of the Apache 2 license.
85
85
 
86
86
  See LICENSE file for details.
87
87
 
@@ -1,20 +1,27 @@
1
1
  # ANSI module contains all the ANSI related classes.
2
2
  module ANSI
3
- #
3
+ # Returns Hash table of project metadata.
4
4
  def self.meta
5
5
  @spec ||= (
6
6
  require 'yaml'
7
7
  YAML.load(File.new(File.dirname(__FILE__) + '/ansi.yml'))
8
8
  )
9
9
  end
10
- #
10
+
11
+ # Check metadata for missing constants.
11
12
  def self.const_missing(name)
12
13
  meta[name.to_s.downcase] || super(name)
13
14
  end
14
15
  end
15
16
 
16
17
  require 'ansi/code'
18
+ require 'ansi/bbcode'
19
+ require 'ansi/columns'
20
+ require 'ansi/diff'
17
21
  require 'ansi/logger'
22
+ require 'ansi/mixin'
18
23
  require 'ansi/progressbar'
19
24
  require 'ansi/string'
20
- require 'ansi/columns'
25
+ require 'ansi/table'
26
+ require 'ansi/terminal'
27
+
@@ -31,7 +31,7 @@ requires:
31
31
  name: ko
32
32
  version: 0+
33
33
  manifest: MANIFEST
34
- version: 1.2.4
34
+ version: 1.2.5
35
35
  licenses:
36
36
  - Apache 2.0
37
37
  copyright: Copyright (c) 2009 Thomas Sawyer
@@ -74,20 +74,21 @@ module ANSI
74
74
  width = Terminal.terminal_width
75
75
  columns = (width / (max + padding)).to_i
76
76
  end
77
- cols = []
77
+
78
+ rows = []
78
79
  mod = (count / columns.to_f).to_i
79
80
  mod += 1 if count % columns != 0
80
81
 
81
82
  lines.each_with_index do |line, index|
82
- (cols[index % mod] ||=[]) << line.strip
83
+ (rows[index % mod] ||=[]) << line.strip
83
84
  end
84
85
 
85
86
  pad = " " * padding
86
87
  tmp = template(max, pad)
87
88
  str = ""
88
- cols.each_with_index do |row, c|
89
- row.each_with_index do |cell, r|
90
- ansi_codes = ansi_formating(cell, c, r)
89
+ rows.each_with_index do |row, ri|
90
+ row.each_with_index do |cell, ci|
91
+ ansi_codes = ansi_formating(cell, ci, ri)
91
92
  if ansi_codes.empty?
92
93
  str << (tmp % cell)
93
94
  else
@@ -121,9 +122,9 @@ module ANSI
121
122
  when 1
122
123
  f = @format[cell]
123
124
  when 2
124
- f = @format[row, col]
125
+ f = @format[col, row]
125
126
  else
126
- f = @format[cell, row, col]
127
+ f = @format[cell, col, row]
127
128
  end
128
129
  else
129
130
  f = nil
@@ -0,0 +1,113 @@
1
+ require 'ansi/code'
2
+
3
+ module ANSI
4
+
5
+ # Diff can produced a colorized difference of two string or objects.
6
+ #
7
+ # IMPORTANT! This class is still a very much a work in progress.
8
+ class Diff
9
+
10
+ #
11
+ def initialize(object1, object2, options={})
12
+ @object1 = convert(object1)
13
+ @object2 = convert(object2)
14
+
15
+ @diff1, @diff2 = diff_string(@object1, @object2)
16
+ end
17
+
18
+ #
19
+ def diff1
20
+ @diff1
21
+ end
22
+
23
+ #
24
+ def diff2
25
+ @diff2
26
+ end
27
+
28
+ #
29
+ def to_s
30
+ "#{@diff1}\n#{@diff2}"
31
+ end
32
+
33
+ private
34
+
35
+ # Take two plain strings and produce colorized
36
+ # versions of each highlighting their differences.
37
+ #
38
+ # TODO: I am sure there are better ways to do this,
39
+ # but for now this suffices.
40
+ def diff_string(str1, str2)
41
+ i1, i2 = 0, 0
42
+ m1, m2 = nil, nil
43
+ s1, s2 = "", ""
44
+ t1, t2 = "", ""
45
+ c = 0
46
+
47
+ loop do
48
+ if str1[i1,1] == str2[i2,1]
49
+ s1 << red(t1); t1 = "" unless t1 == ""
50
+ s2 << red(t2); t2 = "" unless t2 == ""
51
+ s1 << str1[i1,1].to_s
52
+ s2 << str2[i2,1].to_s
53
+ i1 += 1; i2 += 1
54
+ #m1 += 1; m2 += 1
55
+ else
56
+ if m1 && str1[m1,1] == str2[i2,1]
57
+ s2 << color1(t2)
58
+ t1, t2 = "", ""
59
+ i1 = m1
60
+ m1, m2 = nil, nil
61
+ elsif m2 && str1[i1,1] == str2[m2,1]
62
+ s1 << color2(t1)
63
+ t1, t2 = "", ""
64
+ i2 = m2
65
+ m1, m2 = nil, nil
66
+ else
67
+ t1 << str1[i1,1].to_s
68
+ t2 << str2[i2,1].to_s
69
+ m1, m2 = i1, i2 if m1 == nil
70
+ i1 += 1; i2 += 1
71
+ end
72
+ end
73
+ break if i1 >= str1.size && i2 >= str2.size
74
+ end
75
+ s1 << red(t1); t1 = "" unless t1 == ""
76
+ s2 << red(t2); t2 = "" unless t2 == ""
77
+ #s1 << ANSI::Code::CLEAR
78
+ #s2 << ANSI::Code::CLEAR
79
+
80
+ return s1, s2
81
+ end
82
+
83
+ #
84
+ def red(str)
85
+ ANSI.color(:red){ str }
86
+ end
87
+
88
+ #
89
+ def color1(str)
90
+ ANSI.color(:blue){ str }
91
+ end
92
+
93
+ #
94
+ def color2(str)
95
+ ANSI.color(:green){ str }
96
+ end
97
+
98
+ # Ensure the object of comparison is a string. If +object+ is not
99
+ # an instance of String then it wll be converted to one by calling
100
+ # either #to_str, if the object responds to it, or #inspect.
101
+ def convert(object)
102
+ if String === object
103
+ object
104
+ elsif object.respond_to?(:to_str)
105
+ object.to_str
106
+ else
107
+ object.inspect
108
+ end
109
+ end
110
+
111
+ end
112
+
113
+ end
@@ -18,7 +18,7 @@ The output will be:
18
18
  b e h k
19
19
  c f i l
20
20
 
21
- Besides and array of elements, Columns.new can take a string in which
21
+ Besides an array of elements, Columns.new can take a string in which
22
22
  the elements are divided by newlines characters. The default column
23
23
  size can also be given to the initializer.
24
24
 
@@ -38,7 +38,7 @@ as a best fit for the current terminal window.
38
38
 
39
39
  == Padding
40
40
 
41
- Columns can adjsut the padding between cells.
41
+ Columns can adjust the padding between cells.
42
42
 
43
43
  list = %w{a b c d e f g h i j k l}
44
44
 
@@ -70,14 +70,14 @@ The output will be:
70
70
 
71
71
  == Format
72
72
 
73
- Lastly, columns can be aguamented with ANSI codes. This is done through
74
- a formating block. The block can take upto three parameters, the cell
75
- content, the row and column numbers, or the cell and the row and column
73
+ Lastly, columns can be augmented with ANSI codes. This is done through
74
+ a formatting block. The block can take up to three parameters, the cell
75
+ content, the column and row numbers, or the cell and the column and row
76
76
  numbers.
77
77
 
78
78
  list = %w{a b c d e f g h i j k l}
79
79
 
80
- columns = ANSI::Columns.new(list){ |r,c| c % 2 == 0 ? :red : :blue }
80
+ columns = ANSI::Columns.new(list){ |c,r| r % 2 == 0 ? :red : :blue }
81
81
 
82
82
  out = columns.to_s(4)
83
83
 
@@ -0,0 +1,47 @@
1
+ = ANSI::Diff
2
+
3
+ require 'ansi/diff'
4
+
5
+ a = 'abcYefg'
6
+ b = 'abcXefg'
7
+
8
+ diff = ANSI::Diff.new(a,b)
9
+
10
+ puts diff.to_s
11
+
12
+ Try another.
13
+
14
+ a = 'abc'
15
+ b = 'abcdef'
16
+
17
+ diff = ANSI::Diff.new(a,b)
18
+
19
+ puts diff.to_s
20
+
21
+ And another.
22
+
23
+ a = 'abcXXXghi'
24
+ b = 'abcdefghi'
25
+
26
+ diff = ANSI::Diff.new(a,b)
27
+
28
+ puts diff.to_s
29
+
30
+ And another.
31
+
32
+ a = 'abcXXXdefghi'
33
+ b = 'abcdefghi'
34
+
35
+ diff = ANSI::Diff.new(a,b)
36
+
37
+ puts diff.to_s
38
+
39
+ Comparison that is mostly different.
40
+
41
+ a = 'abcpppz123'
42
+ b = 'abcxyzzz43'
43
+
44
+ diff = ANSI::Diff.new(a,b)
45
+
46
+ puts diff.to_s
47
+
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ansi
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 2
9
- - 4
10
- version: 1.2.4
9
+ - 5
10
+ version: 1.2.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Thomas Sawyer
@@ -16,11 +16,11 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-05-01 00:00:00 -04:00
19
+ date: 2011-05-05 00:00:00 -04:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
- name: syckle
23
+ name: redline
24
24
  prerelease: false
25
25
  requirement: &id001 !ruby/object:Gem::Requirement
26
26
  none: false
@@ -60,6 +60,7 @@ files:
60
60
  - lib/ansi/bbcode.rb
61
61
  - lib/ansi/code.rb
62
62
  - lib/ansi/columns.rb
63
+ - lib/ansi/diff.rb
63
64
  - lib/ansi/logger.rb
64
65
  - lib/ansi/mixin.rb
65
66
  - lib/ansi/progressbar.rb
@@ -80,6 +81,7 @@ files:
80
81
  - qed/06_string.rdoc
81
82
  - qed/07_columns.rdoc
82
83
  - qed/08_table.rdoc
84
+ - qed/09_diff.rb
83
85
  - qed/applique/output.rb
84
86
  - test/case_ansicode.rb
85
87
  - test/case_bbcode.rb