From 7ce22405e97e52b8d3fd781828e64c825cba7931 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Thu, 7 Mar 2024 18:59:37 -0700 Subject: resolves #4556 set cloaked-context attribute on source block when context is not :listing (PR #4563) --- CHANGELOG.adoc | 1 + lib/asciidoctor/parser.rb | 7 +++++-- test/blocks_test.rb | 50 +++++++++++++++++++++++++++++++++++++++++++++++ test/paragraphs_test.rb | 10 ++++++++++ 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 -- cgit v1.2.3