reverse_markdown 1.2.0 → 2.1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 69b75c5dec924f267e5861ed24edafa23a8bb12f3e03cd7068e00ae19406424b
4
- data.tar.gz: d53a1f8630a532183b491e982250a3bb175d9ed84188103535255e27ff8d39a7
3
+ metadata.gz: cffa2a16f5ad4187cb23a2e6a1015121b943f1c83a688308cf0a480ec15d3c49
4
+ data.tar.gz: 6941ad7c07005ff4d5c115fd894ee2a0cf40a09367833268f4c55c018f30263a
5
5
  SHA512:
6
- metadata.gz: '02949ddc3b08f23f07148bbda7e00a07214d3bc423ec880284c938e30fa872e305ca66fe2b1a9af796c5225dc935fa06c4e19f4085c75d5eaa0b0023eca45961'
7
- data.tar.gz: 7c58e5b6fc0560de0e3ef879685db3a8d8f541b07d471b7747492e9918a40334d84a66fcc1c8f76bff061990c661c9b53730e994b435aab28e634ff12cfd6968
6
+ metadata.gz: 620ce03beae7238accdc6836e025dc7b19fe308a7bcbcd7143dc7472d09e7d25758a3f6c2080d5d75e60fee662bc87ab200f177b5b6f41fa5958bde4b569a49e
7
+ data.tar.gz: ea69f20a1e70e4f41d6024502af362351ccaf6ec8936b4dcadc2414202e994cdf8ddf08ebbd829c0722c373bbe7e87a223c3c913bf6d845be9308ef418f3be75
data/.travis.yml CHANGED
@@ -1,23 +1,17 @@
1
- # before_install:
2
- # - gem install bundler
1
+ language: ruby
2
+ cache: bundler
3
3
 
4
4
  rvm:
5
- - 1.9.3
6
- - 2.0.0
7
- - 2.1.0
8
- - 2.1.5
9
- - 2.2.0
10
- - 2.2.4
11
- - 2.2.5
12
- - 2.3.0
13
- - 2.3.1
14
- - 2.4.2
15
- - 2.5.3
16
- - 2.6.2
5
+ - 2.0
6
+ - 2.1
7
+ - 2.2
8
+ - 2.3
9
+ - 2.4
10
+ - 2.5
11
+ - 2.6
12
+ - 2.7
17
13
  - jruby-9.2.8.0
18
14
 
19
- script: "bundle exec rake spec"
20
-
21
15
  notifications:
22
16
  disabled: false
23
17
  recipients:
data/CHANGELOG.md CHANGED
@@ -1,6 +1,23 @@
1
1
  # Change Log
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
+ ## 2.1.1 - October 2021
5
+ - Fixes unintentional newline characters within lists with paragraphs, thanks @diogoosorio, see #93
6
+ - Lets \n to be present in <pre> tag. solves #77 #78, thanks @shivabhusal
7
+
8
+ ## 2.1.0 - May 2020
9
+ - Add support for `figure` tags, see #86, thanks @anshul78
10
+
11
+ ## 2.0.0 - March 2020
12
+ - BREAKING: Dropped support for ruby 1.9.3
13
+ - Add support for `details` and `summary` tags, see #85
14
+
15
+ ## 1.4.0 – January 2020
16
+ - BREAKING: jump links will no longer be ignored but treated as links, see #82
17
+
18
+ ## 1.3.0 - September 2019
19
+ - Add support for `s` HTML tag, thanks @fauno
20
+
4
21
  ## 1.2.0 - August 2019
5
22
  - Handle windows `\r\n` within text blocks, thanks for reporting @krisdigital
6
23
  - Handle paragraphs in `li` tags, thanks @gstamp
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Transform html into markdown. Useful for example if you want to import html into your markdown based application.
4
4
 
5
- [![Build Status](https://secure.travis-ci.org/xijo/reverse_markdown.png?branch=master)](https://travis-ci.org/xijo/reverse_markdown) [![Gem Version](https://badge.fury.io/rb/reverse_markdown.png)](http://badge.fury.io/rb/reverse_markdown) [![Code Climate](https://codeclimate.com/github/xijo/reverse_markdown.png)](https://codeclimate.com/github/xijo/reverse_markdown) [![Code Climate](https://codeclimate.com/github/xijo/reverse_markdown/coverage.png)](https://codeclimate.com/github/xijo/reverse_markdown)
5
+ [![Build Status](https://secure.travis-ci.org/xijo/reverse_markdown.svg?branch=master)](https://travis-ci.org/xijo/reverse_markdown) [![Gem Version](https://badge.fury.io/rb/reverse_markdown.svg)](http://badge.fury.io/rb/reverse_markdown) [![Code Climate](https://codeclimate.com/github/xijo/reverse_markdown.svg)](https://codeclimate.com/github/xijo/reverse_markdown) [![Code Climate](https://codeclimate.com/github/xijo/reverse_markdown/coverage.png)](https://codeclimate.com/github/xijo/reverse_markdown)
6
6
 
7
7
  ## Changelog
8
8
 
@@ -11,7 +11,7 @@ See [Change Log](CHANGELOG.md)
11
11
  ## Requirements
12
12
 
13
13
  1. [Nokogiri](http://nokogiri.org/)
14
- 2. Ruby 1.9.3 or higher
14
+ 2. Ruby 2.0.0 or higher
15
15
 
16
16
  ## Installation
17
17
 
@@ -29,7 +29,7 @@ gem 'reverse_markdown'
29
29
 
30
30
  ## Features
31
31
 
32
- - Supports all the established html tags like `h1`, `h2`, `h3`, `h4`, `h5`, `h6`, `p`, `em`, `strong`, `i`, `b`, `blockquote`, `code`, `img`, `a`, `hr`, `li`, `ol`, `ul`, `table`, `tr`, `th`, `td`, `br`
32
+ - Supports all the established html tags like `h1`, `h2`, `h3`, `h4`, `h5`, `h6`, `p`, `em`, `strong`, `i`, `b`, `blockquote`, `code`, `img`, `a`, `hr`, `li`, `ol`, `ul`, `table`, `tr`, `th`, `td`, `br`, `figure`
33
33
  - Module based - if you miss a tag, just add it
34
34
  - Can deal with nested lists
35
35
  - Inline and block code is supported
data/Rakefile CHANGED
@@ -10,5 +10,5 @@ task :default => :spec
10
10
 
11
11
  desc 'Open an irb session preloaded with this library'
12
12
  task :console do
13
- sh 'irb -rubygems -I lib -r reverse_markdown.rb'
13
+ sh 'irb -I lib -r reverse_markdown.rb'
14
14
  end
@@ -59,6 +59,11 @@ module ReverseMarkdown
59
59
  string.gsub(/(\*\*|~~|__)\s([\.!\?'"])/, "\\1".strip + "\\2")
60
60
  end
61
61
 
62
+ def force_encoding(string)
63
+ ReverseMarkdown.config.force_encoding or return string
64
+ string.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
65
+ end
66
+
62
67
  private
63
68
 
64
69
  def preserve_border_whitespaces(string, options = {}, &block)
@@ -1,10 +1,11 @@
1
1
  module ReverseMarkdown
2
2
  class Config
3
- attr_accessor :unknown_tags, :github_flavored, :tag_border
3
+ attr_writer :unknown_tags, :github_flavored, :tag_border, :force_encoding
4
4
 
5
5
  def initialize
6
6
  @unknown_tags = :pass_through
7
7
  @github_flavored = false
8
+ @force_encoding = false
8
9
  @em_delimiter = '_'.freeze
9
10
  @strong_delimiter = '**'.freeze
10
11
  @inline_options = {}
@@ -29,5 +30,9 @@ module ReverseMarkdown
29
30
  def tag_border
30
31
  @inline_options[:tag_border] || @tag_border
31
32
  end
33
+
34
+ def force_encoding
35
+ @inline_options[:force_encoding] || @force_encoding
36
+ end
32
37
  end
33
38
  end
@@ -6,7 +6,7 @@ module ReverseMarkdown
6
6
  href = node['href']
7
7
  title = extract_title(node)
8
8
 
9
- if href.to_s.start_with?('#') || href.to_s.empty? || name.empty?
9
+ if href.to_s.empty? || name.empty?
10
10
  name
11
11
  else
12
12
  link = "[#{name}](#{href}#{title})"
@@ -20,6 +20,7 @@ module ReverseMarkdown
20
20
  end
21
21
 
22
22
  register :strike, Del.new
23
+ register :s, Del.new
23
24
  register :del, Del.new
24
25
  end
25
26
  end
@@ -0,0 +1,25 @@
1
+ module ReverseMarkdown
2
+ module Converters
3
+ class Details < Base
4
+ def convert(node, state = {})
5
+ content = treat_children(node, state.merge(already_processed: true))
6
+ if disabled? || content.strip.empty? || state[:already_processed]
7
+ content
8
+ else
9
+ "##{content}"
10
+ end
11
+ end
12
+
13
+ def enabled?
14
+ ReverseMarkdown.config.github_flavored
15
+ end
16
+
17
+ def disabled?
18
+ !enabled?
19
+ end
20
+ end
21
+
22
+ register :details, Details.new
23
+ register :summary, Details.new
24
+ end
25
+ end
@@ -0,0 +1,15 @@
1
+ module ReverseMarkdown
2
+ module Converters
3
+ class FigCaption < Base
4
+ def convert(node, state = {})
5
+ if node.text.strip.empty?
6
+ ""
7
+ else
8
+ "\n" << "_#{node.text.strip}_" << "\n"
9
+ end
10
+ end
11
+ end
12
+
13
+ register :figcaption, FigCaption.new
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ module ReverseMarkdown
2
+ module Converters
3
+ class Figure < Base
4
+ def convert(node, state = {})
5
+ content = treat_children(node, state)
6
+ "\n#{content.strip}\n"
7
+ end
8
+ end
9
+
10
+ register :figure, Figure.new
11
+ end
12
+ end
@@ -2,8 +2,8 @@ module ReverseMarkdown
2
2
  module Converters
3
3
  class Li < Base
4
4
  def convert(node, state = {})
5
- contains_child_paragraph = node.children.first ? node.children.first.name == 'p' : false
6
- content_node = contains_child_paragraph ? node.children.first : node
5
+ contains_child_paragraph = node.first_element_child ? node.first_element_child.name == 'p' : false
6
+ content_node = contains_child_paragraph ? node.first_element_child : node
7
7
  content = treat_children(content_node, state)
8
8
  indentation = indentation_from(state)
9
9
  prefix = prefix_for(node)
@@ -15,8 +15,8 @@ module ReverseMarkdown
15
15
  # Override #treat as proposed in https://github.com/xijo/reverse_markdown/pull/69
16
16
  def treat(node, state)
17
17
  case node.name
18
- when 'code'
19
- node.text
18
+ when 'code', 'text'
19
+ node.text.strip
20
20
  when 'br'
21
21
  "\n"
22
22
  else
@@ -1,3 +1,3 @@
1
1
  module ReverseMarkdown
2
- VERSION = '1.2.0'
2
+ VERSION = '2.1.1'
3
3
  end
@@ -1,4 +1,3 @@
1
- require 'digest'
2
1
  require 'nokogiri'
3
2
  require 'reverse_markdown/version'
4
3
  require 'reverse_markdown/errors'
@@ -14,7 +13,10 @@ require 'reverse_markdown/converters/code'
14
13
  require 'reverse_markdown/converters/del'
15
14
  require 'reverse_markdown/converters/div'
16
15
  require 'reverse_markdown/converters/drop'
16
+ require 'reverse_markdown/converters/details'
17
17
  require 'reverse_markdown/converters/em'
18
+ require 'reverse_markdown/converters/figcaption'
19
+ require 'reverse_markdown/converters/figure'
18
20
  require 'reverse_markdown/converters/h'
19
21
  require 'reverse_markdown/converters/hr'
20
22
  require 'reverse_markdown/converters/ignore'
@@ -33,15 +35,17 @@ require 'reverse_markdown/converters/tr'
33
35
  module ReverseMarkdown
34
36
 
35
37
  def self.convert(input, options = {})
36
- root = case input
37
- when String then Nokogiri::HTML(input).root
38
- when Nokogiri::XML::Document then input.root
39
- when Nokogiri::XML::Node then input
40
- end
38
+ config.with(options) do
39
+ input = cleaner.force_encoding(input.to_s)
41
40
 
42
- root or return ''
41
+ root = case input
42
+ when String then Nokogiri::HTML(input).root
43
+ when Nokogiri::XML::Document then input.root
44
+ when Nokogiri::XML::Node then input
45
+ end
46
+
47
+ root or return ''
43
48
 
44
- config.with(options) do
45
49
  result = ReverseMarkdown::Converters.lookup(root.name).convert(root)
46
50
  cleaner.tidy(result)
47
51
  end
@@ -11,7 +11,6 @@ Gem::Specification.new do |s|
11
11
  s.summary = %q{Convert html code into markdown.}
12
12
  s.description = %q{Map simple html back into markdown, e.g. if you want to import existing html data in your application.}
13
13
  s.licenses = ["WTFPL"]
14
- s.rubyforge_project = "reverse_markdown"
15
14
 
16
15
  s.files = `git ls-files`.split("\n")
17
16
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -24,6 +23,6 @@ Gem::Specification.new do |s|
24
23
  s.add_development_dependency 'simplecov'
25
24
  s.add_development_dependency 'rake'
26
25
  s.add_development_dependency 'kramdown'
27
- # s.add_development_dependency 'byebug'
26
+ s.add_development_dependency 'byebug'
28
27
  s.add_development_dependency 'codeclimate-test-reporter'
29
28
  end
@@ -44,6 +44,8 @@
44
44
  </li>
45
45
  </ul>
46
46
 
47
+ <ul><li> <p>I don't want to cleanup after the party!</p> </li></ul>
48
+
47
49
  <ul>
48
50
  <li>
49
51
  <p>li 1, p 1</p>
@@ -20,7 +20,7 @@ describe ReverseMarkdown do
20
20
  context "links to ignore" do
21
21
  it { is_expected.to include ' ignore anchor tags with no link text ' }
22
22
  it { is_expected.to include ' not ignore [![An Image](image.png)](foo.html) anchor tags with images' }
23
- it { is_expected.to include ' pass through the text of internal jumplinks without treating them as links ' }
23
+ it { is_expected.to include ' pass through the text of [internal jumplinks](#content) without treating them as links ' }
24
24
  it { is_expected.to include ' pass through the text of anchor tags with no href without treating them as links ' }
25
25
  end
26
26
 
@@ -35,7 +35,8 @@ describe ReverseMarkdown do
35
35
  end
36
36
 
37
37
  context "lists containing embedded <p> tags" do
38
- xit { is_expected.to match /\n- I want to have a party at my house!\n/ }
38
+ it { is_expected.to match /\n- I want to have a party at my house!\n/ }
39
+ it { is_expected.to match /\n- I don't want to cleanup after the party!\n/ }
39
40
  end
40
41
 
41
42
  context "list item containing multiple <p> tags" do
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe ReverseMarkdown do
4
-
5
4
  let(:input) { File.read('spec/assets/paragraphs.html') }
6
5
  let(:document) { Nokogiri::HTML(input) }
7
6
  subject { ReverseMarkdown.convert(input) }
@@ -1,12 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe ReverseMarkdown do
4
-
5
4
  let(:input) { File.read('spec/assets/quotation.html') }
6
5
  let(:document) { Nokogiri::HTML(input) }
7
6
  subject { ReverseMarkdown.convert(input) }
8
7
 
9
8
  it { is_expected.to match /^ Block of code$/ }
10
9
  it { is_expected.to include "\n> First quoted paragraph\n> \n> Second quoted paragraph" }
11
-
12
10
  end
@@ -11,6 +11,11 @@ describe ReverseMarkdown::Converters::Del do
11
11
  expect(converter.convert(input)).to eq '~~deldeldel~~'
12
12
  end
13
13
 
14
+ it 'converts the input as expected' do
15
+ input = node_for('<s>strike that</s>')
16
+ expect(converter.convert(input)).to eq '~~strike that~~'
17
+ end
18
+
14
19
  it 'skips empty tags' do
15
20
  input = node_for('<del></del>')
16
21
  expect(converter.convert(input)).to eq ''
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe ReverseMarkdown::Converters::Details do
4
+ let(:converter) { ReverseMarkdown::Converters::Details.new }
5
+
6
+ context 'for standard markdown' do
7
+ before { ReverseMarkdown.config.github_flavored = false }
8
+
9
+ it 'handles details tags correctly' do
10
+ node = node_for("<details>foo</details>")
11
+ expect(converter.convert(node)).to include "foo"
12
+ end
13
+ end
14
+
15
+ context 'for github_flavored markdown' do
16
+ before { ReverseMarkdown.config.github_flavored = true }
17
+
18
+ it 'handles details tags correctly' do
19
+ node = node_for("<details>foo</details>")
20
+ expect(converter.convert(node)).to include "#foo"
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe ReverseMarkdown::Converters::Figure do
4
+
5
+ let(:converter) { ReverseMarkdown::Converters::Figure.new }
6
+
7
+ it 'handles figure tags with figcaption correctly' do
8
+ node = node_for("<figure><img src='image.jpg' alt='img_alt'><figcaption>Figure Caption</figcaption></figure>")
9
+ expect(converter.convert(node)).to eq "\n![img_alt](image.jpg)\n_Figure Caption_\n"
10
+ end
11
+
12
+ it 'handles figure tags without figcaption correctly' do
13
+ node = node_for("<figure><img src='image.jpg' alt='img_alt'></figure>")
14
+ expect(converter.convert(node)).to eq "\n![img_alt](image.jpg)\n"
15
+ end
16
+
17
+ end
@@ -12,10 +12,15 @@ describe ReverseMarkdown::Converters::Pre do
12
12
  expect(converter.convert(node)).to include " puts foo\n"
13
13
  end
14
14
 
15
- it 'preserves new lines' do
15
+ it 'preserves new lines as <br>' do
16
16
  node = node_for("<pre>one<br>two<br>three</pre>")
17
17
  expect(converter.convert(node)).to include "\n\n one\n two\n three\n\n"
18
18
  end
19
+
20
+ it 'preserves new lines as <br> and \n' do
21
+ node = node_for("<pre>one\ntwo\nthree<br>four</pre>")
22
+ expect(converter.convert(node)).to include "\n\n one\n two\n three\n four\n\n"
23
+ end
19
24
 
20
25
  it 'handles code tags correctly' do
21
26
  node = node_for("<pre><code>foobar</code></pre>")
@@ -41,6 +46,11 @@ describe ReverseMarkdown::Converters::Pre do
41
46
  expect(converter.convert(node)).to include "```\nfoo\nbar\n```"
42
47
  end
43
48
 
49
+ it 'preserves new lines as <br> and \n' do
50
+ node = node_for("<pre>one\ntwo\nthree<br>four</pre>")
51
+ expect(converter.convert(node)).to include "```\none\ntwo\nthree\nfour\n```"
52
+ end
53
+
44
54
  it 'handles code tags correctly' do
45
55
  node = node_for("<pre><code>foobar</code></pre>")
46
56
  expect(converter.convert(node)).to include "```\nfoobar\n```"
@@ -33,5 +33,15 @@ describe ReverseMarkdown do
33
33
  end
34
34
  expect(ReverseMarkdown.config.github_flavored).to eq true
35
35
  end
36
+
37
+ describe 'force_encoding option', jruby: :exclude do
38
+ it 'raises invalid byte sequence in UTF-8 exception' do
39
+ expect { ReverseMarkdown.convert("hi \255") }.to raise_error(ArgumentError)
40
+ end
41
+
42
+ it 'handles invalid byte sequence if option is set' do
43
+ expect(ReverseMarkdown.convert("hi \255", force_encoding: true)).to eq "hi\n\n"
44
+ end
45
+ end
36
46
  end
37
47
  end
data/spec/spec_helper.rb CHANGED
@@ -14,6 +14,14 @@ RSpec.configure do |config|
14
14
  config.after(:each) do
15
15
  ReverseMarkdown.instance_variable_set(:@config, nil)
16
16
  end
17
+
18
+ config.around(jruby: :exclude) do |example|
19
+ if RUBY_ENGINE == 'jruby'
20
+ example.metadata[:skip] = true
21
+ else
22
+ example.call
23
+ end
24
+ end
17
25
  end
18
26
 
19
27
  def node_for(html)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reverse_markdown
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Johannes Opper
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-22 00:00:00.000000000 Z
11
+ date: 2021-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: byebug
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: codeclimate-test-reporter
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -123,9 +137,12 @@ files:
123
137
  - lib/reverse_markdown/converters/bypass.rb
124
138
  - lib/reverse_markdown/converters/code.rb
125
139
  - lib/reverse_markdown/converters/del.rb
140
+ - lib/reverse_markdown/converters/details.rb
126
141
  - lib/reverse_markdown/converters/div.rb
127
142
  - lib/reverse_markdown/converters/drop.rb
128
143
  - lib/reverse_markdown/converters/em.rb
144
+ - lib/reverse_markdown/converters/figcaption.rb
145
+ - lib/reverse_markdown/converters/figure.rb
129
146
  - lib/reverse_markdown/converters/h.rb
130
147
  - lib/reverse_markdown/converters/hr.rb
131
148
  - lib/reverse_markdown/converters/ignore.rb
@@ -173,6 +190,8 @@ files:
173
190
  - spec/lib/reverse_markdown/converters/blockquote_spec.rb
174
191
  - spec/lib/reverse_markdown/converters/br_spec.rb
175
192
  - spec/lib/reverse_markdown/converters/del_spec.rb
193
+ - spec/lib/reverse_markdown/converters/details_spec.rb
194
+ - spec/lib/reverse_markdown/converters/figure_spec.rb
176
195
  - spec/lib/reverse_markdown/converters/li_spec.rb
177
196
  - spec/lib/reverse_markdown/converters/pre_spec.rb
178
197
  - spec/lib/reverse_markdown/converters/strong_spec.rb
@@ -199,7 +218,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
199
218
  - !ruby/object:Gem::Version
200
219
  version: '0'
201
220
  requirements: []
202
- rubygems_version: 3.0.3
221
+ rubygems_version: 3.1.4
203
222
  signing_key:
204
223
  specification_version: 4
205
224
  summary: Convert html code into markdown.
@@ -234,6 +253,8 @@ test_files:
234
253
  - spec/lib/reverse_markdown/converters/blockquote_spec.rb
235
254
  - spec/lib/reverse_markdown/converters/br_spec.rb
236
255
  - spec/lib/reverse_markdown/converters/del_spec.rb
256
+ - spec/lib/reverse_markdown/converters/details_spec.rb
257
+ - spec/lib/reverse_markdown/converters/figure_spec.rb
237
258
  - spec/lib/reverse_markdown/converters/li_spec.rb
238
259
  - spec/lib/reverse_markdown/converters/pre_spec.rb
239
260
  - spec/lib/reverse_markdown/converters/strong_spec.rb