asciidoctor-rouge 0.2.0 → 0.3.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.
- checksums.yaml +5 -5
- data/README.adoc +4 -1
- data/asciidoctor-rouge.gemspec +1 -0
- data/lib/asciidoctor/rouge.rb +1 -1
- data/lib/asciidoctor/rouge/callouts_substitutor.rb +5 -5
- data/lib/asciidoctor/rouge/constants.rb +10 -0
- data/lib/asciidoctor/rouge/docinfo_processor.rb +2 -2
- data/lib/asciidoctor/rouge/html_formatter.rb +8 -8
- data/lib/asciidoctor/rouge/passthroughs_substitutor.rb +4 -4
- data/lib/asciidoctor/rouge/treeprocessor.rb +27 -9
- data/lib/asciidoctor/rouge/version.rb +1 -1
- metadata +18 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f17d5f09f366075fcf74b6c8a78c5d63d3ae5a5b75955ef5472b7720a77dcc42
|
4
|
+
data.tar.gz: a5c4a90b5cc7d94c1484218bd6d6141a0507e2700f4e9496211f4677bdf37b14
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0bde3c8cf4e5fdeaea5a06d36464b3d64bb372f18cdc93da8539632265022c69a6f44d7e0ef90a3e710ae736299ccce4d669cc715181a68cedb41f4d6f988796
|
7
|
+
data.tar.gz: caaae8119525e79da84ec7c072bed0a35bf34196feb95f7efa0b619317d9b6340b9b7d81b1bd264b1e66ad0c0b95df499560e4d394de2c1b94b6084b1d1cd5e8
|
data/README.adoc
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
:source-language: shell
|
3
3
|
// custom
|
4
4
|
:gem-name: asciidoctor-rouge
|
5
|
-
:gem-version: 0.
|
5
|
+
:gem-version: 0.3.0
|
6
6
|
:gh-name: jirutka/{gem-name}
|
7
7
|
:gh-branch: master
|
8
8
|
:codacy-id: d2ed58f5f3f949a19bab7637fe7d0bdb
|
@@ -59,6 +59,9 @@ rouge-theme::
|
|
59
59
|
Look into https://github.com/jneen/rouge/tree/master/lib/rouge/themes[lib/rouge/themes] in the Rouge repository for a list of available themes.
|
60
60
|
Default is `github`.
|
61
61
|
|
62
|
+
rouge-style::
|
63
|
+
Alternative name for the `rouge-theme` for compatibility with _asciidoctor-pdf_ (see https://github.com/{gh-name}/issues/3[#3]).
|
64
|
+
|
62
65
|
|
63
66
|
== License
|
64
67
|
|
data/asciidoctor-rouge.gemspec
CHANGED
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.add_runtime_dependency 'rouge', '~> 2.2'
|
20
20
|
|
21
21
|
s.add_development_dependency 'corefines', '~> 1.11'
|
22
|
+
s.add_development_dependency 'kramdown', '~> 1.16'
|
22
23
|
s.add_development_dependency 'rake', '~> 12.0'
|
23
24
|
s.add_development_dependency 'rspec', '~> 3.6'
|
24
25
|
s.add_development_dependency 'rubocop', '~> 0.49.0'
|
data/lib/asciidoctor/rouge.rb
CHANGED
@@ -3,7 +3,7 @@ require 'English'
|
|
3
3
|
require 'asciidoctor'
|
4
4
|
require 'asciidoctor/inline'
|
5
5
|
require 'asciidoctor/substitutors'
|
6
|
-
require 'asciidoctor/rouge/
|
6
|
+
require 'asciidoctor/rouge/constants'
|
7
7
|
|
8
8
|
module Asciidoctor::Rouge
|
9
9
|
# A substitutor for processing callouts inside a source listing block.
|
@@ -13,18 +13,18 @@ module Asciidoctor::Rouge
|
|
13
13
|
attr_reader :callouts
|
14
14
|
|
15
15
|
# @param node [Asciidoctor::AbstractNode]
|
16
|
-
# @return [CalloutsSubstitutor] a callouts substitutor for the given
|
16
|
+
# @return [CalloutsSubstitutor] a callouts substitutor for the given *node*.
|
17
17
|
def self.create(node)
|
18
18
|
new(node)
|
19
19
|
end
|
20
20
|
|
21
|
-
# Extracts and stashes callout markers from the given
|
21
|
+
# Extracts and stashes callout markers from the given *text* for
|
22
22
|
# reinsertion after processing.
|
23
23
|
#
|
24
24
|
# This should be used prior passing the source to a code highlighter.
|
25
25
|
#
|
26
26
|
# @param text [#each_line] source of the listing block.
|
27
|
-
# @return [String] a copy of the
|
27
|
+
# @return [String] a copy of the *text* with callout marks removed.
|
28
28
|
def extract(text)
|
29
29
|
escape_char = ::Asciidoctor::Substitutors::RS
|
30
30
|
@callouts.clear
|
@@ -72,7 +72,7 @@ module Asciidoctor::Rouge
|
|
72
72
|
end
|
73
73
|
|
74
74
|
# @param number [Integer] callout number.
|
75
|
-
# @return [String] an HTML markup of a callout marker with the given
|
75
|
+
# @return [String] an HTML markup of a callout marker with the given *number*.
|
76
76
|
def convert_callout(number)
|
77
77
|
::Asciidoctor::Inline.new(@node, :callout, number, id: next_callout_id).convert
|
78
78
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require 'asciidoctor/rouge/
|
2
|
+
require 'asciidoctor/rouge/constants'
|
3
3
|
require 'asciidoctor/extensions'
|
4
4
|
require 'rouge'
|
5
5
|
|
@@ -13,7 +13,7 @@ module Asciidoctor::Rouge
|
|
13
13
|
return unless document.attr?('source-highlighter', 'rouge')
|
14
14
|
return unless document.attr('rouge-css', 'class') == 'class'
|
15
15
|
|
16
|
-
if (theme = ::Rouge::Theme.find(document.attr('rouge-theme',
|
16
|
+
if (theme = ::Rouge::Theme.find(document.attr('rouge-theme', DEFAULT_THEME)))
|
17
17
|
css = theme.render(scope: '.highlight')
|
18
18
|
['<style>', css, '</style>'].join("\n")
|
19
19
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require 'asciidoctor/rouge/
|
2
|
+
require 'asciidoctor/rouge/constants'
|
3
3
|
require 'rouge'
|
4
4
|
|
5
5
|
module Asciidoctor::Rouge
|
@@ -21,18 +21,18 @@ module Asciidoctor::Rouge
|
|
21
21
|
# wrapper element). Defaults to empty array.
|
22
22
|
#
|
23
23
|
# @param inline_theme [String, Rouge::Theme, Class<Rouge::Theme>, nil]
|
24
|
-
# the theme to use for inline styles, or
|
25
|
-
# (i.e. use classes). This is ignored if
|
24
|
+
# the theme to use for inline styles, or `nil` to not set inline styles
|
25
|
+
# (i.e. use classes). This is ignored if *inner* is not `nil`.
|
26
26
|
#
|
27
27
|
# @param line_class [String, nil] CSS class to set on a line wrapper
|
28
|
-
# element, or
|
28
|
+
# element, or `nil` to not set a class. Defaults to "line".
|
29
29
|
#
|
30
|
-
# @param line_id [String, nil] format string specifying
|
31
|
-
# or
|
30
|
+
# @param line_id [String, nil] format string specifying `id` for each line,
|
31
|
+
# or `nil` to omit `id`. Defaults to "L%i".
|
32
32
|
#
|
33
33
|
# @param inner [Rouge::Formatter::HTML, #span, nil] the inner HTML
|
34
|
-
# formatter to delegate formatting of tokens to, or
|
35
|
-
#
|
34
|
+
# formatter to delegate formatting of tokens to, or `nil` to get
|
35
|
+
# `html` or `html_inline` formatter from the `Rouge::Formatter`'s
|
36
36
|
# registry.
|
37
37
|
#
|
38
38
|
def initialize(callout_markers: nil,
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require 'asciidoctor/substitutors'
|
3
|
-
require 'asciidoctor/rouge/
|
3
|
+
require 'asciidoctor/rouge/constants'
|
4
4
|
|
5
5
|
module Asciidoctor::Rouge
|
6
6
|
# A substitutor for processing passthroughs inside listing blocks.
|
@@ -13,7 +13,7 @@ module Asciidoctor::Rouge
|
|
13
13
|
|
14
14
|
# @param node [Asciidoctor::AbstractNode]
|
15
15
|
# @return [PassthroughsSubstitutor] a passthroughs substitutor for
|
16
|
-
# the given
|
16
|
+
# the given *node*.
|
17
17
|
def self.create(node)
|
18
18
|
new(node)
|
19
19
|
end
|
@@ -22,7 +22,7 @@ module Asciidoctor::Rouge
|
|
22
22
|
# after processing.
|
23
23
|
#
|
24
24
|
# @param text [String] the source of the node.
|
25
|
-
# @return [String] a copy of the
|
25
|
+
# @return [String] a copy of the *text* with passthrough regions
|
26
26
|
# substituted with placeholders.
|
27
27
|
def extract(text)
|
28
28
|
@node.extract_passthroughs(text)
|
@@ -32,7 +32,7 @@ module Asciidoctor::Rouge
|
|
32
32
|
# placeholder positions.
|
33
33
|
#
|
34
34
|
# @param text [String] the text into which to restore the passthroughs.
|
35
|
-
# @return [String] a copy of the
|
35
|
+
# @return [String] a copy of the *text* with restored passthroughs.
|
36
36
|
def restore(text)
|
37
37
|
return text if @node.passthroughs.empty?
|
38
38
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require 'asciidoctor/rouge/
|
2
|
+
require 'asciidoctor/rouge/constants'
|
3
3
|
require 'asciidoctor/rouge/callouts_substitutor'
|
4
4
|
require 'asciidoctor/rouge/html_formatter'
|
5
5
|
require 'asciidoctor/rouge/passthroughs_substitutor'
|
@@ -12,11 +12,11 @@ module Asciidoctor::Rouge
|
|
12
12
|
|
13
13
|
# @param formatter [Class<Rouge::Formatter>] the Rouge formatter to use for
|
14
14
|
# formatting a token stream from a Rouge lexer. It must respond to method
|
15
|
-
#
|
16
|
-
# producing
|
15
|
+
# `format` accepting a token stream and (optionally) a hash of options,
|
16
|
+
# producing `String`. Defaults to {HtmlFormatter}.
|
17
17
|
#
|
18
|
-
# @param formatter_opts [Hash] options to pass to the
|
19
|
-
# It's used only if
|
18
|
+
# @param formatter_opts [Hash] options to pass to the *formatter*.
|
19
|
+
# It's used only if *formatter's* `format` method has arity > 1.
|
20
20
|
# Defaults to empty hash.
|
21
21
|
#
|
22
22
|
# @param callouts_sub [#create] the callouts substitutor class to use for
|
@@ -45,6 +45,20 @@ module Asciidoctor::Rouge
|
|
45
45
|
document.find_by(context: :listing, style: 'source') do |block|
|
46
46
|
process_listing(block)
|
47
47
|
end
|
48
|
+
|
49
|
+
# Table cells may contain listing, but Document#find_by does not search
|
50
|
+
# inside table, so we must handle it specially.
|
51
|
+
document.find_by(context: :table) do |table|
|
52
|
+
table.rows.body.each do |row|
|
53
|
+
row.each do |cell|
|
54
|
+
if (inner = cell.inner_document)
|
55
|
+
inner.find_by(context: :listing, style: 'source') do |block|
|
56
|
+
process_listing(block)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
48
62
|
end
|
49
63
|
|
50
64
|
protected
|
@@ -77,7 +91,11 @@ module Asciidoctor::Rouge
|
|
77
91
|
block.set_attr('language', lexer.tag)
|
78
92
|
|
79
93
|
if document.attr?('rouge-css', 'style')
|
80
|
-
|
94
|
+
# 'rouge-style' is alternative name for compatibility with
|
95
|
+
# asciidoctor-pdf (see #3).
|
96
|
+
opts[:inline_theme] = document.attr('rouge-theme') \
|
97
|
+
|| document.attr('rouge-style') \
|
98
|
+
|| DEFAULT_THEME
|
81
99
|
end
|
82
100
|
|
83
101
|
if block.attr?('highlight', nil, false)
|
@@ -94,7 +112,7 @@ module Asciidoctor::Rouge
|
|
94
112
|
end
|
95
113
|
|
96
114
|
# @param language [String]
|
97
|
-
# @return [Rouge::Lexer] a lexer for the specified
|
115
|
+
# @return [Rouge::Lexer] a lexer for the specified *language*.
|
98
116
|
def find_lexer(language)
|
99
117
|
(::Rouge::Lexer.find(language) || ::Rouge::Lexers::PlainText).new
|
100
118
|
end
|
@@ -102,8 +120,8 @@ module Asciidoctor::Rouge
|
|
102
120
|
# @param source [String] the code to highlight.
|
103
121
|
# @param lexer [Rouge::Lexer] the lexer to use.
|
104
122
|
# @param opts [Hash] extra options for the formatter; it will be merged
|
105
|
-
# with the
|
106
|
-
# @return [String] a highlighted and formatted
|
123
|
+
# with the `formatter_opts` (see {#initialize}).
|
124
|
+
# @return [String] a highlighted and formatted *source*.
|
107
125
|
def highlight(source, lexer, opts = {})
|
108
126
|
tokens = lexer.lex(source)
|
109
127
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: asciidoctor-rouge
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jakub Jirutka
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: asciidoctor
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.11'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: kramdown
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.16'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.16'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rake
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -134,6 +148,7 @@ files:
|
|
134
148
|
- lib/asciidoctor-rouge.rb
|
135
149
|
- lib/asciidoctor/rouge.rb
|
136
150
|
- lib/asciidoctor/rouge/callouts_substitutor.rb
|
151
|
+
- lib/asciidoctor/rouge/constants.rb
|
137
152
|
- lib/asciidoctor/rouge/docinfo_processor.rb
|
138
153
|
- lib/asciidoctor/rouge/html_formatter.rb
|
139
154
|
- lib/asciidoctor/rouge/passthroughs_substitutor.rb
|
@@ -159,7 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
159
174
|
version: '0'
|
160
175
|
requirements: []
|
161
176
|
rubyforge_project:
|
162
|
-
rubygems_version: 2.
|
177
|
+
rubygems_version: 2.7.4
|
163
178
|
signing_key:
|
164
179
|
specification_version: 4
|
165
180
|
summary: Rouge code highlighter support for Asciidoctor
|