coderay 0.9.8 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. data/{lib/README → README_INDEX.rdoc} +10 -21
  2. data/Rakefile +6 -6
  3. data/bin/coderay +193 -64
  4. data/lib/coderay.rb +61 -105
  5. data/lib/coderay/duo.rb +17 -21
  6. data/lib/coderay/encoder.rb +100 -112
  7. data/lib/coderay/encoders/_map.rb +12 -7
  8. data/lib/coderay/encoders/comment_filter.rb +12 -30
  9. data/lib/coderay/encoders/count.rb +29 -11
  10. data/lib/coderay/encoders/debug.rb +32 -20
  11. data/lib/coderay/encoders/div.rb +13 -9
  12. data/lib/coderay/encoders/filter.rb +34 -51
  13. data/lib/coderay/encoders/html.rb +155 -161
  14. data/lib/coderay/encoders/html/css.rb +4 -9
  15. data/lib/coderay/encoders/html/numbering.rb +115 -0
  16. data/lib/coderay/encoders/html/output.rb +22 -70
  17. data/lib/coderay/encoders/json.rb +59 -45
  18. data/lib/coderay/encoders/lines_of_code.rb +12 -57
  19. data/lib/coderay/encoders/null.rb +6 -14
  20. data/lib/coderay/encoders/page.rb +13 -9
  21. data/lib/coderay/encoders/span.rb +13 -9
  22. data/lib/coderay/encoders/statistic.rb +58 -39
  23. data/lib/coderay/encoders/terminal.rb +179 -0
  24. data/lib/coderay/encoders/text.rb +31 -17
  25. data/lib/coderay/encoders/token_kind_filter.rb +111 -0
  26. data/lib/coderay/encoders/xml.rb +19 -18
  27. data/lib/coderay/encoders/yaml.rb +37 -9
  28. data/lib/coderay/for_redcloth.rb +4 -4
  29. data/lib/coderay/helpers/file_type.rb +127 -246
  30. data/lib/coderay/helpers/gzip.rb +41 -0
  31. data/lib/coderay/helpers/plugin.rb +241 -306
  32. data/lib/coderay/helpers/word_list.rb +65 -126
  33. data/lib/coderay/scanner.rb +173 -156
  34. data/lib/coderay/scanners/_map.rb +18 -17
  35. data/lib/coderay/scanners/c.rb +63 -77
  36. data/lib/coderay/scanners/clojure.rb +217 -0
  37. data/lib/coderay/scanners/cpp.rb +71 -84
  38. data/lib/coderay/scanners/css.rb +103 -120
  39. data/lib/coderay/scanners/debug.rb +47 -44
  40. data/lib/coderay/scanners/delphi.rb +70 -76
  41. data/lib/coderay/scanners/diff.rb +141 -50
  42. data/lib/coderay/scanners/erb.rb +81 -0
  43. data/lib/coderay/scanners/groovy.rb +104 -113
  44. data/lib/coderay/scanners/haml.rb +168 -0
  45. data/lib/coderay/scanners/html.rb +181 -110
  46. data/lib/coderay/scanners/java.rb +73 -75
  47. data/lib/coderay/scanners/java/builtin_types.rb +2 -0
  48. data/lib/coderay/scanners/java_script.rb +90 -101
  49. data/lib/coderay/scanners/json.rb +40 -53
  50. data/lib/coderay/scanners/php.rb +123 -147
  51. data/lib/coderay/scanners/python.rb +93 -91
  52. data/lib/coderay/scanners/raydebug.rb +66 -0
  53. data/lib/coderay/scanners/ruby.rb +343 -326
  54. data/lib/coderay/scanners/ruby/patterns.rb +40 -106
  55. data/lib/coderay/scanners/ruby/string_state.rb +71 -0
  56. data/lib/coderay/scanners/sql.rb +80 -66
  57. data/lib/coderay/scanners/text.rb +26 -0
  58. data/lib/coderay/scanners/xml.rb +1 -1
  59. data/lib/coderay/scanners/yaml.rb +74 -73
  60. data/lib/coderay/style.rb +10 -7
  61. data/lib/coderay/styles/_map.rb +3 -3
  62. data/lib/coderay/styles/alpha.rb +143 -0
  63. data/lib/coderay/token_kinds.rb +90 -0
  64. data/lib/coderay/tokens.rb +102 -277
  65. data/lib/coderay/tokens_proxy.rb +55 -0
  66. data/lib/coderay/version.rb +3 -0
  67. data/test/functional/basic.rb +200 -18
  68. data/test/functional/examples.rb +130 -0
  69. data/test/functional/for_redcloth.rb +15 -8
  70. data/test/functional/suite.rb +9 -6
  71. metadata +103 -123
  72. data/FOLDERS +0 -53
  73. data/bin/coderay_stylesheet +0 -4
  74. data/lib/coderay/encoders/html/numerization.rb +0 -133
  75. data/lib/coderay/encoders/term.rb +0 -158
  76. data/lib/coderay/encoders/token_class_filter.rb +0 -84
  77. data/lib/coderay/helpers/gzip_simple.rb +0 -123
  78. data/lib/coderay/scanners/nitro_xhtml.rb +0 -136
  79. data/lib/coderay/scanners/plaintext.rb +0 -20
  80. data/lib/coderay/scanners/rhtml.rb +0 -78
  81. data/lib/coderay/scanners/scheme.rb +0 -145
  82. data/lib/coderay/styles/cycnus.rb +0 -152
  83. data/lib/coderay/styles/murphy.rb +0 -134
  84. data/lib/coderay/token_classes.rb +0 -86
  85. data/test/functional/load_plugin_scanner.rb +0 -11
  86. data/test/functional/vhdl.rb +0 -126
  87. data/test/functional/word_list.rb +0 -79
@@ -1,5 +1,7 @@
1
1
  require 'test/unit'
2
- $:.unshift 'lib'
2
+ require File.expand_path('../../lib/assert_warning', __FILE__)
3
+
4
+ $:.unshift File.expand_path('../../../lib', __FILE__)
3
5
  require 'coderay'
4
6
 
5
7
  begin
@@ -8,17 +10,18 @@ begin
8
10
  require 'redcloth'
9
11
  rescue LoadError
10
12
  warn 'RedCloth not found - skipping for_redcloth tests.'
13
+ undef RedCloth if defined? RedCloth
11
14
  end
12
15
 
13
16
  class BasicTest < Test::Unit::TestCase
14
17
 
15
18
  def test_for_redcloth
16
19
  require 'coderay/for_redcloth'
17
- assert_equal "<p><span lang=\"ruby\" class=\"CodeRay\">puts <span style=\"background-color:#fff0f0;color:#D20\"><span style=\"color:#710\">&quot;</span><span style=\"\">Hello, World!</span><span style=\"color:#710\">&quot;</span></span></span></p>",
20
+ assert_equal "<p><span lang=\"ruby\" class=\"CodeRay\">puts <span style=\"background-color:hsla(0,100%,50%,0.05)\"><span style=\"color:#710\">&quot;</span><span style=\"color:#D20\">Hello, World!</span><span style=\"color:#710\">&quot;</span></span></span></p>",
18
21
  RedCloth.new('@[ruby]puts "Hello, World!"@').to_html
19
22
  assert_equal <<-BLOCKCODE.chomp,
20
23
  <div lang="ruby" class="CodeRay">
21
- <div class="code"><pre>puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">Hello, World!</span><span style="color:#710">&quot;</span></span></pre></div>
24
+ <div class="code"><pre>puts <span style="background-color:hsla(0,100%,50%,0.05)"><span style="color:#710">&quot;</span><span style="color:#D20">Hello, World!</span><span style="color:#710">&quot;</span></span></pre></div>
22
25
  </div>
23
26
  BLOCKCODE
24
27
  RedCloth.new('bc[ruby]. puts "Hello, World!"').to_html
@@ -63,15 +66,19 @@ class BasicTest < Test::Unit::TestCase
63
66
  # See http://jgarber.lighthouseapp.com/projects/13054/tickets/124-code-markup-does-not-allow-brackets.
64
67
  def test_for_redcloth_false_positive
65
68
  require 'coderay/for_redcloth'
66
- assert_equal '<p><code>[project]_dff.skjd</code></p>',
67
- RedCloth.new('@[project]_dff.skjd@').to_html
69
+ assert_warning 'CodeRay::Scanners could not load plugin :project; falling back to :text' do
70
+ assert_equal '<p><code>[project]_dff.skjd</code></p>',
71
+ RedCloth.new('@[project]_dff.skjd@').to_html
72
+ end
68
73
  # false positive, but expected behavior / known issue
69
74
  assert_equal "<p><span lang=\"ruby\" class=\"CodeRay\">_dff.skjd</span></p>",
70
75
  RedCloth.new('@[ruby]_dff.skjd@').to_html
71
- assert_equal <<-BLOCKCODE.chomp,
76
+ assert_warning 'CodeRay::Scanners could not load plugin :project; falling back to :text' do
77
+ assert_equal <<-BLOCKCODE.chomp,
72
78
  <pre><code>[project]_dff.skjd</code></pre>
73
- BLOCKCODE
74
- RedCloth.new('bc. [project]_dff.skjd').to_html
79
+ BLOCKCODE
80
+ RedCloth.new('bc. [project]_dff.skjd').to_html
81
+ end
75
82
  end
76
83
 
77
84
  end if defined? RedCloth
@@ -1,12 +1,15 @@
1
1
  require 'test/unit'
2
2
 
3
- MYDIR = File.dirname(__FILE__)
4
-
5
- $:.unshift 'lib'
3
+ $VERBOSE = $CODERAY_DEBUG = true
4
+ $:.unshift File.expand_path('../../../lib', __FILE__)
6
5
  require 'coderay'
7
- puts "Running basic CodeRay #{CodeRay::VERSION} tests..."
8
6
 
9
- suite = %w(basic load_plugin_scanner word_list)
7
+ mydir = File.dirname(__FILE__)
8
+ suite = Dir[File.join(mydir, '*.rb')].
9
+ map { |tc| File.basename(tc).sub(/\.rb$/, '') } - %w'suite for_redcloth'
10
+
11
+ puts "Running basic CodeRay #{CodeRay::VERSION} tests: #{suite.join(', ')}"
12
+
10
13
  for test_case in suite
11
- load File.join(MYDIR, test_case + '.rb')
14
+ load File.join(mydir, test_case + '.rb')
12
15
  end
metadata CHANGED
@@ -1,146 +1,126 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: coderay
3
- version: !ruby/object:Gem::Version
4
- hash: 43
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 9
9
- - 8
10
- version: 0.9.8
11
6
  platform: ruby
12
- authors:
13
- - murphy
7
+ authors:
8
+ - Kornelius Kalnbach
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-05-01 00:00:00 Z
12
+ date: 2011-09-21 00:00:00.000000000Z
19
13
  dependencies: []
20
-
21
- description: |
22
- Fast and easy syntax highlighting for selected languages, written in Ruby.
23
- Comes with RedCloth integration and LOC counter.
24
-
25
- email: murphy@rubychan.de
26
- executables:
14
+ description: Fast and easy syntax highlighting for selected languages, written in
15
+ Ruby. Comes with RedCloth integration and LOC counter.
16
+ email:
17
+ - murphy@rubychan.de
18
+ executables:
27
19
  - coderay
28
- - coderay_stylesheet
29
20
  extensions: []
30
-
31
- extra_rdoc_files:
32
- - lib/README
33
- - FOLDERS
34
- files:
35
- - ./lib/coderay/duo.rb
36
- - ./lib/coderay/encoder.rb
37
- - ./lib/coderay/encoders/_map.rb
38
- - ./lib/coderay/encoders/comment_filter.rb
39
- - ./lib/coderay/encoders/count.rb
40
- - ./lib/coderay/encoders/debug.rb
41
- - ./lib/coderay/encoders/div.rb
42
- - ./lib/coderay/encoders/filter.rb
43
- - ./lib/coderay/encoders/html/css.rb
44
- - ./lib/coderay/encoders/html/numerization.rb
45
- - ./lib/coderay/encoders/html/output.rb
46
- - ./lib/coderay/encoders/html.rb
47
- - ./lib/coderay/encoders/json.rb
48
- - ./lib/coderay/encoders/lines_of_code.rb
49
- - ./lib/coderay/encoders/null.rb
50
- - ./lib/coderay/encoders/page.rb
51
- - ./lib/coderay/encoders/span.rb
52
- - ./lib/coderay/encoders/statistic.rb
53
- - ./lib/coderay/encoders/term.rb
54
- - ./lib/coderay/encoders/text.rb
55
- - ./lib/coderay/encoders/token_class_filter.rb
56
- - ./lib/coderay/encoders/xml.rb
57
- - ./lib/coderay/encoders/yaml.rb
58
- - ./lib/coderay/for_redcloth.rb
59
- - ./lib/coderay/helpers/file_type.rb
60
- - ./lib/coderay/helpers/gzip_simple.rb
61
- - ./lib/coderay/helpers/plugin.rb
62
- - ./lib/coderay/helpers/word_list.rb
63
- - ./lib/coderay/scanner.rb
64
- - ./lib/coderay/scanners/_map.rb
65
- - ./lib/coderay/scanners/c.rb
66
- - ./lib/coderay/scanners/cpp.rb
67
- - ./lib/coderay/scanners/css.rb
68
- - ./lib/coderay/scanners/debug.rb
69
- - ./lib/coderay/scanners/delphi.rb
70
- - ./lib/coderay/scanners/diff.rb
71
- - ./lib/coderay/scanners/groovy.rb
72
- - ./lib/coderay/scanners/html.rb
73
- - ./lib/coderay/scanners/java/builtin_types.rb
74
- - ./lib/coderay/scanners/java.rb
75
- - ./lib/coderay/scanners/java_script.rb
76
- - ./lib/coderay/scanners/json.rb
77
- - ./lib/coderay/scanners/nitro_xhtml.rb
78
- - ./lib/coderay/scanners/php.rb
79
- - ./lib/coderay/scanners/plaintext.rb
80
- - ./lib/coderay/scanners/python.rb
81
- - ./lib/coderay/scanners/rhtml.rb
82
- - ./lib/coderay/scanners/ruby/patterns.rb
83
- - ./lib/coderay/scanners/ruby.rb
84
- - ./lib/coderay/scanners/scheme.rb
85
- - ./lib/coderay/scanners/sql.rb
86
- - ./lib/coderay/scanners/xml.rb
87
- - ./lib/coderay/scanners/yaml.rb
88
- - ./lib/coderay/style.rb
89
- - ./lib/coderay/styles/_map.rb
90
- - ./lib/coderay/styles/cycnus.rb
91
- - ./lib/coderay/styles/murphy.rb
92
- - ./lib/coderay/token_classes.rb
93
- - ./lib/coderay/tokens.rb
94
- - ./lib/coderay.rb
95
- - ./Rakefile
96
- - ./test/functional/basic.rb
97
- - ./test/functional/for_redcloth.rb
98
- - ./test/functional/load_plugin_scanner.rb
99
- - ./test/functional/suite.rb
100
- - ./test/functional/vhdl.rb
101
- - ./test/functional/word_list.rb
102
- - ./lib/README
103
- - ./LICENSE
104
- - lib/README
105
- - FOLDERS
21
+ extra_rdoc_files:
22
+ - README_INDEX.rdoc
23
+ files:
24
+ - LICENSE
25
+ - README_INDEX.rdoc
26
+ - Rakefile
27
+ - lib/coderay.rb
28
+ - lib/coderay/duo.rb
29
+ - lib/coderay/encoder.rb
30
+ - lib/coderay/encoders/_map.rb
31
+ - lib/coderay/encoders/comment_filter.rb
32
+ - lib/coderay/encoders/count.rb
33
+ - lib/coderay/encoders/debug.rb
34
+ - lib/coderay/encoders/div.rb
35
+ - lib/coderay/encoders/filter.rb
36
+ - lib/coderay/encoders/html.rb
37
+ - lib/coderay/encoders/html/css.rb
38
+ - lib/coderay/encoders/html/numbering.rb
39
+ - lib/coderay/encoders/html/output.rb
40
+ - lib/coderay/encoders/json.rb
41
+ - lib/coderay/encoders/lines_of_code.rb
42
+ - lib/coderay/encoders/null.rb
43
+ - lib/coderay/encoders/page.rb
44
+ - lib/coderay/encoders/span.rb
45
+ - lib/coderay/encoders/statistic.rb
46
+ - lib/coderay/encoders/terminal.rb
47
+ - lib/coderay/encoders/text.rb
48
+ - lib/coderay/encoders/token_kind_filter.rb
49
+ - lib/coderay/encoders/xml.rb
50
+ - lib/coderay/encoders/yaml.rb
51
+ - lib/coderay/for_redcloth.rb
52
+ - lib/coderay/helpers/file_type.rb
53
+ - lib/coderay/helpers/gzip.rb
54
+ - lib/coderay/helpers/plugin.rb
55
+ - lib/coderay/helpers/word_list.rb
56
+ - lib/coderay/scanner.rb
57
+ - lib/coderay/scanners/_map.rb
58
+ - lib/coderay/scanners/c.rb
59
+ - lib/coderay/scanners/clojure.rb
60
+ - lib/coderay/scanners/cpp.rb
61
+ - lib/coderay/scanners/css.rb
62
+ - lib/coderay/scanners/debug.rb
63
+ - lib/coderay/scanners/delphi.rb
64
+ - lib/coderay/scanners/diff.rb
65
+ - lib/coderay/scanners/erb.rb
66
+ - lib/coderay/scanners/groovy.rb
67
+ - lib/coderay/scanners/haml.rb
68
+ - lib/coderay/scanners/html.rb
69
+ - lib/coderay/scanners/java.rb
70
+ - lib/coderay/scanners/java/builtin_types.rb
71
+ - lib/coderay/scanners/java_script.rb
72
+ - lib/coderay/scanners/json.rb
73
+ - lib/coderay/scanners/php.rb
74
+ - lib/coderay/scanners/python.rb
75
+ - lib/coderay/scanners/raydebug.rb
76
+ - lib/coderay/scanners/ruby.rb
77
+ - lib/coderay/scanners/ruby/patterns.rb
78
+ - lib/coderay/scanners/ruby/string_state.rb
79
+ - lib/coderay/scanners/sql.rb
80
+ - lib/coderay/scanners/text.rb
81
+ - lib/coderay/scanners/xml.rb
82
+ - lib/coderay/scanners/yaml.rb
83
+ - lib/coderay/style.rb
84
+ - lib/coderay/styles/_map.rb
85
+ - lib/coderay/styles/alpha.rb
86
+ - lib/coderay/token_kinds.rb
87
+ - lib/coderay/tokens.rb
88
+ - lib/coderay/tokens_proxy.rb
89
+ - lib/coderay/version.rb
90
+ - test/functional/basic.rb
91
+ - test/functional/examples.rb
92
+ - test/functional/for_redcloth.rb
93
+ - test/functional/suite.rb
106
94
  - bin/coderay
107
- - bin/coderay_stylesheet
108
95
  homepage: http://coderay.rubychan.de
109
96
  licenses: []
110
-
111
97
  post_install_message:
112
- rdoc_options:
98
+ rdoc_options:
113
99
  - -SNw2
114
- - -mlib/README
100
+ - -mREADME_INDEX.rdoc
115
101
  - -t CodeRay Documentation
116
- require_paths:
102
+ require_paths:
117
103
  - lib
118
- required_ruby_version: !ruby/object:Gem::Requirement
104
+ required_ruby_version: !ruby/object:Gem::Requirement
119
105
  none: false
120
- requirements:
121
- - - ">="
122
- - !ruby/object:Gem::Version
123
- hash: 51
124
- segments:
125
- - 1
126
- - 8
127
- - 2
128
- version: 1.8.2
129
- required_rubygems_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: 1.8.6
110
+ required_rubygems_version: !ruby/object:Gem::Requirement
130
111
  none: false
131
- requirements:
132
- - - ">="
133
- - !ruby/object:Gem::Version
134
- hash: 3
135
- segments:
136
- - 0
137
- version: "0"
112
+ requirements:
113
+ - - ! '>='
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
138
116
  requirements: []
139
-
140
117
  rubyforge_project: coderay
141
- rubygems_version: 1.7.2
118
+ rubygems_version: 1.8.10
142
119
  signing_key:
143
120
  specification_version: 3
144
121
  summary: Fast syntax highlighting for selected languages.
145
- test_files:
146
- - ./test/functional/suite.rb
122
+ test_files:
123
+ - test/functional/basic.rb
124
+ - test/functional/examples.rb
125
+ - test/functional/for_redcloth.rb
126
+ - test/functional/suite.rb
data/FOLDERS DELETED
@@ -1,53 +0,0 @@
1
- = CodeRay - Trunk folder structure
2
-
3
- == bench - Benchmarking system
4
-
5
- All benchmarking stuff goes here.
6
-
7
- Test inputs are stored in files named <code>example.<lang></code>.
8
- Test outputs go to <code>bench/test.<encoder-default-file-extension></code>.
9
-
10
- Run <code>bench/bench.rb</code> to get a usage description.
11
-
12
- Run <code>rake bench</code> to perform an example benchmark.
13
-
14
-
15
- == bin - Scripts
16
-
17
- Executional files for CodeRay.
18
-
19
-
20
- == demo - Demos and functional tests
21
-
22
- Demonstrational scripts to show of CodeRay's features.
23
-
24
- Run them as functional tests with <code>rake test:demos</code>.
25
-
26
-
27
- == etc - Lots of stuff
28
-
29
- Some addidtional files for CodeRay, mainly graphics and Vim scripts.
30
-
31
-
32
- == gem_server - Gem output folder
33
-
34
- For <code>rake gem</code>.
35
-
36
-
37
- == lib - CodeRay library code
38
-
39
- This is the base directory for the CodeRay library.
40
-
41
-
42
- == rake_helpers - Rake helper libraries
43
-
44
- Some files to enhance Rake, including the Autumnal Rdoc template and some scripts.
45
-
46
-
47
- == test - Tests
48
-
49
- Tests for the scanners.
50
-
51
- Each language has its own subfolder and sub-suite.
52
-
53
- Run with <code>rake test</code>.
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'coderay'
3
-
4
- puts CodeRay::Encoders[:html]::CSS.new.stylesheet
@@ -1,133 +0,0 @@
1
- module CodeRay
2
- module Encoders
3
-
4
- class HTML
5
-
6
- module Output
7
-
8
- def numerize *args
9
- clone.numerize!(*args)
10
- end
11
-
12
- =begin NUMERIZABLE_WRAPPINGS = {
13
- :table => [:div, :page, nil],
14
- :inline => :all,
15
- :list => [:div, :page, nil]
16
- }
17
- NUMERIZABLE_WRAPPINGS.default = :all
18
- =end
19
- def numerize! mode = :table, options = {}
20
- return self unless mode
21
-
22
- options = DEFAULT_OPTIONS.merge options
23
-
24
- start = options[:line_number_start]
25
- unless start.is_a? Integer
26
- raise ArgumentError, "Invalid value %p for :line_number_start; Integer expected." % start
27
- end
28
-
29
- #allowed_wrappings = NUMERIZABLE_WRAPPINGS[mode]
30
- #unless allowed_wrappings == :all or allowed_wrappings.include? options[:wrap]
31
- # raise ArgumentError, "Can't numerize, :wrap must be in %p, but is %p" % [NUMERIZABLE_WRAPPINGS, options[:wrap]]
32
- #end
33
-
34
- bold_every = options[:bold_every]
35
- highlight_lines = options[:highlight_lines]
36
- bolding =
37
- if bold_every == false && highlight_lines == nil
38
- proc { |line| line.to_s }
39
- elsif highlight_lines.is_a? Enumerable
40
- highlight_lines = highlight_lines.to_set
41
- proc do |line|
42
- if highlight_lines.include? line
43
- "<strong class=\"highlighted\">#{line}</strong>" # highlighted line numbers in bold
44
- else
45
- line.to_s
46
- end
47
- end
48
- elsif bold_every.is_a? Integer
49
- raise ArgumentError, ":bolding can't be 0." if bold_every == 0
50
- proc do |line|
51
- if line % bold_every == 0
52
- "<strong>#{line}</strong>" # every bold_every-th number in bold
53
- else
54
- line.to_s
55
- end
56
- end
57
- else
58
- raise ArgumentError, 'Invalid value %p for :bolding; false or Integer expected.' % bold_every
59
- end
60
-
61
- case mode
62
- when :inline
63
- max_width = (start + line_count).to_s.size
64
- line_number = start
65
- gsub!(/^/) do
66
- line_number_text = bolding.call line_number
67
- indent = ' ' * (max_width - line_number.to_s.size) # TODO: Optimize (10^x)
68
- res = "<span class=\"no\">#{indent}#{line_number_text}</span> "
69
- line_number += 1
70
- res
71
- end
72
-
73
- when :table
74
- # This is really ugly.
75
- # Because even monospace fonts seem to have different heights when bold,
76
- # I make the newline bold, both in the code and the line numbers.
77
- # FIXME Still not working perfect for Mr. Internet Exploder
78
- line_numbers = (start ... start + line_count).to_a.map(&bolding).join("\n")
79
- line_numbers << "\n" # also for Mr. MS Internet Exploder :-/
80
- line_numbers.gsub!(/\n/) { "<tt>\n</tt>" }
81
-
82
- line_numbers_table_tpl = TABLE.apply('LINE_NUMBERS', line_numbers)
83
- gsub!("</div>\n", '</div>')
84
- gsub!("\n", "<tt>\n</tt>")
85
- wrap_in! line_numbers_table_tpl
86
- @wrapped_in = :div
87
-
88
- when :list
89
- opened_tags = []
90
- gsub!(/^.*$\n?/) do |line|
91
- line.chomp!
92
-
93
- open = opened_tags.join
94
- line.scan(%r!<(/)?span[^>]*>?!) do |close,|
95
- if close
96
- opened_tags.pop
97
- else
98
- opened_tags << $&
99
- end
100
- end
101
- close = '</span>' * opened_tags.size
102
-
103
- "<li>#{open}#{line}#{close}</li>\n"
104
- end
105
- chomp!("\n")
106
- wrap_in! LIST
107
- @wrapped_in = :div
108
-
109
- else
110
- raise ArgumentError, 'Unknown value %p for mode: expected one of %p' %
111
- [mode, [:table, :list, :inline]]
112
- end
113
-
114
- self
115
- end
116
-
117
- def line_count
118
- line_count = count("\n")
119
- position_of_last_newline = rindex(?\n)
120
- if position_of_last_newline
121
- after_last_newline = self[position_of_last_newline + 1 .. -1]
122
- ends_with_newline = after_last_newline[/\A(?:<\/span>)*\z/]
123
- line_count += 1 if not ends_with_newline
124
- end
125
- line_count
126
- end
127
-
128
- end
129
-
130
- end
131
-
132
- end
133
- end