ansi 1.2.4 → 1.2.5

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