polytexnic 0.5.0

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.
Files changed (125) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +37 -0
  3. data/.pull_requests/1371777257 +0 -0
  4. data/.pull_requests/1371927975 +0 -0
  5. data/.pull_requests/1372804345 +0 -0
  6. data/.pull_requests/1374784075 +0 -0
  7. data/.pull_requests/1375304853 +0 -0
  8. data/.pull_requests/1375408308 +0 -0
  9. data/.pull_requests/1375409462 +0 -0
  10. data/.pull_requests/1375410668 +0 -0
  11. data/.pull_requests/1375472132 +0 -0
  12. data/.pull_requests/1375485496 +0 -0
  13. data/.pull_requests/1375487548 +0 -0
  14. data/.pull_requests/1375492835 +0 -0
  15. data/.pull_requests/1375497765 +0 -0
  16. data/.pull_requests/1375559547 +0 -0
  17. data/.pull_requests/1375589063 +0 -0
  18. data/.pull_requests/1375841786 +0 -0
  19. data/.pull_requests/1376352634 +0 -0
  20. data/.pull_requests/1376353299 +0 -0
  21. data/.pull_requests/1376449284 +0 -0
  22. data/.pull_requests/1376452696 +0 -0
  23. data/.pull_requests/1376454166 +0 -0
  24. data/.pull_requests/1376532291 +0 -0
  25. data/.pull_requests/1376625487 +0 -0
  26. data/.pull_requests/1376690108 +0 -0
  27. data/.pull_requests/1376699046 +0 -0
  28. data/.pull_requests/1376707642 +0 -0
  29. data/.pull_requests/1377230284 +0 -0
  30. data/.pull_requests/1379118478 +0 -0
  31. data/.pull_requests/1379123150 +0 -0
  32. data/.pull_requests/1380221847 +0 -0
  33. data/.pull_requests/1380589654 +0 -0
  34. data/.pull_requests/1380673142 +0 -0
  35. data/.pull_requests/1380850800 +0 -0
  36. data/.pull_requests/1381001264 +0 -0
  37. data/.pull_requests/1381005204 +0 -0
  38. data/.pull_requests/1381103022 +0 -0
  39. data/.pull_requests/1381252832 +0 -0
  40. data/.pull_requests/1381276624 +0 -0
  41. data/.pull_requests/1381344234 +0 -0
  42. data/.pull_requests/1381385297 +0 -0
  43. data/.pull_requests/1381427498 +0 -0
  44. data/.pull_requests/1381429761 +0 -0
  45. data/.pull_requests/1381873684 +0 -0
  46. data/.pull_requests/1382045490 +0 -0
  47. data/.pull_requests/1382056384 +0 -0
  48. data/.pull_requests/1382405223 +0 -0
  49. data/.pull_requests/1382478400 +0 -0
  50. data/.pull_requests/1382479780 +0 -0
  51. data/.pull_requests/1382485483 +0 -0
  52. data/.pull_requests/1382569911 +0 -0
  53. data/.pull_requests/1382646199 +0 -0
  54. data/.pull_requests/1382649778 +0 -0
  55. data/.pull_requests/1382660987 +0 -0
  56. data/.pull_requests/1382743927 +0 -0
  57. data/.pull_requests/1382840347 +0 -0
  58. data/.pull_requests/1383077676 +0 -0
  59. data/.pull_requests/1383086948 +0 -0
  60. data/.pull_requests/1383161978 +0 -0
  61. data/.pull_requests/1383263695 +0 -0
  62. data/.pull_requests/1383274008 +0 -0
  63. data/.pull_requests/1383327328 +0 -0
  64. data/.rspec +2 -0
  65. data/.ruby-gemset +1 -0
  66. data/.ruby-version +1 -0
  67. data/Gemfile +15 -0
  68. data/Guardfile +15 -0
  69. data/LICENSE.txt +22 -0
  70. data/README.md +21 -0
  71. data/Rakefile +2 -0
  72. data/lib/polytexnic/literal.rb +299 -0
  73. data/lib/polytexnic/postprocessor.rb +28 -0
  74. data/lib/polytexnic/postprocessors/html.rb +1139 -0
  75. data/lib/polytexnic/postprocessors/latex.rb +18 -0
  76. data/lib/polytexnic/postprocessors/polytex.rb +44 -0
  77. data/lib/polytexnic/preprocessor.rb +23 -0
  78. data/lib/polytexnic/preprocessors/html.rb +349 -0
  79. data/lib/polytexnic/preprocessors/latex.rb +43 -0
  80. data/lib/polytexnic/preprocessors/polytex.rb +127 -0
  81. data/lib/polytexnic/utils.rb +176 -0
  82. data/lib/polytexnic/version.rb +3 -0
  83. data/lib/polytexnic.rb +92 -0
  84. data/notes/pandoc.md +41 -0
  85. data/polytexnic.gemspec +28 -0
  86. data/polytexnic_commands.sty +5 -0
  87. data/precompiled_binaries/tralics +0 -0
  88. data/spec/fixtures/code_listing.tex +14 -0
  89. data/spec/fixtures/figures.tex +8 -0
  90. data/spec/fixtures/inline_math.html +4 -0
  91. data/spec/fixtures/inline_math.tex +3 -0
  92. data/spec/fixtures/math_environments.html +50 -0
  93. data/spec/fixtures/math_environments.tex +56 -0
  94. data/spec/fixtures/section_xrefs.tex +9 -0
  95. data/spec/fixtures/sidebar.tex +10 -0
  96. data/spec/fixtures/tables.tex +8 -0
  97. data/spec/fixtures/verbatim_environments.html +11 -0
  98. data/spec/fixtures/verbatim_environments.tex +13 -0
  99. data/spec/integration_spec.rb +34 -0
  100. data/spec/markdown_to_polytex_spec.rb +192 -0
  101. data/spec/resemble_matcher_spec.rb +69 -0
  102. data/spec/spec_helper.rb +38 -0
  103. data/spec/support/resemble_matcher.rb +100 -0
  104. data/spec/to_html/asides_spec.rb +42 -0
  105. data/spec/to_html/chapters_and_sections_spec.rb +268 -0
  106. data/spec/to_html/characters_and_punctuation_spec.rb +138 -0
  107. data/spec/to_html/codelistings_spec.rb +70 -0
  108. data/spec/to_html/core_spec.rb +227 -0
  109. data/spec/to_html/eqref_spec.rb +32 -0
  110. data/spec/to_html/footnote_spec.rb +164 -0
  111. data/spec/to_html/graphics_and_figures_spec.rb +358 -0
  112. data/spec/to_html/lists_spec.rb +103 -0
  113. data/spec/to_html/literal_environments/code_spec.rb +141 -0
  114. data/spec/to_html/literal_environments/math_spec.rb +255 -0
  115. data/spec/to_html/literal_environments/unicode_spec.rb +12 -0
  116. data/spec/to_html/literal_environments/verbatim_spec.rb +168 -0
  117. data/spec/to_html/quotations_and_verse_spec.rb +86 -0
  118. data/spec/to_html/table_of_contents_spec.rb +93 -0
  119. data/spec/to_html/table_spec.rb +269 -0
  120. data/spec/to_html/text_formatting_spec.rb +50 -0
  121. data/spec/to_latex_spec.rb +197 -0
  122. data/tasks/bin/ruby_tests +41 -0
  123. data/tasks/run_tests_with_both_rubies.rake +5 -0
  124. data/tmp/.gitkeep +0 -0
  125. metadata +286 -0
@@ -0,0 +1,141 @@
1
+ # encoding=utf-8
2
+ require 'spec_helper'
3
+
4
+ describe Polytexnic::Pipeline do
5
+ before(:all) do
6
+ FileUtils.rm('.highlight_cache') if File.exist?('.highlight_cache')
7
+ end
8
+ subject(:processed_text) { Polytexnic::Pipeline.new(polytex).to_html }
9
+
10
+ describe "code blocks" do
11
+
12
+ context "without syntax highlighting" do
13
+ let(:polytex) do <<-'EOS'
14
+ \begin{code}
15
+ def foo
16
+ "bar"
17
+ end
18
+ \end{code}
19
+ EOS
20
+ end
21
+
22
+ it { should resemble 'def foo' }
23
+ it { should resemble '<div class="code">' }
24
+ it { should_not resemble '\begin{code}' }
25
+ end
26
+
27
+ context "with syntax highlighting" do
28
+ let(:polytex) do <<-'EOS'
29
+ %= lang:ruby
30
+ \begin{code}
31
+ def foo
32
+ "bar"
33
+ end
34
+ \end{code}
35
+ EOS
36
+ end
37
+
38
+ it do
39
+ should resemble <<-'EOS'
40
+ <div class="code">
41
+ <div class="highlight">
42
+ <pre>
43
+ <span class="k">def</span> <span class="nf">foo</span>
44
+ <span class="s2">"bar"</span>
45
+ <span class="k">end</span>
46
+ </pre>
47
+ </div>
48
+ </div>
49
+ EOS
50
+ end
51
+
52
+ it { should resemble '<div class="code">' }
53
+ it "should not have repeated code divs" do
54
+ expect(processed_text.scan(/<div class="code">/).length).to eq 1
55
+ end
56
+ it { should resemble '<div class="highlight">' }
57
+ it { should resemble '<pre>' }
58
+ end
59
+ end
60
+
61
+ context "with a space after 'lang'" do
62
+ let(:polytex) do <<-'EOS'
63
+ %= lang: ruby
64
+ \begin{code}
65
+ def foo
66
+ "bar"
67
+ end
68
+ \end{code}
69
+ EOS
70
+ end
71
+
72
+ it do
73
+ should resemble <<-'EOS'
74
+ <div class="code">
75
+ <div class="highlight">
76
+ <pre>
77
+ <span class="k">def</span> <span class="nf">foo</span>
78
+ <span class="s2">"bar"</span>
79
+ <span class="k">end</span>
80
+ </pre>
81
+ </div>
82
+ </div>
83
+ EOS
84
+ end
85
+ end
86
+
87
+ describe "code inclusion" do
88
+ context "for an existing file" do
89
+
90
+ context "with no extension" do
91
+ let(:polytex) do <<-'EOS'
92
+ %= <<(Rakefile)
93
+ EOS
94
+ end
95
+ let(:output) do <<-'EOS'
96
+ <span class="n">require</span>
97
+ EOS
98
+ end
99
+ it { should resemble output }
100
+ end
101
+
102
+ context "with an extension" do
103
+ let(:polytex) do <<-'EOS'
104
+ %= <<(spec/to_html/literal_environments/code_spec.rb)
105
+ EOS
106
+ end
107
+ let(:output) do <<-'EOS'
108
+ <div class="code">
109
+ <div class="highlight">
110
+ <pre><span class="c1"># encoding=utf-8</span>
111
+ EOS
112
+ end
113
+ it { should resemble output }
114
+ it { should_not include '<p></p>' }
115
+ end
116
+
117
+ context "with a custom language override" do
118
+ let(:polytex) do <<-'EOS'
119
+ %= << (polytexnic_commands.sty, lang: tex)
120
+ EOS
121
+ end
122
+ let(:output) do <<-'EOS'
123
+ <span class="c">% Add some custom commands needed by PolyTeXnic.</span>
124
+ EOS
125
+ end
126
+ it { should resemble output }
127
+ it { should_not include '<p></p>' }
128
+ end
129
+ end
130
+
131
+
132
+
133
+ context "for a nonexistent file" do
134
+ let(:polytex) do <<-'EOS'
135
+ %= <<(foobar.rb)
136
+ EOS
137
+ end
138
+ it { should include "ERROR: File 'foobar.rb' does not exist" }
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,255 @@
1
+ # encoding=utf-8
2
+ require 'spec_helper'
3
+
4
+ describe Polytexnic::Pipeline do
5
+ subject(:processed_text) { Polytexnic::Pipeline.new(polytex).to_html }
6
+
7
+ describe "display and inline math" do
8
+ let(:math) do <<-'EOS'
9
+ \begin{bmatrix}
10
+ 1 & \cdots & 0 \\
11
+ \vdots & \ddots & \vdots \\
12
+ 2 & \cdots & 0
13
+ \end{bmatrix}
14
+ EOS
15
+ end
16
+
17
+ let(:result) do <<-'EOS'
18
+ \begin{bmatrix}
19
+ 1 &amp; \cdots &amp; 0 \\
20
+ \vdots &amp; \ddots &amp; \vdots \\
21
+ 2 &amp; \cdots &amp; 0
22
+ \end{bmatrix}
23
+ EOS
24
+ end
25
+
26
+ context "TeX displaystyle" do
27
+ let(:equation) { "$$ #{math} $$"}
28
+ let(:polytex) { equation }
29
+ let(:contents) { "\\[ #{result} \\]"}
30
+
31
+ it { should resemble contents }
32
+ end
33
+
34
+ context "LaTeX displaystyle" do
35
+ let(:equation) { "\\[ #{math} \\]"}
36
+ let(:polytex) { equation }
37
+ let(:contents) { "\\[ #{result} \\]"}
38
+
39
+ it { should resemble contents }
40
+
41
+ context "with surrounding text" do
42
+ let(:polytex) { "lorem\n\\[ #{math} \\]\nipsum" }
43
+ it { should resemble '<p class="noindent">' }
44
+ end
45
+ end
46
+
47
+ context "TeX inline" do
48
+ let(:equation) { "$#{math}$"}
49
+ let(:polytex) { equation }
50
+ let(:contents) { "\\( #{result} \\)"}
51
+
52
+ it { should resemble contents }
53
+ end
54
+
55
+ context "TeX inline with a dollar sign" do
56
+ let(:equation) { "$#{math} \\mbox{\\$2 bill}$"}
57
+ let(:polytex) { equation }
58
+ let(:contents) { "\\( #{result} \\mbox{\\$2 bill} \\)"}
59
+
60
+ it { should resemble contents }
61
+ end
62
+
63
+ context "LaTeX inline" do
64
+ let(:equation) { "\\( #{math} \\)"}
65
+ let(:polytex) { equation }
66
+ let(:contents) { "\\( #{result} \\)"}
67
+
68
+ it { should resemble contents }
69
+ end
70
+
71
+ context "with a space before a dollar sign" do
72
+ let(:polytex) { "foo $x$ bar" }
73
+ let(:contents) { "<p>foo <span class=\"inline_math\">\\( x \\)</span> bar" }
74
+ it { should include contents }
75
+ end
76
+ end
77
+
78
+ describe "multiple occurrences of inline math on one line" do
79
+ let(:polytex) { '$\Omega > 0$ and \( x^2 - 2 \equiv 0 \) should work.' }
80
+
81
+ it { should resemble '\Omega' }
82
+ it { should resemble '\equiv' }
83
+ it { should resemble '<span class="inline_math">' }
84
+ it { should resemble '\(' }
85
+ end
86
+
87
+ describe "equation environments" do
88
+
89
+ shared_examples "an equation environment" do
90
+ it { should resemble contents }
91
+ it { should resemble '<div' }
92
+ it { should resemble 'class="equation"' }
93
+ end
94
+
95
+ context "alone" do
96
+ let(:equation) do <<-'EOS'
97
+ \begin{equation}
98
+ \int_\Omega d\omega = \int_{\partial\Omega} \omega
99
+ \end{equation}
100
+ EOS
101
+ end
102
+ let(:polytex) { equation }
103
+ let(:contents) { equation }
104
+
105
+ it_behaves_like "an equation environment"
106
+ end
107
+
108
+ context "with a label and cross-reference" do
109
+ let(:equation) do <<-'EOS'
110
+ \chapter{Foo}
111
+ \begin{equation}
112
+ \label{stokes_theorem}
113
+ \int_\Omega d\omega = \int_{\partial\Omega} \omega
114
+ \end{equation}
115
+
116
+ Eq.~\eqref{stokes_theorem} or \eqref{stokes_theorem}
117
+ EOS
118
+ end
119
+ let(:polytex) { equation }
120
+ let(:contents) do <<-'EOS'
121
+ <div id="cid1" data-tralics-id="cid1" class="chapter" data-number="1"><h1><a href="#cid1" class="heading"><span class="number">Chapter 1 </span>Foo</a></h1>
122
+ <div id="stokes_theorem" data-tralics-id="uid1" data-number="1.1" class="equation">
123
+ \begin{equation}
124
+ \label{stokes_theorem}
125
+ \int_\Omega d\omega = \int_{\partial\Omega} \omega
126
+ \end{equation}
127
+ </div>
128
+ <p class="noindent"><a href="#stokes_theorem" class="hyperref">Eq. (<span class="ref">1.1</span>)</a>
129
+ or
130
+ <a href="#stokes_theorem" class="hyperref">(<span class="ref">1.1</span>)</a>
131
+ </p>
132
+ EOS
133
+ end
134
+
135
+ it_behaves_like "an equation environment"
136
+ end
137
+
138
+ context "surrounded by text" do
139
+ let(:equation) do <<-'EOS'
140
+ \begin{equation}
141
+ \int_\Omega d\omega = \int_{\partial\Omega} \omega
142
+ \end{equation}
143
+ EOS
144
+ end
145
+ let(:polytex) { "lorem\n" + equation + "\nipsum" }
146
+ let(:contents) { equation }
147
+
148
+ it_behaves_like "an equation environment"
149
+ it { should resemble '<p>lorem' }
150
+ it { should resemble '<p class="noindent">ipsum' }
151
+ end
152
+
153
+ describe "align" do
154
+ let(:equation) do <<-'EOS'
155
+ \begin{align}
156
+ x^2 + y^2 & = 1 \\
157
+ y & = \sqrt{1 - x^2}.
158
+ \end{align}
159
+ EOS
160
+ end
161
+ let(:polytex) { equation }
162
+ let(:contents) do <<-'EOS'
163
+ \begin{align}
164
+ x^2 + y^2 &amp; = 1 \\
165
+ y &amp; = \sqrt{1 - x^2}.
166
+ \end{align}
167
+ EOS
168
+ end
169
+
170
+ it_behaves_like "an equation environment"
171
+ end
172
+
173
+ describe "align*" do
174
+ let(:equation) do <<-'EOS'
175
+ \begin{align*}
176
+ x^2 + y^2 & = 1 \\
177
+ y & = \sqrt{1 - x^2}.
178
+ \end{align*}
179
+ EOS
180
+ end
181
+ let(:polytex) { equation }
182
+ let(:contents) do <<-'EOS'
183
+ \begin{align*}
184
+ x^2 + y^2 &amp; = 1 \\
185
+ y &amp; = \sqrt{1 - x^2}.
186
+ \end{align*}
187
+ EOS
188
+ end
189
+
190
+ it_behaves_like "an equation environment"
191
+ end
192
+
193
+ describe "aligned" do
194
+ let(:equation) do <<-'EOS'
195
+ \begin{equation}
196
+ \begin{aligned}
197
+ \nabla \times \vec{\mathbf{B}} -\, \frac1c\,
198
+ \frac{\partial\vec{\mathbf{E}}}{\partial t} & =
199
+ \frac{4\pi}{c}\vec{\mathbf{j}} \\ \nabla \cdot \vec{\mathbf{E}} & =
200
+ 4 \pi \rho \\
201
+ \nabla \times \vec{\mathbf{E}}\, +\, \frac1c\,
202
+ \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\
203
+ \nabla \cdot \vec{\mathbf{B}} & = 0
204
+ \end{aligned}
205
+ \end{equation}
206
+ EOS
207
+ end
208
+ let(:polytex) { equation }
209
+ let(:contents) do <<-'EOS'
210
+ \begin{equation}
211
+ \begin{aligned}
212
+ \nabla \times \vec{\mathbf{B}} -\, \frac1c\,
213
+ \frac{\partial\vec{\mathbf{E}}}{\partial t} &amp; =
214
+ \frac{4\pi}{c}\vec{\mathbf{j}} \\ \nabla \cdot \vec{\mathbf{E}} &amp;
215
+ = 4 \pi \rho \\
216
+ \nabla \times \vec{\mathbf{E}}\, +\, \frac1c\,
217
+ \frac{\partial\vec{\mathbf{B}}}{\partial t} &amp; = \vec{\mathbf{0}} \\
218
+ \nabla \cdot \vec{\mathbf{B}} &amp; = 0
219
+ \end{aligned}
220
+ \end{equation}
221
+ EOS
222
+ end
223
+
224
+ it_behaves_like "an equation environment"
225
+ end
226
+
227
+ describe "equation*" do
228
+ let(:equation) do <<-'EOS'
229
+ \begin{equation*}
230
+ \left.\begin{aligned}
231
+ dE &= \rho \\
232
+ d*B &= J + \dot{E}
233
+ \end{aligned}
234
+ \right\}
235
+ \qquad \text{Maxwell}
236
+ \end{equation*}
237
+ EOS
238
+ end
239
+ let(:polytex) { equation }
240
+ let(:contents) do <<-'EOS'
241
+ \begin{equation*}
242
+ \left.\begin{aligned}
243
+ dE &amp;= \rho \\
244
+ d*B &amp;= J + \dot{E}
245
+ \end{aligned}
246
+ \right\}
247
+ \qquad \text{Maxwell}
248
+ \end{equation*}
249
+ EOS
250
+ end
251
+
252
+ it_behaves_like "an equation environment"
253
+ end
254
+ end
255
+ end
@@ -0,0 +1,12 @@
1
+ # encoding=utf-8
2
+ require 'spec_helper'
3
+
4
+ describe Polytexnic::Pipeline do
5
+ subject(:processed_text) { Polytexnic::Pipeline.new(polytex).to_html }
6
+
7
+ describe "non-ASCII Unicode" do
8
+ let(:polytex) { 'Алексей Разуваев' }
9
+ it { should include %(<span class="unicode">Алексей</span>) }
10
+ it { should include %(<span class="unicode">Разуваев</span>) }
11
+ end
12
+ end
@@ -0,0 +1,168 @@
1
+ # encoding=utf-8
2
+ require 'spec_helper'
3
+
4
+ describe Polytexnic::Pipeline do
5
+ subject(:processed_text) { Polytexnic::Pipeline.new(polytex).to_html }
6
+
7
+ describe "\\verb environments" do
8
+ let(:polytex) { '\verb+\begin{center}+ \verb-$foo-' }
9
+ let(:output) do
10
+ '<span class="inline_verbatim">\begin{center}</span>' +
11
+ '<span class="inline_verbatim">$foo</span>'
12
+ end
13
+ it { should resemble output }
14
+ end
15
+
16
+ describe "verbatim environments" do
17
+
18
+ context "alone" do
19
+ let(:polytex) do <<-'EOS'
20
+ \begin{verbatim}
21
+ \label{foo:bar}
22
+ \emph{foo bar} & \\
23
+ \end{verbatim}
24
+ EOS
25
+ end
26
+
27
+ let(:output) { '\emph{foo bar} &amp; \\\\' }
28
+
29
+ it { should resemble output }
30
+ it { should resemble '<pre class="verbatim">' }
31
+ it { should_not resemble '\begin{verbatim}' }
32
+ end
33
+
34
+ context "with nesting" do
35
+ let(:polytex) do <<-'EOS'
36
+ \begin{verbatim}
37
+ \begin{verbatim}
38
+ \emph{foo bar}
39
+ \end{verbatim}
40
+ \end{verbatim}
41
+ lorem ipsum
42
+ EOS
43
+ end
44
+
45
+ let(:output) do <<-'EOS'
46
+ \begin{verbatim}
47
+ \emph{foo bar}
48
+ \end{verbatim}
49
+ EOS
50
+ end
51
+
52
+ it { should resemble output }
53
+ it "should break out of the loop if verbatim count is zero" do
54
+ expect(processed_text).to resemble 'lorem ipsum'
55
+ end
56
+ end
57
+
58
+ context 'with missing \end{verbatim}' do
59
+ let(:polytex) do <<-'EOS'
60
+ \begin{verbatim}
61
+ \emph{foo bar}
62
+ EOS
63
+ end
64
+
65
+ it "should raise an error" do
66
+ expect { processed_text }.to raise_error
67
+ end
68
+ end
69
+
70
+ context "containing a code environment" do
71
+ let(:polytex) do <<-'EOS'
72
+ \begin{verbatim}
73
+ \begin{code}
74
+ \emph{foo bar}
75
+ \end{code}
76
+ \end{verbatim}
77
+ lorem ipsum
78
+ EOS
79
+ end
80
+
81
+ let(:output) do <<-'EOS'
82
+ \begin{code}
83
+ \emph{foo bar}
84
+ \end{code}
85
+ EOS
86
+ end
87
+
88
+ it { should resemble output }
89
+ end
90
+
91
+ context "containing a highlighted code environment" do
92
+ let(:polytex) do <<-'EOS'
93
+ \begin{verbatim}
94
+ %= lang:ruby
95
+ \begin{code}
96
+ foo ||= bar
97
+ \end{code}
98
+ \end{verbatim}
99
+ lorem ipsum
100
+ EOS
101
+ end
102
+
103
+ let(:output) do <<-'EOS'
104
+ %= lang:ruby
105
+ \begin{code}
106
+ foo ||= bar
107
+ \end{code}
108
+ EOS
109
+ end
110
+
111
+ it { should resemble output }
112
+ end
113
+
114
+ context "containing a code inclusion" do
115
+ let(:polytex) do <<-'EOS'
116
+ \begin{verbatim}
117
+ %= <</path/to/file.rb
118
+ \end{verbatim}
119
+ EOS
120
+ end
121
+
122
+ let(:output) do <<-'EOS'
123
+ %= &lt;&lt;/path/to/file.rb
124
+ EOS
125
+ end
126
+
127
+ it { should resemble output }
128
+ end
129
+
130
+ context "preceded by a highlighted code environment" do
131
+ let(:polytex) do <<-'EOS'
132
+
133
+ %= lang:scheme
134
+ \begin{code}
135
+ (define tau 6.283185)
136
+ \end{code}
137
+
138
+ \begin{verbatim}
139
+ <start-quote/>
140
+ \end{verbatim}
141
+ EOS
142
+ end
143
+
144
+ let(:output) do <<-'EOS'
145
+ &lt;start-quote/&gt;
146
+ EOS
147
+ end
148
+
149
+ it { should resemble output }
150
+ end
151
+ end
152
+
153
+ describe "Verbatim environments" do
154
+ let(:polytex) do <<-'EOS'
155
+ \begin{Verbatim}
156
+ \emph{foo bar}
157
+ \end{Verbatim}
158
+ EOS
159
+ end
160
+
161
+ let(:output) { '\emph{foo bar}' }
162
+
163
+ it { should resemble output }
164
+ it { should_not resemble '\begin{Verbatim}' }
165
+ it { should_not resemble 'rend="tt"' }
166
+ it { should resemble '<pre class="verbatim">' }
167
+ end
168
+ end
@@ -0,0 +1,86 @@
1
+ # encoding=utf-8
2
+ require 'spec_helper'
3
+
4
+ describe 'Polytexnic::Pipeline#to_html' do
5
+
6
+ subject(:processed_text) { Polytexnic::Pipeline.new(polytex).to_html }
7
+
8
+ describe "quotations and verse" do
9
+ describe '\begin{quote}...\end{quote}' do
10
+ let(:polytex) { '\quote{foo}' }
11
+ it { should resemble "<blockquote class=\"quote\">foo\n</blockquote>" }
12
+ end
13
+
14
+ describe "quote environment" do
15
+
16
+ context "alone" do
17
+ let(:polytex) do <<-'EOS'
18
+ \begin{quote}
19
+ lorem ipsum
20
+
21
+ dolor sit amet
22
+ \end{quote}
23
+ EOS
24
+ end
25
+
26
+ it do
27
+ should resemble <<-'EOS'
28
+ <blockquote class="quotation">
29
+ <p>lorem ipsum</p>
30
+ <p>dolor sit amet</p>
31
+ </blockquote>
32
+ EOS
33
+ end
34
+ end
35
+
36
+ context "nested" do
37
+ let(:polytex) do <<-'EOS'
38
+ \begin{quote}
39
+ lorem ipsum
40
+
41
+ \begin{quote}
42
+ foo bar
43
+ \end{quote}
44
+
45
+ dolor sit amet
46
+ \end{quote}
47
+ EOS
48
+ end
49
+ it do
50
+ should resemble <<-'EOS'
51
+ <blockquote class="quotation">
52
+ <p>lorem ipsum</p>
53
+ <blockquote class="quotation">
54
+ <p>foo bar</p>
55
+ </blockquote>
56
+ <p>dolor sit amet</p>
57
+ </blockquote>
58
+ EOS
59
+ end
60
+ end
61
+ end
62
+
63
+ describe '\verse' do
64
+ let(:polytex) { '\verse{foo}' }
65
+ it { should resemble "<blockquote class=\"verse\">foo\n</blockquote>" }
66
+ end
67
+
68
+ describe "verse environment" do
69
+ let(:polytex) do <<-'EOS'
70
+ \begin{verse}
71
+ lorem ipsum\\
72
+ dolor sit amet
73
+ \end{verse}
74
+ EOS
75
+ end
76
+ it do
77
+ should resemble <<-'EOS'
78
+ <blockquote class="verse">
79
+ <p>lorem ipsum<span class="break"></span>
80
+ dolor sit amet</p>
81
+ </blockquote>
82
+ EOS
83
+ end
84
+ end
85
+ end
86
+ end