ansi-sys 0.2.0

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.
@@ -0,0 +1,172 @@
1
+ $:.unshift('lib')
2
+ require 'ansisys'
3
+
4
+ include AnsiSys
5
+ describe SGR, 'when initialized' do
6
+ before do
7
+ @sgr = SGR.new
8
+ end
9
+
10
+ it "should have normal intensity" do @sgr.intensity.should == :normal; end
11
+ it "should have italic off" do @sgr.italic.should == :off; end
12
+ it "should have no underline" do @sgr.underline.should == :none; end
13
+ it "should have blink off" do @sgr.blink.should == :off; end
14
+ it "should have positive image" do @sgr.image.should == :positive; end
15
+ it "should have conceal off" do @sgr.conceal.should == :off; end
16
+ it "should have white foreground color" do @sgr.foreground.should == :white; end
17
+ it "should have black background color" do @sgr.background.should == :black; end
18
+ end
19
+
20
+ describe SGR, 'when two are initialized' do
21
+ before do
22
+ @sgr1 = SGR.new
23
+ @sgr2 = SGR.new
24
+ end
25
+
26
+ it 'should be equal when initialized' do @sgr1.should == @sgr2; end
27
+ it 'should be different after a code is executed' do
28
+ @sgr2.apply_code!(%w(1 m))
29
+ @sgr1.should_not == @sgr2
30
+ end
31
+ end
32
+
33
+ describe SGR, 'when a code is executed' do
34
+ before do
35
+ @sgr = SGR.new
36
+ end
37
+
38
+ class Object
39
+ def change_only(accessor, expected, &block)
40
+ yield(self)
41
+ self.send(accessor).should == expected
42
+ other = self.class.new
43
+ other.instance_variable_set("@#{accessor}", expected)
44
+ other.should == self
45
+ end
46
+ end
47
+
48
+ it 'should treat empty parameter as a code 0' do
49
+ @sgr.apply_code!(['m'])
50
+ @sgr.should == SGR.new
51
+ end
52
+ it 'should have bold intensity with a code 1' do
53
+ @sgr.change_only(:intensity, :bold){|x| x.apply_code!(%w(1 m))}
54
+ end
55
+ it 'should have faint intensity with a code 2' do
56
+ @sgr.change_only(:intensity, :faint){|x| x.apply_code!(%w(2 m))}
57
+ end
58
+ it 'should be italic with a code 3' do
59
+ @sgr.change_only(:italic, :on){|x| x.apply_code!(%w(3 m))}
60
+ end
61
+ it 'should have single underline with a code 4' do
62
+ @sgr.change_only(:underline, :single){|x| x.apply_code!(%w(4 m))}
63
+ end
64
+ it 'should be concealed with a code 8' do
65
+ @sgr.change_only(:conceal, :on){|x| x.apply_code!(%w(8 m))}
66
+ end
67
+ it 'should be revealed with a code 28' do
68
+ @sgr.change_only(:conceal, :off) do |x|
69
+ x.apply_code!(%w(8 m))
70
+ x.apply_code!(%w(28 m))
71
+ end
72
+ end
73
+ it 'should have green foreground with normal intensity with a code 32' do
74
+ @sgr.apply_code!(%w(1 m))
75
+ @sgr.apply_code!(%w(32 m))
76
+ @sgr.foreground.should == :green
77
+ @sgr.intensity.should == :normal
78
+ end
79
+ it 'should have white foreground with normal intensity with a code 39' do
80
+ @sgr.apply_code!(%w(32 m))
81
+ @sgr.apply_code!(%w(1 m))
82
+ @sgr.apply_code!(%w(39 m))
83
+ @sgr.foreground.should == :white
84
+ @sgr.intensity.should == :normal
85
+ end
86
+ it 'should have yellow background with normal intensity with a code 43' do
87
+ @sgr.apply_code!(%w(1 m))
88
+ @sgr.apply_code!(%w(43 m))
89
+ @sgr.background.should == :yellow
90
+ @sgr.intensity.should == :normal
91
+ end
92
+ it 'should have blue foreground with bold intensity with a code 94' do
93
+ @sgr.apply_code!(%w(1 m))
94
+ @sgr.apply_code!(%w(94 m))
95
+ @sgr.foreground.should == :blue
96
+ @sgr.intensity.should == :bold
97
+ end
98
+ it 'should have magenta background with bold intensity with a code 105' do
99
+ @sgr.apply_code!(%w(1 m))
100
+ @sgr.apply_code!(%w(105 m))
101
+ @sgr.background.should == :magenta
102
+ @sgr.intensity.should == :bold
103
+ end
104
+ it 'should have white background with bold intensity with a code 107' do
105
+ @sgr.apply_code!(%w(1 m))
106
+ @sgr.apply_code!(%w(107 m))
107
+ @sgr.background.should == :white
108
+ @sgr.intensity.should == :bold
109
+ end
110
+ end
111
+
112
+ describe SGR, 'when an invalid code is executed' do
113
+ before do
114
+ @sgr = SGR.new
115
+ end
116
+
117
+ [10, -1, 108].each do |invalid_code|
118
+ it "should raise an error with a code #{invalid_code}" do
119
+ lambda{@sgr.apply_code!([invalid_code, 'm'])}.should raise_error(AnsiSysError)
120
+ end
121
+ end
122
+ end
123
+
124
+ describe SGR, 'to be rendered in HTML' do
125
+ before do
126
+ @sgr = SGR.new
127
+ end
128
+
129
+ it "should make no CSS with defalt properties" do
130
+ @sgr.css_style.should == nil
131
+ end
132
+
133
+ it "should change foreground color" do
134
+ @sgr.apply_code!(%w(32 m))
135
+ @sgr.css_styles.should == {'color' => ['green']}
136
+ end
137
+
138
+ it "shuold show underline for ANSI single underline" do
139
+ @sgr.apply_code!(%w(4 m))
140
+ @sgr.css_styles.should == {'text-decoration' => ['underline']}
141
+ end
142
+
143
+ it "shuold show underline for ANSI double underline" do
144
+ @sgr.apply_code!(%w(4 m))
145
+ @sgr.css_styles.should == {'text-decoration' => ['underline']}
146
+ end
147
+
148
+ it "should switch foreground and background colors with reverse video" do
149
+ @sgr.apply_code!(%w(7 m))
150
+ @sgr.css_styles.should == {'color' => ['black'], 'background-color' => ['silver']}
151
+ end
152
+
153
+ it "should blink for ANSI slow blink" do
154
+ @sgr.apply_code!(%w(5 m))
155
+ @sgr.css_styles.should == {'text-decoration' => ['blink']}
156
+ end
157
+
158
+ it "should blink for ANSI fast blink" do
159
+ @sgr.apply_code!(%w(6 m))
160
+ @sgr.css_styles.should == {'text-decoration' => ['blink']}
161
+ end
162
+
163
+ it "should be able to be italic" do
164
+ @sgr.apply_code!(%w(3 m))
165
+ @sgr.css_styles.should == {'font-style' => ['italic']}
166
+ end
167
+
168
+ it "should be able to be invisible" do
169
+ @sgr.apply_code!(%w(8 m))
170
+ @sgr.css_styles.should == {'color' => ['black']}
171
+ end
172
+ end
@@ -0,0 +1 @@
1
+ --colour
@@ -0,0 +1,7 @@
1
+ begin
2
+ require 'spec'
3
+ rescue LoadError
4
+ require 'rubygems'
5
+ gem 'rspec'
6
+ require 'spec'
7
+ end
@@ -0,0 +1,82 @@
1
+ $:.unshift('lib')
2
+ require 'ansisys'
3
+
4
+ include AnsiSys
5
+
6
+ describe Terminal, "when ascii is echoed" do
7
+ before do
8
+ @terminal = Terminal.new
9
+ @terminal.echo("Hello world")
10
+ end
11
+
12
+ it "should render an HTML as the original string" do
13
+ @terminal.render.should == %Q|<pre class="screen">\nHello world</pre>|
14
+ end
15
+
16
+ it "should render a plain text as the original string" do
17
+ @terminal.render(:text).should == 'Hello world'
18
+ end
19
+ end
20
+
21
+ describe Terminal, 'when \n is echoed' do
22
+ before do
23
+ @terminal = Terminal.new
24
+ @terminal.echo("Hello\nworld")
25
+ end
26
+
27
+ it "should render an HTML with two rows" do
28
+ @terminal.render.should == %Q|<pre class="screen">\nHello\nworld</pre>|
29
+ end
30
+
31
+ it "should render a plain text with two rows" do
32
+ @terminal.render(:text).should == %Q|Hello\nworld|
33
+ end
34
+ end
35
+
36
+ describe Terminal, 'when SGR codes are echoed' do
37
+ before do
38
+ @terminal = Terminal.new
39
+ @terminal.echo("Hello \e[32mworld")
40
+ end
41
+
42
+ it "should render an HTML with color in span" do
43
+ @terminal.render.should == %Q|<pre class="screen">\nHello <span style="color: green">world</span></pre>|
44
+ end
45
+
46
+ it "should render a plain text without colors" do
47
+ @terminal.render(:text).should == 'Hello world'
48
+ end
49
+ end
50
+
51
+ describe Terminal, 'when SGR codes are echoed and non-standard colors are used' do
52
+ before do
53
+ @terminal = Terminal.new
54
+ @terminal.echo("Hello \e[32mworld")
55
+ end
56
+
57
+ it "should render an HTML with color in span" do
58
+ @terminal.render(:html, 80, 25, Screen.default_css_colors(false, true)).should == %Q|<pre class="screen">\nHello <span style="color: lime">world</span></pre>|
59
+ end
60
+ end
61
+
62
+ describe Terminal do
63
+ before do
64
+ @terminal = Terminal.new
65
+ end
66
+
67
+ it "should give CSS style-let" do
68
+ c = @terminal.css_style.split(/\n/)
69
+ e = <<"_CSS".split(/\n/)
70
+ pre.screen {
71
+ \tcolor: silver;
72
+ \tbackground-color: black;
73
+ \twidth: 40.0em;
74
+ \tpadding: 0.5em;
75
+ }
76
+ _CSS
77
+ c.size.should == e.size
78
+ c.each do |line|
79
+ e.should include(line)
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,27 @@
1
+ desc 'Release the website and new gem version'
2
+ task :deploy => [:check_version, :website, :release] do
3
+ puts "Remember to create SVN tag:"
4
+ puts "svn copy svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/trunk " +
5
+ "svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/tags/REL-#{VERS} "
6
+ puts "Suggested comment:"
7
+ puts "Tagging release #{CHANGES}"
8
+ end
9
+
10
+ desc 'Runs tasks website_generate and install_gem as a local deployment of the gem'
11
+ task :local_deploy => [:website_generate, :install_gem]
12
+
13
+ task :check_version do
14
+ unless ENV['VERSION']
15
+ puts 'Must pass a VERSION=x.y.z release version'
16
+ exit
17
+ end
18
+ unless ENV['VERSION'] == VERS
19
+ puts "Please update your version.rb to match the release version, currently #{VERS}"
20
+ exit
21
+ end
22
+ end
23
+
24
+ desc 'Install the package as a gem, without generating documentation(ri/rdoc)'
25
+ task :install_gem_no_doc => [:clean, :package] do
26
+ sh "#{'sudo ' unless Hoe::WINDOZE }gem install pkg/*.gem --no-rdoc --no-ri"
27
+ end
@@ -0,0 +1,7 @@
1
+ task :ruby_env do
2
+ RUBY_APP = if RUBY_PLATFORM =~ /java/
3
+ "jruby"
4
+ else
5
+ "ruby"
6
+ end unless defined? RUBY_APP
7
+ end
@@ -0,0 +1,21 @@
1
+ begin
2
+ require 'spec'
3
+ rescue LoadError
4
+ require 'rubygems'
5
+ require 'spec'
6
+ end
7
+ begin
8
+ require 'spec/rake/spectask'
9
+ rescue LoadError
10
+ puts <<-EOS
11
+ To use rspec for testing you must install rspec gem:
12
+ gem install rspec
13
+ EOS
14
+ exit(0)
15
+ end
16
+
17
+ desc "Run the specs under spec/models"
18
+ Spec::Rake::SpecTask.new do |t|
19
+ t.spec_opts = ['--options', "spec/spec.opts"]
20
+ t.spec_files = FileList['spec/*_spec.rb']
21
+ end
@@ -0,0 +1,17 @@
1
+ desc 'Generate website files'
2
+ task :website_generate => :ruby_env do
3
+ (Dir['website/**/*.txt'] - Dir['website/version*.txt']).each do |txt|
4
+ sh %{ #{RUBY_APP} script/txt2html #{txt} > #{txt.gsub(/txt$/,'html')} }
5
+ end
6
+ end
7
+
8
+ desc 'Upload website files to rubyforge'
9
+ task :website_upload do
10
+ host = "#{rubyforge_username}@rubyforge.org"
11
+ remote_dir = "/var/www/gforge-projects/#{RUBYFORGE_PROJECT}/"
12
+ local_dir = 'website'
13
+ sh %{rsync -aCv #{local_dir}/ #{host}:#{remote_dir}}
14
+ end
15
+
16
+ desc 'Generate and upload website files'
17
+ task :website => [:website_generate, :website_upload, :publish_docs]
@@ -0,0 +1,113 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <link rel="stylesheet" href="stylesheets/screen.css" type="text/css" media="screen" />
6
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
7
+ <title>
8
+ Ruby-ANSI.SYS
9
+ </title>
10
+ <script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
11
+ <style>
12
+
13
+ </style>
14
+ <script type="text/javascript">
15
+ window.onload = function() {
16
+ settings = {
17
+ tl: { radius: 10 },
18
+ tr: { radius: 10 },
19
+ bl: { radius: 10 },
20
+ br: { radius: 10 },
21
+ antiAlias: true,
22
+ autoPad: true,
23
+ validTags: ["div"]
24
+ }
25
+ var versionBox = new curvyCorners(settings, document.getElementById("version"));
26
+ versionBox.applyCornersToAll();
27
+ }
28
+ </script>
29
+ </head>
30
+ <body>
31
+ <div id="main">
32
+
33
+ <h1>Ruby-ANSI.SYS</h1>
34
+ <div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/ansi-sys"; return false'>
35
+ <p>Get Version</p>
36
+ <a href="http://rubyforge.org/projects/ansi-sys" class="numbers">0.2.0</a>
37
+ </div>
38
+ <h1>&#x2192; &#8216;ansi-sys&#8217;</h1>
39
+
40
+
41
+ <h2>What</h2>
42
+
43
+
44
+ <p>MS-DOS console (with <code>DEVICE=ANSI.SYS</code>), Linux
45
+ console, and other terminal emulators usually accept escape
46
+ sequences which tell the terminal change colors of the text or
47
+ move the cursor.</p>
48
+
49
+
50
+ <p>Ruby-ANSI.SYS is a Ruby library to render texts with
51
+ <a href="http://en.wikipedia.org/wiki/ANSI_escape_code"><span class="caps">ANSI</span> escape sequences</a>
52
+ (Wikipedia) as an <span class="caps">HTML</span> fragment . It can also be used as a plugin
53
+ for Hiki.</p>
54
+
55
+
56
+ <h2>Download</h2>
57
+
58
+
59
+ <p>Have a look at
60
+ <a href="http://rubyforge.org/projects/ansi-sys">the RubyForge Project Info</a></p>
61
+
62
+
63
+ <h2>Installation</h2>
64
+
65
+
66
+ <p>As a Ruby library:</p>
67
+
68
+
69
+ <pre>$ ruby setup.rb config
70
+ $ ruby setup.rb setup
71
+ # ruby setup.rb install</pre>
72
+
73
+ <p>As a Hiki plugin, copy the file lib/ansisys.rb into the
74
+ misc/plugin directory and configure Hiki to enable the plugin.</p>
75
+
76
+
77
+ <h2>Usage</h2>
78
+
79
+
80
+ <p>As a Ruby library:</p>
81
+
82
+
83
+ <pre>terminal = Terminal.new
84
+ terminal.echo("ansi-escaped-text")
85
+ terminal.render #=&gt; HTML fragment</pre>
86
+
87
+ <p>As a Hiki plugin:</p>
88
+
89
+
90
+ <pre>{{ansi_screen(attach_file_name)}}</pre>
91
+
92
+ <h2>Contact</h2>
93
+
94
+
95
+ <p>Please send your comments and patches to
96
+ <a href="http://rubyforge.org/tracker/?group_id=4656">the RubyForge Trackers</a></p>
97
+
98
+
99
+ <h2>License</h2>
100
+
101
+
102
+ <p>Please refer
103
+ <a href="rdoc/files/License_txt.html">License.txt</a></p>
104
+ <p class="coda">
105
+ zunda, 20th October 2007<br>
106
+ Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
107
+ </p>
108
+ </div>
109
+
110
+ <!-- insert site tracking codes here, like Google Urchin -->
111
+
112
+ </body>
113
+ </html>