kramdown-syntax-coderay 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: b9ff914162352505548ed4030c8459dc662f703bac13db5c018d4509a8f3abab
4
+ data.tar.gz: fca3f23ba27c5fc0ed3e8312c771997bcc8fd6f2cd648ff161c20dc164c32026
5
+ SHA512:
6
+ metadata.gz: 8adb57e22b44fba6df4702d9bb30b714ab7b4e2a89a6c42d83f7708e22ecce634dd7263a63e1389691f60fb76e0c618ac96b92865d2b1b1c4cd9ca54bed2f3ba
7
+ data.tar.gz: 1963926f4d89f97a39b99f98b208ac4b09007ab944710e443d211c10c0019da9cbdc9233a318f8ed61c0ada9d4583195fdcb215aabeb46520b654789692a6de5
data/CONTRIBUTERS ADDED
@@ -0,0 +1,3 @@
1
+ Count Name
2
+ ======= ====
3
+ 1 Thomas Leitner <t_leitner@gmx.at>
data/COPYING ADDED
@@ -0,0 +1,21 @@
1
+ kramdown-syntax-coderay
2
+ Copyright (C) 2019 Thomas Leitner <t_leitner@gmx.at>
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a
5
+ copy of this software and associated documentation files (the
6
+ "Software"), to deal in the Software without restriction, including
7
+ without limitation the rights to use, copy, modify, merge, publish,
8
+ distribute, sublicense, and/or sell copies of the Software, and to
9
+ permit persons to whom the Software is furnished to do so, subject to
10
+ the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included
13
+ in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.0.0
@@ -0,0 +1,10 @@
1
+ # -*- coding: utf-8; frozen_string_literal: true -*-
2
+ #
3
+ #--
4
+ # Copyright (C) 2019 Thomas Leitner <t_leitner@gmx.at>
5
+ #
6
+ # This file is part of kramdown-syntax-coderay which is licensed under the MIT.
7
+ #++
8
+ #
9
+
10
+ require 'kramdown/converter/syntax_highlighter/coderay'
@@ -0,0 +1,169 @@
1
+ # -*- coding: utf-8; frozen_string_literal: true -*-
2
+ #
3
+ #--
4
+ # Copyright (C) 2019 Thomas Leitner <t_leitner@gmx.at>
5
+ #
6
+ # This file is part of kramdown-syntax-coderay which is licensed under the MIT.
7
+ #++
8
+ #
9
+
10
+ require 'kramdown/options'
11
+ require 'kramdown/converter'
12
+ require 'coderay'
13
+
14
+ module Kramdown #:nodoc:
15
+
16
+ module Options #:nodoc:
17
+
18
+ define(:enable_coderay, Boolean, true, <<EOF)
19
+ Use coderay for syntax highlighting
20
+
21
+ If this option is `true`, coderay is used by the HTML converter for
22
+ syntax highlighting the content of code spans and code blocks.
23
+
24
+ Default: true
25
+ Used by: HTML converter
26
+ EOF
27
+
28
+ define(:coderay_wrap, Symbol, :div, <<EOF)
29
+ Defines how the highlighted code should be wrapped
30
+
31
+ The possible values are :span, :div or nil.
32
+
33
+ Default: :div
34
+ Used by: HTML converter
35
+ EOF
36
+
37
+ define(:coderay_line_numbers, Symbol, :inline, <<EOF)
38
+ Defines how and if line numbers should be shown
39
+
40
+ The possible values are :table, :inline or nil. If this option is
41
+ nil, no line numbers are shown.
42
+
43
+ Default: :inline
44
+ Used by: HTML converter
45
+ EOF
46
+
47
+ define(:coderay_line_number_start, Integer, 1, <<EOF)
48
+ The start value for the line numbers
49
+
50
+ Default: 1
51
+ Used by: HTML converter
52
+ EOF
53
+
54
+ define(:coderay_tab_width, Integer, 8, <<EOF)
55
+ The tab width used in highlighted code
56
+
57
+ Used by: HTML converter
58
+ EOF
59
+
60
+ define(:coderay_bold_every, Object, 10, <<EOF) do |val|
61
+ Defines how often a line number should be made bold
62
+
63
+ Can either be an integer or false (to turn off bold line numbers
64
+ completely).
65
+
66
+ Default: 10
67
+ Used by: HTML converter
68
+ EOF
69
+ if val == false || val.to_s == 'false'
70
+ false
71
+ else
72
+ Integer(val.to_s) rescue raise Kramdown::Error, "Invalid value for option 'coderay_bold_every'"
73
+ end
74
+ end
75
+
76
+ define(:coderay_css, Symbol, :style, <<EOF)
77
+ Defines how the highlighted code gets styled
78
+
79
+ Possible values are :class (CSS classes are applied to the code
80
+ elements, one must supply the needed CSS file) or :style (default CSS
81
+ styles are directly applied to the code elements).
82
+
83
+ Default: style
84
+ Used by: HTML converter
85
+ EOF
86
+
87
+ define(:coderay_default_lang, Symbol, nil, <<EOF)
88
+ Sets the default language for highlighting code blocks
89
+
90
+ If no language is set for a code block, the default language is used
91
+ instead. The value has to be one of the languages supported by coderay
92
+ or nil if no default language should be used.
93
+
94
+ Default: nil
95
+ Used by: HTML converter
96
+ EOF
97
+
98
+ end
99
+
100
+ module Converter #:nodoc:
101
+ module SyntaxHighlighter #:nodoc:
102
+
103
+ # Uses Coderay to highlight code blocks and code spans.
104
+ module Coderay
105
+
106
+ VERSION = '1.0.0'
107
+
108
+ def self.call(converter, text, lang, type, call_opts)
109
+ return nil unless converter.options[:enable_coderay]
110
+ if type == :span && lang
111
+ ::CodeRay.scan(text, lang.to_sym).html(options(converter, :span)).chomp
112
+ elsif type == :block && (lang || options(converter, :default_lang))
113
+ lang ||= call_opts[:default_lang] = options(converter, :default_lang)
114
+ ::CodeRay.scan(text, lang.to_s.tr('-', '_').to_sym).html(options(converter, :block)).chomp << "\n"
115
+ else
116
+ nil
117
+ end
118
+ rescue StandardError
119
+ converter.warning("There was an error using CodeRay: #{$!.message}")
120
+ nil
121
+ end
122
+
123
+ def self.options(converter, type)
124
+ prepare_options(converter)
125
+ converter.data[:syntax_highlighter_coderay][type]
126
+ end
127
+
128
+ def self.prepare_options(converter)
129
+ return if converter.data.key?(:syntax_highlighter_coderay)
130
+
131
+ cache = converter.data[:syntax_highlighter_coderay] = {}
132
+
133
+ opts = converter.options[:syntax_highlighter_opts].dup
134
+ span_opts = (opts.delete(:span) || {}).dup
135
+ block_opts = (opts.delete(:block) || {}).dup
136
+ [span_opts, block_opts].each do |hash|
137
+ hash.keys.each do |k|
138
+ hash[k.kind_of?(String) ? ::Kramdown::Options.str_to_sym(k) : k] = hash.delete(k)
139
+ end
140
+ end
141
+
142
+ cache[:default_lang] = converter.options[:coderay_default_lang] || opts.delete(:default_lang)
143
+ cache[:span] = {
144
+ css: converter.options[:coderay_css],
145
+ }.update(opts).update(span_opts).update(wrap: :span)
146
+ cache[:block] = {
147
+ wrap: converter.options[:coderay_wrap],
148
+ line_numbers: converter.options[:coderay_line_numbers],
149
+ line_number_start: converter.options[:coderay_line_number_start],
150
+ tab_width: converter.options[:coderay_tab_width],
151
+ bold_every: converter.options[:coderay_bold_every],
152
+ css: converter.options[:coderay_css],
153
+ }.update(opts).update(block_opts)
154
+
155
+ [:css, :wrap, :line_numbers].each do |key|
156
+ [:block, :span].each do |type|
157
+ cache[type][key] = cache[type][key].to_sym if cache[type][key].kind_of?(String)
158
+ end
159
+ end
160
+ end
161
+
162
+ end
163
+ end
164
+
165
+ add_syntax_highlighter(:coderay, SyntaxHighlighter::Coderay)
166
+
167
+ end
168
+
169
+ end
@@ -0,0 +1,33 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ #--
4
+ # Copyright (C) 2019 Thomas Leitner <t_leitner@gmx.at>
5
+ #
6
+ # This file is part of kramdown-syntax-coderay which is licensed under the MIT.
7
+ #++
8
+ #
9
+
10
+ require 'minitest/autorun'
11
+ require 'kramdown'
12
+ require 'kramdown-syntax-coderay'
13
+ require 'yaml'
14
+ require 'tmpdir'
15
+
16
+ Encoding.default_external = 'utf-8'
17
+
18
+ class TestFiles < Minitest::Test
19
+
20
+ Dir[File.dirname(__FILE__) + '/testcases/**/*.text'].each do |text_file|
21
+ basename = text_file.sub(/\.text$/, '')
22
+
23
+ html_file = basename + '.html'
24
+ define_method('test_' + text_file.tr('.', '_') + "_to_html") do
25
+ opts_file = basename + '.options'
26
+ opts_file = File.join(File.dirname(html_file), 'options') if !File.exist?(opts_file)
27
+ options = File.exist?(opts_file) ? YAML::load(File.read(opts_file)) : {auto_ids: false, footnote_nr: 1}
28
+ doc = Kramdown::Document.new(File.read(text_file), options)
29
+ assert_equal(File.read(html_file), doc.to_html)
30
+ end
31
+ end
32
+
33
+ end
@@ -0,0 +1,6 @@
1
+ <div class="language-ruby highlighter-coderay"><span class="CodeRay">x = <span class="constant">Class</span>.new
2
+ </span>
3
+ </div>
4
+ <div class="language-html highlighter-coderay"><span class="CodeRay"><span class="tag">&lt;a&gt;</span>href<span class="tag">&lt;/a&gt;</span>
5
+ </span>
6
+ </div>
@@ -0,0 +1,8 @@
1
+ :syntax_highlighter: :coderay
2
+ :syntax_highlighter_opts:
3
+ block:
4
+ css: class
5
+ default_lang: ruby
6
+ wrap: span
7
+ line_numbers: null
8
+
@@ -0,0 +1,4 @@
1
+ x = Class.new
2
+ ^
3
+ <a>href</a>
4
+ {: .language-html}
@@ -0,0 +1 @@
1
+ <p>You can say <code class="language-ruby highlighter-coderay"><span class="CodeRay">x = <span style="color:#036;font-weight:bold">Class</span>.new</span></code>, for example.</p>
@@ -0,0 +1 @@
1
+ :syntax_highlighter: :coderay
@@ -0,0 +1 @@
1
+ You can say `x = Class.new`{:.language-ruby}, for example.
@@ -0,0 +1,6 @@
1
+ <div class="language-ruby highlighter-coderay"><span class="CodeRay">x = <span class="constant">Class</span>.new
2
+ </span>
3
+ </div>
4
+ <div class="language-html highlighter-coderay"><span class="CodeRay"><span class="tag">&lt;a&gt;</span>href<span class="tag">&lt;/a&gt;</span>
5
+ </span>
6
+ </div>
@@ -0,0 +1,6 @@
1
+ :syntax_highlighter: :coderay
2
+ :coderay_default_lang: ruby
3
+ :coderay_wrap: span
4
+ :coderay_line_numbers: ~
5
+ :coderay_css: class
6
+
@@ -0,0 +1,4 @@
1
+ x = Class.new
2
+ ^
3
+ <a>href</a>
4
+ {: .language-html}
metadata ADDED
@@ -0,0 +1,86 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kramdown-syntax-coderay
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Thomas Leitner
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-01-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: kramdown
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: coderay
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.0.0
41
+ description:
42
+ email: t_leitner@gmx.at
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - CONTRIBUTERS
48
+ - COPYING
49
+ - VERSION
50
+ - lib/kramdown-syntax-coderay.rb
51
+ - lib/kramdown/converter/syntax_highlighter/coderay.rb
52
+ - test/test_files.rb
53
+ - test/testcases/highlighting-opts.html
54
+ - test/testcases/highlighting-opts.options
55
+ - test/testcases/highlighting-opts.text
56
+ - test/testcases/highlighting-span.html
57
+ - test/testcases/highlighting-span.options
58
+ - test/testcases/highlighting-span.text
59
+ - test/testcases/highlighting.html
60
+ - test/testcases/highlighting.options
61
+ - test/testcases/highlighting.text
62
+ homepage: https://github.com/kramdown/syntax-coderay
63
+ licenses:
64
+ - MIT
65
+ metadata: {}
66
+ post_install_message:
67
+ rdoc_options: []
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '2.3'
75
+ required_rubygems_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ requirements: []
81
+ rubyforge_project:
82
+ rubygems_version: 2.7.3
83
+ signing_key:
84
+ specification_version: 4
85
+ summary: kramdown-syntax-coderay uses coderay to highlight code blocks/spans
86
+ test_files: []