polytexnic 1.0.beta1 → 1.0.beta2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/polytexnic/preprocessors/html.rb +1 -0
- data/lib/polytexnic/preprocessors/latex.rb +5 -1
- data/lib/polytexnic/preprocessors/polytex.rb +3 -9
- data/lib/polytexnic/utils.rb +12 -0
- data/lib/polytexnic/version.rb +1 -1
- data/spec/markdown_to_polytex_spec.rb +26 -3
- data/spec/to_html/input_spec.rb +51 -0
- data/spec/to_latex_spec.rb +44 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 313a786bc9e773eff07b9930cf84c7afa76bd4dc
|
4
|
+
data.tar.gz: 0544d7a35b333d101098aa1dce3e9fed8e164d2f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 62213c15e21b7058a80b825fe4c52e11dd0b367ee3bbf325621e50f5ed02715027882c1ab6723af1f63dff15394dbaa242de889cf0ee1dd5685035c70d54f090
|
7
|
+
data.tar.gz: 6bc8b4967092469ec5dd83799001db23afe8b70fa03d2e676e89a618ff386c40103d2c2693c732f70f5fb00b66e25f836704b921640d5910b866ebf3f46509aa
|
@@ -48,6 +48,7 @@ module Polytexnic
|
|
48
48
|
doc = cache_literal(add_commands(polytex))
|
49
49
|
inline_verbatim(doc)
|
50
50
|
cache_hrefs(doc)
|
51
|
+
expand_input!(doc, Proc.new { |source| cache_literal(source) }, 'tex')
|
51
52
|
remove_comments(doc)
|
52
53
|
double_backslashes(cache_display_inline_math(doc))
|
53
54
|
end
|
@@ -12,7 +12,11 @@ module Polytexnic
|
|
12
12
|
# Literal environments are hashed and passed through the pipeline
|
13
13
|
# so that we can process things like refs and hyperrefs using gsubs.
|
14
14
|
def clean_latex_document
|
15
|
-
cache_literal(@polytex, :latex)
|
15
|
+
cache_literal(@polytex, :latex).tap do |doc|
|
16
|
+
expand_input!(doc,
|
17
|
+
Proc.new { |source| cache_literal(source, :latex) },
|
18
|
+
'tex')
|
19
|
+
end
|
16
20
|
end
|
17
21
|
|
18
22
|
# Convert GIFs to PNGs.
|
@@ -86,10 +86,12 @@ module Polytexnic
|
|
86
86
|
def to_polytex
|
87
87
|
math_cache = {}
|
88
88
|
cleaned_markdown = cache_code_environments(@source)
|
89
|
+
expand_input!(cleaned_markdown,
|
90
|
+
Proc.new { |source| cache_code_environments(source) })
|
91
|
+
|
89
92
|
puts cleaned_markdown if debug?
|
90
93
|
cleaned_markdown.tap do |markdown|
|
91
94
|
convert_code_inclusion(markdown)
|
92
|
-
expand_input(markdown)
|
93
95
|
cache_latex_literal(markdown)
|
94
96
|
cache_raw_latex(markdown)
|
95
97
|
cache_image_locations(markdown)
|
@@ -188,14 +190,6 @@ module Polytexnic
|
|
188
190
|
end
|
189
191
|
end
|
190
192
|
|
191
|
-
# Expands '\input' command by processing & inserting the target source.
|
192
|
-
def expand_input(text)
|
193
|
-
text.gsub!(/^[ \t]*\\input\{(.*?)\}[ \t]*$/) do
|
194
|
-
source = File.read("#{$1}.md")
|
195
|
-
Polytexnic::Pipeline.new(source, source: :markdown).polytex
|
196
|
-
end
|
197
|
-
end
|
198
|
-
|
199
193
|
# Restores raw code from the cache.
|
200
194
|
def restore_hashed_content(text)
|
201
195
|
$cache.each do |key, value|
|
data/lib/polytexnic/utils.rb
CHANGED
@@ -31,6 +31,18 @@ module Polytexnic
|
|
31
31
|
@tralics ||= executable
|
32
32
|
end
|
33
33
|
|
34
|
+
|
35
|
+
# Expands '\input' command by processing & inserting the target source.
|
36
|
+
def expand_input!(text, code_function, ext = 'md')
|
37
|
+
text.gsub!(/^[ \t]*\\input\{(.*?)\}[ \t]*$/) do
|
38
|
+
included_text = File.read("#{$1}.#{ext}")
|
39
|
+
code_function.call(included_text).tap do |clean_text|
|
40
|
+
# Recursively substitute '\input' in included text.
|
41
|
+
expand_input!(clean_text, code_function, ext)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
34
46
|
# Returns true for OS X Mountain Lion (10.8) and later.
|
35
47
|
def os_x_newer?
|
36
48
|
os_x? && !os_x_older?
|
data/lib/polytexnic/version.rb
CHANGED
@@ -531,10 +531,33 @@ def hello; puts 'hello'; end
|
|
531
531
|
|
532
532
|
describe '\input command' do
|
533
533
|
let(:external_file) { 'foo.md' }
|
534
|
-
|
535
|
-
|
534
|
+
let(:nested_external_file) { 'bar.md' }
|
535
|
+
let(:input) do <<-'EOS'
|
536
|
+
Lorem ipsum
|
537
|
+
```ruby
|
538
|
+
def foo; 'foo'; end
|
539
|
+
```
|
540
|
+
Lorem *ipsum* dolor sit amet
|
541
|
+
|
542
|
+
\input{bar}
|
543
|
+
EOS
|
544
|
+
end
|
545
|
+
let(:nested_input) do <<-'EOS'
|
546
|
+
Lorem ipsum
|
547
|
+
```python
|
548
|
+
def bar(): return "bar"
|
549
|
+
```
|
550
|
+
EOS
|
551
|
+
end
|
552
|
+
before do
|
553
|
+
File.write(external_file, input)
|
554
|
+
File.write(nested_external_file, nested_input)
|
555
|
+
end
|
556
|
+
after do
|
557
|
+
File.unlink(external_file)
|
558
|
+
File.unlink(nested_external_file)
|
559
|
+
end
|
536
560
|
|
537
|
-
let(:input) { 'lorem *ipsum* dolor sit amet' }
|
538
561
|
let(:output) do
|
539
562
|
Polytexnic::Pipeline.new(input, source: :markdown).polytex
|
540
563
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# encoding=utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe 'Polytexnic::Pipeline#to_html' do
|
5
|
+
|
6
|
+
let(:pipeline) { Polytexnic::Pipeline.new(polytex) }
|
7
|
+
subject(:processed_text) { pipeline.to_html }
|
8
|
+
|
9
|
+
describe '\input command' do
|
10
|
+
let(:external_file) { 'foo.tex' }
|
11
|
+
let(:nested_external_file) { 'bar.tex' }
|
12
|
+
let(:input) do <<-'EOS'
|
13
|
+
Lorem ipsum
|
14
|
+
%= lang:ruby
|
15
|
+
\begin{code}
|
16
|
+
def foo; 'foo'; end
|
17
|
+
\end{code}
|
18
|
+
Lorem \emph{ipsum} dolor sit amet
|
19
|
+
|
20
|
+
\input{bar}
|
21
|
+
EOS
|
22
|
+
end
|
23
|
+
let(:nested_input) do <<-'EOS'
|
24
|
+
Lorem ipsum
|
25
|
+
%= lang:python
|
26
|
+
\begin{code}
|
27
|
+
def bar(): return "bar"
|
28
|
+
\end{code}
|
29
|
+
EOS
|
30
|
+
end
|
31
|
+
before do
|
32
|
+
File.write(external_file, input)
|
33
|
+
File.write(nested_external_file, nested_input)
|
34
|
+
end
|
35
|
+
after do
|
36
|
+
File.unlink(external_file)
|
37
|
+
File.unlink(nested_external_file)
|
38
|
+
end
|
39
|
+
|
40
|
+
let(:polytex) { "\\chapter{Foo}\n\n \\input{foo} " }
|
41
|
+
let(:foo_html) do
|
42
|
+
'<div class="code"><div class="highlight"><pre><span class="k">def</span> <span class="nf">foo</span>'
|
43
|
+
end
|
44
|
+
let(:bar_html) do
|
45
|
+
'<div class="code"><div class="highlight"><pre><span class="k">def</span> <span class="nf">bar</span><span class="p">():'
|
46
|
+
end
|
47
|
+
|
48
|
+
it { should include foo_html }
|
49
|
+
it { should include bar_html }
|
50
|
+
end
|
51
|
+
end
|
data/spec/to_latex_spec.rb
CHANGED
@@ -217,5 +217,49 @@ end
|
|
217
217
|
it { should include '\image{bar.png}' }
|
218
218
|
it { should include '\imagebox{baz.png}' }
|
219
219
|
end
|
220
|
+
|
221
|
+
describe '\input command' do
|
222
|
+
let(:external_file) { 'foo.tex' }
|
223
|
+
let(:nested_external_file) { 'bar.tex' }
|
224
|
+
let(:input) do <<-'EOS'
|
225
|
+
Lorem ipsum
|
226
|
+
%= lang:ruby
|
227
|
+
\begin{code}
|
228
|
+
def foo; 'foo'; end
|
229
|
+
\end{code}
|
230
|
+
Lorem \emph{ipsum} dolor sit amet
|
231
|
+
|
232
|
+
\input{bar}
|
233
|
+
EOS
|
234
|
+
end
|
235
|
+
let(:nested_input) do <<-'EOS'
|
236
|
+
Lorem ipsum
|
237
|
+
%= lang:python
|
238
|
+
\begin{code}
|
239
|
+
def bar(): return "bar"
|
240
|
+
\end{code}
|
241
|
+
EOS
|
242
|
+
end
|
243
|
+
before do
|
244
|
+
File.write(external_file, input)
|
245
|
+
File.write(nested_external_file, nested_input)
|
246
|
+
end
|
247
|
+
after do
|
248
|
+
File.unlink(external_file)
|
249
|
+
File.unlink(nested_external_file)
|
250
|
+
end
|
251
|
+
|
252
|
+
let(:polytex) { "\\chapter{Foo}\n\n \\input{foo} " }
|
253
|
+
let(:foo_latex) do
|
254
|
+
'\PY{k}{def} \PY{n+nf}{foo}\PY{p}{;}'
|
255
|
+
end
|
256
|
+
let(:bar_latex) do
|
257
|
+
'\PY{k}{def} \PY{n+nf}{bar}\PY{p}{(}\PY{p}{)}\PY{p}{:}'
|
258
|
+
end
|
259
|
+
|
260
|
+
it { should include foo_latex }
|
261
|
+
it { should include bar_latex }
|
262
|
+
it { should_not include 'xmlelement' }
|
263
|
+
end
|
220
264
|
end
|
221
265
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: polytexnic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.beta2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Hartl
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-07-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -256,6 +256,7 @@ files:
|
|
256
256
|
- spec/to_html/eqref_spec.rb
|
257
257
|
- spec/to_html/footnote_spec.rb
|
258
258
|
- spec/to_html/graphics_and_figures_spec.rb
|
259
|
+
- spec/to_html/input_spec.rb
|
259
260
|
- spec/to_html/lists_spec.rb
|
260
261
|
- spec/to_html/literal_environments/code_spec.rb
|
261
262
|
- spec/to_html/literal_environments/math_spec.rb
|
@@ -318,6 +319,7 @@ test_files:
|
|
318
319
|
- spec/to_html/eqref_spec.rb
|
319
320
|
- spec/to_html/footnote_spec.rb
|
320
321
|
- spec/to_html/graphics_and_figures_spec.rb
|
322
|
+
- spec/to_html/input_spec.rb
|
321
323
|
- spec/to_html/lists_spec.rb
|
322
324
|
- spec/to_html/literal_environments/code_spec.rb
|
323
325
|
- spec/to_html/literal_environments/math_spec.rb
|