summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Allen <dan.j.allen@gmail.com>2024-03-07 18:59:37 -0700
committerDan Allen <dan.j.allen@gmail.com>2024-03-07 19:00:56 -0700
commitf68e9425ca29b2b89c4a1aa89b327d137b785ca7 (patch)
treec6cb871b3cf6367f036dee228b0e511e1fb10325
parente85b2391c0427c5fe60b42256d514acb25a16d26 (diff)
backport fix for #4556 set cloaked-context attribute on source block when context is not :listing
-rw-r--r--CHANGELOG.adoc4
-rw-r--r--lib/asciidoctor/parser.rb7
-rw-r--r--test/blocks_test.rb50
-rw-r--r--test/paragraphs_test.rb10
4 files changed, 69 insertions, 2 deletions
diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc
index 97492088..88270169 100644
--- a/CHANGELOG.adoc
+++ b/CHANGELOG.adoc
@@ -18,6 +18,10 @@ This project utilizes semantic versioning.
// tag::compact[]
== Unreleased
+Improvements::
+
+ * Set `cloaked-context` attribute on source block when context is not `:listing` (#4556)
+
Compliance::
* Remove use of base64 library to prevent warning in Ruby >= 3.3 (#4561)
diff --git a/lib/asciidoctor/parser.rb b/lib/asciidoctor/parser.rb
index 400e154f..97aec5c8 100644
--- a/lib/asciidoctor/parser.rb
+++ b/lib/asciidoctor/parser.rb
@@ -561,6 +561,7 @@ class Parser
# process lines verbatim
if style && Compliance.strict_verbatim_paragraphs && (VERBATIM_STYLES.include? style)
block_context = style.to_sym
+ cloaked_context = :paragraph
reader.unshift_line this_line
# advance to block parsing =>
break
@@ -819,15 +820,16 @@ class Parser
case block_context
when :listing, :source
if block_context == :source || (language = attributes[1] ? nil : attributes[2] || doc_attrs['source-language'])
- if language
+ if language # :listing
attributes['style'] = 'source'
attributes['language'] = language
AttributeList.rekey attributes, [nil, nil, 'linenums']
- else
+ else # :source
AttributeList.rekey attributes, [nil, 'language', 'linenums']
if doc_attrs.key? 'source-language'
attributes['language'] = doc_attrs['source-language']
end unless attributes.key? 'language'
+ attributes['cloaked-context'] = cloaked_context unless cloaked_context == :listing
end
if attributes['linenums-option'] || doc_attrs['source-linenums-option']
attributes['linenums'] = ''
@@ -856,6 +858,7 @@ class Parser
else
attributes['language'] = language
end
+ attributes['cloaked-context'] = cloaked_context
if attributes['linenums-option'] || doc_attrs['source-linenums-option']
attributes['linenums'] = ''
end unless attributes.key? 'linenums'
diff --git a/test/blocks_test.rb b/test/blocks_test.rb
index 0a8a656f..e51aea06 100644
--- a/test/blocks_test.rb
+++ b/test/blocks_test.rb
@@ -3487,6 +3487,11 @@ context 'Blocks' do
```
EOS
+ block = block_from_string input
+ assert_equal :listing, block.context
+ assert_equal 'source', (block.attr 'style')
+ assert_equal :fenced_code, (block.attr 'cloaked-context')
+ assert_nil (block.attr 'language')
output = convert_string_to_embedded input
assert_css '.listingblock', output, 1
assert_css '.listingblock pre code', output, 1
@@ -3519,6 +3524,11 @@ context 'Blocks' do
```
EOS
+ block = (document_from_string input).blocks[0]
+ assert_equal :listing, block.context
+ assert_equal 'source', (block.attr 'style')
+ assert_equal :fenced_code, (block.attr 'cloaked-context')
+ assert_equal 'ruby', (block.attr 'language')
output = convert_string_to_embedded input
assert_css '.listingblock', output, 2
assert_css '.listingblock pre code.language-ruby[data-lang=ruby]', output, 1
@@ -3541,6 +3551,46 @@ context 'Blocks' do
assert_css '.listingblock pre code.language-ruby[data-lang=ruby]', output, 1
assert_css '.listingblock pre code.language-javascript[data-lang=javascript]', output, 1
end
+
+ test 'should allow source style to be specified on literal block' do
+ input = <<~'EOS'
+ [source]
+ ....
+ console.log('Hello, World!')
+ ....
+ EOS
+
+ block = block_from_string input
+ assert_equal :listing, block.context
+ assert_equal 'source', (block.attr 'style')
+ assert_equal :literal, (block.attr 'cloaked-context')
+ assert_nil (block.attr 'language')
+ output = convert_string_to_embedded input
+ assert_css '.listingblock', output, 1
+ assert_css '.listingblock pre', output, 1
+ assert_css '.listingblock pre code', output, 1
+ assert_css '.listingblock pre code[data-lang]', output, 0
+ end
+
+ test 'should allow source style and language to be specified on literal block' do
+ input = <<~'EOS'
+ [source,js]
+ ....
+ console.log('Hello, World!')
+ ....
+ EOS
+
+ block = block_from_string input
+ assert_equal :listing, block.context
+ assert_equal 'source', (block.attr 'style')
+ assert_equal :literal, (block.attr 'cloaked-context')
+ assert_equal 'js', (block.attr 'language')
+ output = convert_string_to_embedded input
+ assert_css '.listingblock', output, 1
+ assert_css '.listingblock pre', output, 1
+ assert_css '.listingblock pre code', output, 1
+ assert_css '.listingblock pre code[data-lang]', output, 1
+ end
end
context 'Abstract and Part Intro' do
diff --git a/test/paragraphs_test.rb b/test/paragraphs_test.rb
index ebb5fb94..be422234 100644
--- a/test/paragraphs_test.rb
+++ b/test/paragraphs_test.rb
@@ -328,6 +328,11 @@ context 'Paragraphs' do
[source]
use the source, luke!
EOS
+ block = block_from_string input
+ assert_equal :listing, block.context
+ assert_equal 'source', (block.attr 'style')
+ assert_equal :paragraph, (block.attr 'cloaked-context')
+ assert_nil (block.attr 'language')
output = convert_string_to_embedded input
assert_xpath %(/*[@class="listingblock"]//pre[@class="highlight"]/code[text()="use the source, luke!"]), output, 1
end
@@ -337,6 +342,11 @@ context 'Paragraphs' do
[source, perl]
die 'zomg perl is tough';
EOS
+ block = block_from_string input
+ assert_equal :listing, block.context
+ assert_equal 'source', (block.attr 'style')
+ assert_equal :paragraph, (block.attr 'cloaked-context')
+ assert_equal 'perl', (block.attr 'language')
output = convert_string_to_embedded input
assert_xpath %(/*[@class="listingblock"]//pre[@class="highlight"]/code[@class="language-perl"][@data-lang="perl"][text()="die 'zomg perl is tough';"]), output, 1
end