reverse_adoc 1.0.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +3 -3
- data/README.adoc +4 -294
- data/Rakefile +2 -13
- data/reverse_adoc.gemspec +2 -20
- metadata +5 -246
- data/.editorconfig +0 -15
- data/.github/workflows/rake.yml +0 -15
- data/.gitignore +0 -10
- data/.hound.yml +0 -5
- data/.rubocop.yml +0 -10
- data/LICENSE.txt +0 -25
- data/exe/reverse_adoc +0 -70
- data/exe/w2a +0 -72
- data/lib/reverse_adoc/cleaner.rb +0 -113
- data/lib/reverse_adoc/config.rb +0 -54
- data/lib/reverse_adoc/converters/a.rb +0 -42
- data/lib/reverse_adoc/converters/aside.rb +0 -16
- data/lib/reverse_adoc/converters/audio.rb +0 -29
- data/lib/reverse_adoc/converters/base.rb +0 -100
- data/lib/reverse_adoc/converters/blockquote.rb +0 -27
- data/lib/reverse_adoc/converters/br.rb +0 -15
- data/lib/reverse_adoc/converters/bypass.rb +0 -81
- data/lib/reverse_adoc/converters/code.rb +0 -56
- data/lib/reverse_adoc/converters/div.rb +0 -18
- data/lib/reverse_adoc/converters/drop.rb +0 -22
- data/lib/reverse_adoc/converters/em.rb +0 -55
- data/lib/reverse_adoc/converters/figure.rb +0 -25
- data/lib/reverse_adoc/converters/h.rb +0 -42
- data/lib/reverse_adoc/converters/head.rb +0 -23
- data/lib/reverse_adoc/converters/hr.rb +0 -15
- data/lib/reverse_adoc/converters/ignore.rb +0 -16
- data/lib/reverse_adoc/converters/img.rb +0 -93
- data/lib/reverse_adoc/converters/li.rb +0 -17
- data/lib/reverse_adoc/converters/mark.rb +0 -21
- data/lib/reverse_adoc/converters/math.rb +0 -31
- data/lib/reverse_adoc/converters/ol.rb +0 -64
- data/lib/reverse_adoc/converters/p.rb +0 -23
- data/lib/reverse_adoc/converters/pass_through.rb +0 -13
- data/lib/reverse_adoc/converters/pre.rb +0 -55
- data/lib/reverse_adoc/converters/q.rb +0 -16
- data/lib/reverse_adoc/converters/strong.rb +0 -52
- data/lib/reverse_adoc/converters/sub.rb +0 -16
- data/lib/reverse_adoc/converters/sup.rb +0 -16
- data/lib/reverse_adoc/converters/table.rb +0 -69
- data/lib/reverse_adoc/converters/td.rb +0 -83
- data/lib/reverse_adoc/converters/text.rb +0 -65
- data/lib/reverse_adoc/converters/th.rb +0 -14
- data/lib/reverse_adoc/converters/tr.rb +0 -22
- data/lib/reverse_adoc/converters/video.rb +0 -29
- data/lib/reverse_adoc/converters.rb +0 -32
- data/lib/reverse_adoc/errors.rb +0 -10
- data/lib/reverse_adoc/html_converter.rb +0 -61
- data/lib/reverse_adoc/version.rb +0 -3
- data/lib/reverse_adoc.rb +0 -27
- data/spec/assets/anchors.html +0 -30
- data/spec/assets/basic.html +0 -61
- data/spec/assets/code.html +0 -22
- data/spec/assets/escapables.html +0 -17
- data/spec/assets/external_images.docx +0 -0
- data/spec/assets/external_images.html +0 -35
- data/spec/assets/from_the_wild.html +0 -23
- data/spec/assets/full_example.html +0 -49
- data/spec/assets/html_fragment.html +0 -3
- data/spec/assets/lists.html +0 -137
- data/spec/assets/minimum.html +0 -4
- data/spec/assets/paragraphs.html +0 -24
- data/spec/assets/quotation.html +0 -12
- data/spec/assets/tables.html +0 -99
- data/spec/assets/unknown_tags.html +0 -9
- data/spec/bin/reverse_adoc_spec.rb +0 -33
- data/spec/bin/w2a_spec.rb +0 -35
- data/spec/components/anchors_spec.rb +0 -32
- data/spec/components/basic_spec.rb +0 -63
- data/spec/components/code_spec.rb +0 -25
- data/spec/components/escapables_spec.rb +0 -30
- data/spec/components/from_the_wild_spec.rb +0 -15
- data/spec/components/html_fragment_spec.rb +0 -9
- data/spec/components/lists_spec.rb +0 -90
- data/spec/components/paragraphs_spec.rb +0 -14
- data/spec/components/quotation_spec.rb +0 -12
- data/spec/components/tables_spec.rb +0 -42
- data/spec/components/unknown_tags_spec.rb +0 -41
- data/spec/lib/reverse_adoc/cleaner_spec.rb +0 -180
- data/spec/lib/reverse_adoc/config_spec.rb +0 -25
- data/spec/lib/reverse_adoc/converters/aside_spec.rb +0 -11
- data/spec/lib/reverse_adoc/converters/audio_spec.rb +0 -15
- data/spec/lib/reverse_adoc/converters/blockquote_spec.rb +0 -23
- data/spec/lib/reverse_adoc/converters/br_spec.rb +0 -9
- data/spec/lib/reverse_adoc/converters/code_spec.rb +0 -15
- data/spec/lib/reverse_adoc/converters/div_spec.rb +0 -15
- data/spec/lib/reverse_adoc/converters/figure_spec.rb +0 -10
- data/spec/lib/reverse_adoc/converters/img_spec.rb +0 -25
- data/spec/lib/reverse_adoc/converters/li_spec.rb +0 -11
- data/spec/lib/reverse_adoc/converters/mark_spec.rb +0 -10
- data/spec/lib/reverse_adoc/converters/p_spec.rb +0 -10
- data/spec/lib/reverse_adoc/converters/pre_spec.rb +0 -43
- data/spec/lib/reverse_adoc/converters/q_spec.rb +0 -10
- data/spec/lib/reverse_adoc/converters/strong_spec.rb +0 -21
- data/spec/lib/reverse_adoc/converters/text_spec.rb +0 -67
- data/spec/lib/reverse_adoc/converters/video_spec.rb +0 -15
- data/spec/lib/reverse_adoc/converters_spec.rb +0 -22
- data/spec/lib/reverse_adoc.rb +0 -90
- data/spec/spec_helper.rb +0 -25
- data/spec/support/shell_helpers.rb +0 -15
@@ -1,90 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe ReverseAdoc do
|
4
|
-
let(:input) { File.read("spec/assets/lists.html") }
|
5
|
-
let(:document) { Nokogiri::HTML(input) }
|
6
|
-
subject { ReverseAdoc.convert(input) }
|
7
|
-
|
8
|
-
it { is_expected.to match /\n\* unordered list entry\n/ }
|
9
|
-
it { is_expected.to match /\n\* unordered list entry 2\n/ }
|
10
|
-
it { is_expected.to match /\n. ordered list entry\n/ }
|
11
|
-
it { is_expected.to match /\n. ordered list entry 2\n/ }
|
12
|
-
it { is_expected.to match /\n. list entry 1st hierarchy\n/ }
|
13
|
-
it { is_expected.to match /\n\*\* nested unsorted list entry\n/ }
|
14
|
-
it { is_expected.to match /\n\.\.\. deep nested list entry\n/ }
|
15
|
-
|
16
|
-
context "list anchors" do
|
17
|
-
it { is_expected.to match /\n\[\[1\]\]\n\. arabic1\n/ }
|
18
|
-
it { is_expected.to match /\n\[\[A\]\]\n\* upperalpha1\n/ }
|
19
|
-
end
|
20
|
-
|
21
|
-
context "list styles" do
|
22
|
-
it { is_expected.to match /\n\[arabic\]\n\. arabic\n/ }
|
23
|
-
it { is_expected.to match /\n\[loweralpha\]\n\. loweralpha\n/ }
|
24
|
-
it { is_expected.to match /\n\[upperalpha\]\n\. upperalpha\n/ }
|
25
|
-
it { is_expected.to match /\n\[lowerroman\]\n\. lowerroman\n/ }
|
26
|
-
it { is_expected.to match /\n\[upperroman\]\n\. upperroman\n/ }
|
27
|
-
it { is_expected.to match /\n\[type=disc\]\n\* disc\n/ }
|
28
|
-
end
|
29
|
-
|
30
|
-
context "list start, reversed" do
|
31
|
-
it { is_expected.to match /\n\[start=3\]\n\. another ordered list entry\n/ }
|
32
|
-
it {
|
33
|
-
is_expected.to match /\n\[%reversed\]\n\. a reversed ordered list entry\n/
|
34
|
-
}
|
35
|
-
end
|
36
|
-
|
37
|
-
context "nested list with no whitespace" do
|
38
|
-
it { is_expected.to match /\n\* item a\n/ }
|
39
|
-
it { is_expected.to match /\n\* item b\n/ }
|
40
|
-
it { is_expected.to match /\n\*\* item bb\n/ }
|
41
|
-
it { is_expected.to match /\n\*\* item bc\n/ }
|
42
|
-
end
|
43
|
-
|
44
|
-
context "nested list with lots of whitespace" do
|
45
|
-
it { is_expected.to match /\n\* item wa \n/ }
|
46
|
-
it { is_expected.to match /\n\* item wb \n/ }
|
47
|
-
it { is_expected.to match /\n\*\* item wbb \n/ }
|
48
|
-
it { is_expected.to match /\n\*\* item wbc \n/ }
|
49
|
-
end
|
50
|
-
|
51
|
-
context "lists containing links" do
|
52
|
-
it { is_expected.to match /\n\* link:Basic_concepts\[1 Basic concepts\]\n/ }
|
53
|
-
it {
|
54
|
-
is_expected.to match /\n\* link:History_of_the_idea\[2 History of the idea\]\n/
|
55
|
-
}
|
56
|
-
it {
|
57
|
-
is_expected.to match /\n\* link:Intelligence_explosion\[3 Intelligence explosion\]\n/
|
58
|
-
}
|
59
|
-
end
|
60
|
-
|
61
|
-
context "lists containing embedded <p> tags" do
|
62
|
-
xit { is_expected.to match /\n\* I want to have a party at my house!\n/ }
|
63
|
-
end
|
64
|
-
|
65
|
-
context "list item containing multiple <p> tags" do
|
66
|
-
xit { is_expected.to match /\n\* li 1, p 1\n\n\* li 1, p 2\n/ }
|
67
|
-
end
|
68
|
-
|
69
|
-
context "it produces correct numbering" do
|
70
|
-
it { is_expected.to include "\. one" }
|
71
|
-
it { is_expected.to include "\.\. one one" }
|
72
|
-
it { is_expected.to include "\.\. one two" }
|
73
|
-
it { is_expected.to include "\. two" }
|
74
|
-
it { is_expected.to include "\.\. two one" }
|
75
|
-
it { is_expected.to include "\.\.\. two one one" }
|
76
|
-
it { is_expected.to include "\.\.\. two one two" }
|
77
|
-
it { is_expected.to include "\.\. two two" }
|
78
|
-
it { is_expected.to include "\. three" }
|
79
|
-
end
|
80
|
-
|
81
|
-
context "properly embeds a nested list between adjacent list items" do
|
82
|
-
it { is_expected.to match /\n\* alpha\n/ }
|
83
|
-
it { is_expected.to match /\n\* bravo/ }
|
84
|
-
it { is_expected.to match /\n\*\* bravo alpha\n/ }
|
85
|
-
it { is_expected.to match /\n\*\* bravo bravo/ }
|
86
|
-
it { is_expected.to match /\n\*\*\* bravo bravo alpha/ }
|
87
|
-
it { is_expected.to match /\n\* charlie\n/ }
|
88
|
-
it { is_expected.to match /\n\* delta\n/ }
|
89
|
-
end
|
90
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe ReverseAdoc do
|
4
|
-
let(:input) { File.read("spec/assets/paragraphs.html") }
|
5
|
-
let(:document) { Nokogiri::HTML(input) }
|
6
|
-
subject { ReverseAdoc.convert(input) }
|
7
|
-
|
8
|
-
it { is_expected.not_to start_with "\n\n" }
|
9
|
-
it { is_expected.to start_with "First content\n\nSecond content\n\n" }
|
10
|
-
it { is_expected.to include "\n\n_Complex_\n\n\.\.\.\.\n\n Content\n" }
|
11
|
-
it { is_expected.to include "*Trailing whitespace:*" }
|
12
|
-
it { is_expected.to include "*Trailing non-breaking space: *" }
|
13
|
-
it { is_expected.to include "*_Combination: _*" }
|
14
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe ReverseAdoc do
|
4
|
-
let(:input) { File.read("spec/assets/quotation.html") }
|
5
|
-
let(:document) { Nokogiri::HTML(input) }
|
6
|
-
subject { ReverseAdoc.convert(input) }
|
7
|
-
|
8
|
-
it { is_expected.to match /\n Block of code$/ }
|
9
|
-
it {
|
10
|
-
is_expected.to include "\n____\nFirst quoted paragraph\n\nSecond quoted paragraph\n____\n"
|
11
|
-
}
|
12
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe ReverseAdoc do
|
4
|
-
let(:input) { File.read("spec/assets/tables.html") }
|
5
|
-
let(:document) { Nokogiri::HTML(input) }
|
6
|
-
subject { ReverseAdoc.convert(input) }
|
7
|
-
|
8
|
-
it {
|
9
|
-
is_expected.to match /\[\[A\]\]\n\|===\n\| \[\[C\]\]header 1 \| header 2 \| header 3\n\n/
|
10
|
-
}
|
11
|
-
it {
|
12
|
-
is_expected.to match /\nh\| \[\[D\]\]data 1-1 \| data 2-1 \| data 3-1\n/
|
13
|
-
}
|
14
|
-
it { is_expected.to match /\nh\| data 1-2 \| data 2-2 \| data 3-2\n/ }
|
15
|
-
|
16
|
-
it {
|
17
|
-
is_expected.to match /\n\| _header oblique_ \| \*header bold\* \| `header code`\n\n/
|
18
|
-
}
|
19
|
-
it {
|
20
|
-
is_expected.to match /\n\| _data oblique_ \| \*data bold\* \| `data code`\n/
|
21
|
-
}
|
22
|
-
|
23
|
-
it { is_expected.to match /\n\.2\+\| rowspan 2\n/ }
|
24
|
-
it { is_expected.to match /\n2\+| colspan 2\n/ }
|
25
|
-
it { is_expected.to match /\n2\.2\+| colrowspan 2\n/ }
|
26
|
-
|
27
|
-
it { is_expected.to match /<\| horizontal left / }
|
28
|
-
it { is_expected.to match /\^\| horizontal center / }
|
29
|
-
it { is_expected.to match />\| horizontal right\n/ }
|
30
|
-
it { is_expected.to match /\^\.\^\| center middle\n/ }
|
31
|
-
|
32
|
-
it { is_expected.to match /\n\.Table _caption_\n\|===\n/ }
|
33
|
-
# it { is_expected.to match /\n\[width=75%\]\n\|===\n\| 75% width table\n/ }
|
34
|
-
it {
|
35
|
-
is_expected.to match /\n\[frame=topbot,rules=cols\]\n\|===\n\| topbot\n/
|
36
|
-
}
|
37
|
-
|
38
|
-
it {
|
39
|
-
is_expected.to match /\na|\nHello\n\nThis cell has multiple paragraphs\n\n/
|
40
|
-
}
|
41
|
-
it { is_expected.to match /\n\| This cell has a single paragraph\n/ }
|
42
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe ReverseAdoc do
|
4
|
-
let(:input) { File.read("spec/assets/unknown_tags.html") }
|
5
|
-
let(:document) { Nokogiri::HTML(input) }
|
6
|
-
let(:result) { ReverseAdoc.convert(input) }
|
7
|
-
|
8
|
-
context "with unknown_tags = :pass_through" do
|
9
|
-
before { ReverseAdoc.config.unknown_tags = :pass_through }
|
10
|
-
|
11
|
-
it { expect(result).to include "<bar>Foo with bar</bar>" }
|
12
|
-
end
|
13
|
-
|
14
|
-
context "with unknown_tags = :raise" do
|
15
|
-
before { ReverseAdoc.config.unknown_tags = :raise }
|
16
|
-
|
17
|
-
it { expect { result }.to raise_error(ReverseAdoc::UnknownTagError) }
|
18
|
-
end
|
19
|
-
|
20
|
-
context "with unknown_tags = :drop" do
|
21
|
-
before { ReverseAdoc.config.unknown_tags = :drop }
|
22
|
-
|
23
|
-
it { expect(result).to eq "" }
|
24
|
-
end
|
25
|
-
|
26
|
-
context "with unknown_tags = :bypass" do
|
27
|
-
before { ReverseAdoc.config.unknown_tags = :bypass }
|
28
|
-
|
29
|
-
it { expect(result).to eq "Foo with bar\n\n" }
|
30
|
-
end
|
31
|
-
|
32
|
-
context "with unknown_tags = :something_wrong" do
|
33
|
-
before { ReverseAdoc.config.unknown_tags = :something_wrong }
|
34
|
-
|
35
|
-
it {
|
36
|
-
expect do
|
37
|
-
result
|
38
|
-
end.to raise_error(ReverseAdoc::InvalidConfigurationError)
|
39
|
-
}
|
40
|
-
end
|
41
|
-
end
|
@@ -1,180 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe ReverseAdoc::Cleaner do
|
4
|
-
let(:cleaner) { ReverseAdoc::Cleaner.new }
|
5
|
-
|
6
|
-
describe "#scrub_whitespace" do
|
7
|
-
it "makes consistent nonbreaking spaces" do
|
8
|
-
result = cleaner.scrub_whitespace("   ")
|
9
|
-
expect(result).to eq "     "
|
10
|
-
end
|
11
|
-
|
12
|
-
it "makes four linebreaks into two" do
|
13
|
-
result = cleaner.scrub_whitespace("A\n\n\n\nB")
|
14
|
-
expect(result).to eq "A\n\nB"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe "#clean_headings" do
|
19
|
-
it "removes empty headings" do
|
20
|
-
result = cleaner.clean_headings("<h2></h2>")
|
21
|
-
expect(result).to eq " "
|
22
|
-
end
|
23
|
-
|
24
|
-
it "cleans superscripts rendered as headings" do
|
25
|
-
result = cleaner.clean_headings(%{<p class="Standard" style="font-size: 12pt; font-family: Calibri; writing-mode: lr-tb; margin: 0;" align="left ! important"><span class="T1" style="margin: 0;">H</span><h1 class="T2" style="vertical-align: super; font-size: 58%; margin: 0;">2</h1><span class="T1" style="margin: 0;">0</span></p>})
|
26
|
-
expect(result).to eq %{<p class="Standard" style="font-size: 12pt; font-family: Calibri; writing-mode: lr-tb; margin: 0;" align="left ! important"><span class="T1" style="margin: 0;">H</span><sup>2</sup><span class="T1" style="margin: 0;">0</span></p>}
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe "#remove_newlines" do
|
31
|
-
it "removes more than 2 subsequent newlines" do
|
32
|
-
result = cleaner.remove_newlines("foo\n\n\nbar")
|
33
|
-
expect(result).to eq "foo\n\nbar"
|
34
|
-
end
|
35
|
-
|
36
|
-
it "skips single and double newlines" do
|
37
|
-
result = cleaner.remove_newlines("foo\nbar\n\nbaz")
|
38
|
-
expect(result).to eq "foo\nbar\n\nbaz"
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe "#remove_inner_whitespaces" do
|
43
|
-
it "removes duplicate whitespaces from the string" do
|
44
|
-
result = cleaner.remove_inner_whitespaces("foo bar")
|
45
|
-
expect(result).to eq "foo bar"
|
46
|
-
end
|
47
|
-
|
48
|
-
it "performs changes for multiple lines" do
|
49
|
-
result = cleaner.remove_inner_whitespaces("foo bar\nbar foo")
|
50
|
-
expect(result).to eq "foo bar\nbar foo"
|
51
|
-
end
|
52
|
-
|
53
|
-
it "keeps leading whitespaces" do
|
54
|
-
result = cleaner.remove_inner_whitespaces(" foo bar\n bar foo")
|
55
|
-
expect(result).to eq " foo bar\n bar foo"
|
56
|
-
end
|
57
|
-
|
58
|
-
it "keeps trailing whitespaces" do
|
59
|
-
result = cleaner.remove_inner_whitespaces("foo \n")
|
60
|
-
expect(result).to eq "foo \n"
|
61
|
-
end
|
62
|
-
|
63
|
-
it "keeps trailing newlines" do
|
64
|
-
result = cleaner.remove_inner_whitespaces("foo\n")
|
65
|
-
expect(result).to eq "foo\n"
|
66
|
-
end
|
67
|
-
|
68
|
-
it "removes tabs as well" do
|
69
|
-
result = cleaner.remove_inner_whitespaces("foo\t \tbar")
|
70
|
-
expect(result).to eq "foo bar"
|
71
|
-
end
|
72
|
-
|
73
|
-
it "keeps lines that only contain whitespace" do
|
74
|
-
result = cleaner.remove_inner_whitespaces("foo \nbar \n \n \nfoo")
|
75
|
-
expect(result).to eq "foo \nbar \n \n \nfoo"
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
describe "#clean_punctuation_characters" do
|
80
|
-
it "removes whitespace between tag end and punctuation characters" do
|
81
|
-
input = "**fat** . ~~strike~~ ? __italic__ ! "
|
82
|
-
result = cleaner.clean_punctuation_characters(input)
|
83
|
-
expect(result).to eq "**fat**. ~~strike~~? __italic__! "
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
describe "#clean_tag_borders" do
|
88
|
-
context "with default_border is set to space" do
|
89
|
-
before { ReverseAdoc.config.tag_border = " " }
|
90
|
-
|
91
|
-
# it 'removes not needed whitespaces from strong tags' do
|
92
|
-
# input = "foo ** foobar ** bar"
|
93
|
-
# result = cleaner.clean_tag_borders(input)
|
94
|
-
# expect(result).to eq "foo **foobar** bar"
|
95
|
-
# end
|
96
|
-
|
97
|
-
# it 'remotes leading or trailing whitespaces independently' do
|
98
|
-
# input = "1 **fat ** 2 ** fat** 3"
|
99
|
-
# result = cleaner.clean_tag_borders(input)
|
100
|
-
# expect(result).to eq "1 **fat** 2 **fat** 3"
|
101
|
-
# end
|
102
|
-
|
103
|
-
# it 'adds whitespaces if there are none' do
|
104
|
-
# input = "1**fat**2"
|
105
|
-
# result = cleaner.clean_tag_borders(input)
|
106
|
-
# expect(result).to eq "1 **fat** 2"
|
107
|
-
# end
|
108
|
-
|
109
|
-
it "doesn't add whitespaces to underscore'ed elements if they are part of links" do
|
110
|
-
input = "![im__age](sou__rce)"
|
111
|
-
result = cleaner.clean_tag_borders(input)
|
112
|
-
expect(result).to eq "![im__age](sou__rce)"
|
113
|
-
end
|
114
|
-
|
115
|
-
# it "still cleans up whitespaces that aren't inside a link" do
|
116
|
-
# input = "now __italic __with following [under__scored](link)"
|
117
|
-
# result = cleaner.clean_tag_borders(input)
|
118
|
-
# expect(result).to eq "now __italic__ with following [under__scored](link)"
|
119
|
-
# end
|
120
|
-
|
121
|
-
# it 'cleans italic stuff as well' do
|
122
|
-
# input = "1 __italic __ 2 __ italic__ 3__italic __4"
|
123
|
-
# result = cleaner.clean_tag_borders(input)
|
124
|
-
# expect(result).to eq "1 __italic__ 2 __italic__ 3 __italic__ 4"
|
125
|
-
# end
|
126
|
-
|
127
|
-
it "cleans strikethrough stuff as well" do
|
128
|
-
input = "1 ~~italic ~~ 2 ~~ italic~~ 3~~italic ~~4"
|
129
|
-
result = cleaner.clean_tag_borders(input)
|
130
|
-
expect(result).to eq "1 ~~italic~~ 2 ~~italic~~ 3 ~~italic~~ 4"
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
context "with default_border set to no space" do
|
135
|
-
before { ReverseAdoc.config.tag_border = "" }
|
136
|
-
|
137
|
-
# it 'removes not needed whitespaces from strong tags' do
|
138
|
-
# input = "foo ** foobar ** bar"
|
139
|
-
# result = cleaner.clean_tag_borders(input)
|
140
|
-
# expect(result).to eq "foo **foobar** bar"
|
141
|
-
# end
|
142
|
-
|
143
|
-
# it 'remotes leading or trailing whitespaces independently' do
|
144
|
-
# input = "1 **fat ** 2 ** fat** 3"
|
145
|
-
# result = cleaner.clean_tag_borders(input)
|
146
|
-
# expect(result).to eq "1 **fat** 2 **fat** 3"
|
147
|
-
# end
|
148
|
-
|
149
|
-
it "adds whitespaces if there are none" do
|
150
|
-
input = "1**fat**2"
|
151
|
-
result = cleaner.clean_tag_borders(input)
|
152
|
-
expect(result).to eq "1**fat**2"
|
153
|
-
end
|
154
|
-
|
155
|
-
it "doesn't add whitespaces to underscore'ed elements if they are part of links" do
|
156
|
-
input = "![im__age](sou__rce)"
|
157
|
-
result = cleaner.clean_tag_borders(input)
|
158
|
-
expect(result).to eq "![im__age](sou__rce)"
|
159
|
-
end
|
160
|
-
|
161
|
-
# it "still cleans up whitespaces that aren't inside a link" do
|
162
|
-
# input = "now __italic __with following [under__scored](link)"
|
163
|
-
# result = cleaner.clean_tag_borders(input)
|
164
|
-
# expect(result).to eq "now __italic__with following [under__scored](link)"
|
165
|
-
# end
|
166
|
-
|
167
|
-
# it 'cleans italic stuff as well' do
|
168
|
-
# input = "1 __italic __ 2 __ italic__ 3__italic __4"
|
169
|
-
# result = cleaner.clean_tag_borders(input)
|
170
|
-
# expect(result).to eq "1 __italic__ 2 __italic__ 3__italic__4"
|
171
|
-
# end
|
172
|
-
|
173
|
-
it "cleans strikethrough stuff as well" do
|
174
|
-
input = "1 ~~italic ~~ 2 ~~ italic~~ 3~~italic ~~4"
|
175
|
-
result = cleaner.clean_tag_borders(input)
|
176
|
-
expect(result).to eq "1 ~~italic~~ 2 ~~italic~~ 3~~italic~~4"
|
177
|
-
end
|
178
|
-
end
|
179
|
-
end
|
180
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe ReverseAdoc::Config do
|
4
|
-
describe "#with" do
|
5
|
-
let(:config) { ReverseAdoc.config }
|
6
|
-
|
7
|
-
it "takes additional options into account" do
|
8
|
-
config.with(tag_border: :foobar) do
|
9
|
-
expect(ReverseAdoc.config.tag_border).to eq :foobar
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
it "returns the result of a given block" do
|
14
|
-
expect(config.with { :something }).to eq :something
|
15
|
-
end
|
16
|
-
|
17
|
-
it "resets to original settings afterwards" do
|
18
|
-
config.tag_border = :foo
|
19
|
-
config.with(tag_border: :bar) do
|
20
|
-
expect(ReverseAdoc.config.tag_border).to eq :bar
|
21
|
-
end
|
22
|
-
expect(ReverseAdoc.config.tag_border).to eq :foo
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe ReverseAdoc::Converters::Aside do
|
4
|
-
let(:converter) { ReverseAdoc::Converters::Aside.new }
|
5
|
-
|
6
|
-
it "converts aside" do
|
7
|
-
input = node_for("<aside><ul><li>foo</li></ul></aside>")
|
8
|
-
result = converter.convert(input)
|
9
|
-
expect(result).to eq "\n\n\*\*\*\*\n\n* foo\n\n\*\*\*\*\n\n"
|
10
|
-
end
|
11
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe ReverseAdoc::Converters::Audio do
|
4
|
-
let(:converter) { ReverseAdoc::Converters::Audio.new }
|
5
|
-
|
6
|
-
it "converts audio with no attributes" do
|
7
|
-
node = node_for("<audio src='example.mp3'/>")
|
8
|
-
expect(converter.convert(node)).to include "audio::example.mp3[]"
|
9
|
-
end
|
10
|
-
|
11
|
-
it "converts audio with full set of attributes" do
|
12
|
-
node = node_for("<audio id='A' src='example.mp3' loop='loop'/>")
|
13
|
-
expect(converter.convert(node)).to include "[[A]]\naudio::example.mp3[options=\"loop\"]"
|
14
|
-
end
|
15
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe ReverseAdoc::Converters::Blockquote do
|
4
|
-
let(:converter) { ReverseAdoc::Converters::Blockquote.new }
|
5
|
-
|
6
|
-
it "converts nested elements as well" do
|
7
|
-
input = node_for("<blockquote><ul><li>foo</li></ul></blockquote>")
|
8
|
-
result = converter.convert(input)
|
9
|
-
expect(result).to eq "\n\n____\n* foo\n____\n\n"
|
10
|
-
end
|
11
|
-
|
12
|
-
it "can deal with paragraphs inside" do
|
13
|
-
input = node_for("<blockquote><p>Some text.</p><p>Some more text.</p></blockquote>")
|
14
|
-
result = converter.convert(input)
|
15
|
-
expect(result).to eq "\n\n____\nSome text.\n\nSome more text.\n____\n\n"
|
16
|
-
end
|
17
|
-
|
18
|
-
it "can deal with cite attribute" do
|
19
|
-
input = node_for("<blockquote cite='http://www.example.com'><p>Some text.</p><p>Some more text.</p></blockquote>")
|
20
|
-
result = converter.convert(input)
|
21
|
-
expect(result).to eq "\n\n[quote,http://www.example.com]\n____\nSome text.\n\nSome more text.\n____\n\n"
|
22
|
-
end
|
23
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe ReverseAdoc::Converters::Code do
|
4
|
-
let(:converter) { ReverseAdoc::Converters::Code.new }
|
5
|
-
|
6
|
-
it "converts as backtick" do
|
7
|
-
node = node_for("<code>puts foo</code>")
|
8
|
-
expect(converter.convert(node)).to include "`puts foo`"
|
9
|
-
end
|
10
|
-
|
11
|
-
it "converts as backtick" do
|
12
|
-
node = node_for("<tt>puts foo</tt>")
|
13
|
-
expect(converter.convert(node)).to include "`puts foo`"
|
14
|
-
end
|
15
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe ReverseAdoc::Converters::Code do
|
4
|
-
let(:converter) { ReverseAdoc::Converters::Div.new }
|
5
|
-
|
6
|
-
it "converts div" do
|
7
|
-
node = node_for("<div>puts foo</div>")
|
8
|
-
expect(converter.convert(node)).to include "\nputs foo"
|
9
|
-
end
|
10
|
-
|
11
|
-
it "converts div with anchor" do
|
12
|
-
node = node_for("<div id='A'>puts foo</div>")
|
13
|
-
expect(converter.convert(node)).to include "\n[[A]]\nputs foo"
|
14
|
-
end
|
15
|
-
end
|
@@ -1,10 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe ReverseAdoc::Converters::Figure do
|
4
|
-
let(:converter) { ReverseAdoc::Converters::Figure.new }
|
5
|
-
|
6
|
-
it "converts figure" do
|
7
|
-
node = node_for("<figure id='A'><img src='example.jpg'/><figcaption>Figure <i>caption</i></figcaption></figure>")
|
8
|
-
expect(converter.convert(node)).to include "[[A]]\n.Figure _caption_\n====\nimage::example.jpg[]\n====\n"
|
9
|
-
end
|
10
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe ReverseAdoc::Converters::Img do
|
4
|
-
let(:converter) { ReverseAdoc::Converters::Img.new }
|
5
|
-
|
6
|
-
it "converts image with no attributes" do
|
7
|
-
node = node_for("<img src='example.jpg'/>")
|
8
|
-
expect(converter.convert(node)).to include "image::example.jpg[]"
|
9
|
-
end
|
10
|
-
|
11
|
-
it "converts image with full set of attributes" do
|
12
|
-
node = node_for("<img id='A' alt='Alt Text' src='example.jpg' width='30' height='40'/>")
|
13
|
-
expect(converter.convert(node)).to include "[[A]]\nimage::example.jpg[Alt Text,30,40]"
|
14
|
-
end
|
15
|
-
|
16
|
-
it "converts image with alt text, no width and height" do
|
17
|
-
node = node_for("<img id='A' alt='Alt Text' src='example.jpg'/>")
|
18
|
-
expect(converter.convert(node)).to include "[[A]]\nimage::example.jpg[Alt Text]"
|
19
|
-
end
|
20
|
-
|
21
|
-
it "converts image with width and height, no alt text" do
|
22
|
-
node = node_for("<img id='A' src='example.jpg' width='30' height='40'/>")
|
23
|
-
expect(converter.convert(node)).to include "[[A]]\nimage::example.jpg[\"\",30,40]"
|
24
|
-
end
|
25
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe ReverseAdoc::Converters::Li do
|
4
|
-
let(:converter) { ReverseAdoc::Converters::Li.new }
|
5
|
-
|
6
|
-
it "does not fail without a valid parent context" do
|
7
|
-
input = node_for("<li>foo</li>")
|
8
|
-
result = converter.convert(input)
|
9
|
-
expect(result).to eq " foo\n"
|
10
|
-
end
|
11
|
-
end
|
@@ -1,10 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe ReverseAdoc::Converters::P do
|
4
|
-
let(:converter) { ReverseAdoc::Converters::P.new }
|
5
|
-
|
6
|
-
it "converts p with anchor" do
|
7
|
-
node = node_for("<p id='A'>puts foo</p>")
|
8
|
-
expect(converter.convert(node)).to include "\n[[A]]\nputs foo"
|
9
|
-
end
|
10
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe ReverseAdoc::Converters::Pre do
|
4
|
-
let(:converter) { ReverseAdoc::Converters::Pre.new }
|
5
|
-
|
6
|
-
it "converts as literal" do
|
7
|
-
node = node_for("<pre>puts foo</pre>")
|
8
|
-
expect(converter.convert(node)).to include "....\nputs foo\n....\n"
|
9
|
-
end
|
10
|
-
|
11
|
-
it "converts as literal with anchor" do
|
12
|
-
node = node_for("<pre id='A'>puts foo</pre>")
|
13
|
-
expect(converter.convert(node)).to include "[[A]]\n....\nputs foo\n....\n"
|
14
|
-
end
|
15
|
-
|
16
|
-
it "preserves new lines" do
|
17
|
-
node = node_for("<pre>foo\nbar</pre>")
|
18
|
-
expect(converter.convert(node)).to include "....\nfoo\nbar\n....\n"
|
19
|
-
end
|
20
|
-
|
21
|
-
it "preserves xml" do
|
22
|
-
node = node_for("<pre><code>x</code><br/><p>hello</p></pre>")
|
23
|
-
expect(converter.convert(node)).to include "....\nx\n\n\nhello\n\n\n....\n"
|
24
|
-
end
|
25
|
-
|
26
|
-
context "syntax highlighting" do
|
27
|
-
it 'works for "highlight-lang" mechanism' do
|
28
|
-
div = node_for("<div class='highlight highlight-ruby'><pre>puts foo</pre></div>")
|
29
|
-
pre = div.children.first
|
30
|
-
expect(converter.convert(pre)).to include "[source,ruby]\n----\nputs foo\n----\n"
|
31
|
-
end
|
32
|
-
|
33
|
-
it "works for the confluence mechanism" do
|
34
|
-
pre = node_for("<pre class='theme: Confluence; brush: html/xml; gutter: false'>puts foo</pre>")
|
35
|
-
expect(converter.convert(pre)).to include "[source,html/xml]\n----\nputs foo\n----\n"
|
36
|
-
end
|
37
|
-
|
38
|
-
it "works for the confluence mechanism, with anchor" do
|
39
|
-
pre = node_for("<pre id = 'A' class='theme: Confluence; brush: html/xml; gutter: false'>puts foo</pre>")
|
40
|
-
expect(converter.convert(pre)).to include "[[A]]\n[source,html/xml]\n----\nputs foo\n----\n"
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe ReverseAdoc::Converters::Strong do
|
4
|
-
let(:converter) { ReverseAdoc::Converters::Strong.new }
|
5
|
-
|
6
|
-
it "returns an empty string if the node is empty" do
|
7
|
-
input = node_for("<strong></strong>")
|
8
|
-
expect(converter.convert(input)).to eq ""
|
9
|
-
end
|
10
|
-
|
11
|
-
it "returns just the content if the strong tag is nested in another strong" do
|
12
|
-
input = node_for("<strong><strong>foo</strong></strong>")
|
13
|
-
expect(converter.convert(input.children.first,
|
14
|
-
already_strong: true)).to eq "foo"
|
15
|
-
end
|
16
|
-
|
17
|
-
it "moves border whitespaces outside of the delimiters tag" do
|
18
|
-
input = node_for("<strong> \n foo </strong>")
|
19
|
-
expect(converter.convert(input)).to eq " *foo* "
|
20
|
-
end
|
21
|
-
end
|