summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.adoc1
-rw-r--r--lib/asciidoctor/parser.rb7
-rw-r--r--test/blocks_test.rb50
-rw-r--r--test/paragraphs_test.rb10
4 files changed, 66 insertions, 2 deletions
diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc
index 5fa8837a..8231f195 100644
--- a/CHANGELOG.adoc
+++ b/CHANGELOG.adoc
@@ -66,6 +66,7 @@ Improvements::
* Remove empty line at top of table cells in manpage output (#4482) (*@strager*)
* Return `nil` if name passed to `Asciidoctor::SafeMode.value_for_name` is not recognized (#3526)
* Modify default stylesheet to honor text-* roles on quote blocks
+ * Set `cloaked-context` attribute on source block when context is not `:listing` (#4556)
== 2.0.21 (2024-02-20) - @mojavelinux
diff --git a/lib/asciidoctor/parser.rb b/lib/asciidoctor/parser.rb
index 18f29656..0daba0d7 100644
--- a/lib/asciidoctor/parser.rb
+++ b/lib/asciidoctor/parser.rb
@@ -562,6 +562,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
@@ -820,15 +821,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.key? 'linenums') || (doc_attrs.key? 'source-linenums-option')
attributes['linenums-option'] = ''
@@ -857,6 +859,7 @@ class Parser
else
attributes['language'] = language
end
+ attributes['cloaked-context'] = cloaked_context
if (attributes.key? 'linenums') || (doc_attrs.key? 'source-linenums-option')
attributes['linenums-option'] = ''
end unless attributes.key? 'linenums-option'
diff --git a/test/blocks_test.rb b/test/blocks_test.rb
index d1b1af56..f0174e73 100644
--- a/test/blocks_test.rb
+++ b/test/blocks_test.rb
@@ -3557,6 +3557,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
@@ -3589,6 +3594,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
@@ -3611,6 +3621,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 975a9901..ca754acf 100644
--- a/test/paragraphs_test.rb
+++ b/test/paragraphs_test.rb
@@ -326,6 +326,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
@@ -335,6 +340,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