polytexnic 0.7.6 → 0.7.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7ba6efd240014302b4f6f6f9afbf261d4b79f313
4
- data.tar.gz: e55cd520a1d7efc0cdfd3fdaf121004f1678f0e5
3
+ metadata.gz: a292613f26b5df5bb474ef756294b4ff1a9b6069
4
+ data.tar.gz: f3925c8503988094dbc563cad18bc476a660b75e
5
5
  SHA512:
6
- metadata.gz: 9e4dd24c85820df23be2dc3b974a06686e069cfb7294df1d5b4a11ac93126dd06a727a04160b1c7a5ebe3a9fe7ab63d9273a9c6eb185c66d3e771331360ad4f8
7
- data.tar.gz: 2cbe3f2f7d571e8f0cb494b07ff7de5f2c36a2626a45790130085144f274587d6529647bcbb0367834e6740ed0adcf7730116ef29284e80e56e1752cbe91ccf2
6
+ metadata.gz: c3659cd17693bbd70c6a93b2aad80a27db49d3b580ca06dd98601b3f5878484bc800909ebee5e2f016e0d3ffb5a7880eedc139760bcf370027db5ef01e981c04
7
+ data.tar.gz: 6e8c25794bff35cb1874eedf6982bc25646d77a02d1519d07de05e4e1646d724de0bb3de59b497575313a6ca28229d7a6724934bbefa57d5574279d75086e91d
File without changes
@@ -681,8 +681,10 @@ module Polytexnic
681
681
  if title_element
682
682
  type = %w{title subtitle}.include?(field) ? 'h1' : 'h2'
683
683
  el = Nokogiri::XML::Node.new(type, doc)
684
- raw = Polytexnic::Pipeline.new(title_element).to_html
685
- content = Nokogiri::HTML.fragment(raw).at_css('p')
684
+ pipe = Polytexnic::Pipeline.new(title_element,
685
+ literal_cache: literal_cache)
686
+ raw_html = pipe.to_html
687
+ content = Nokogiri::HTML.fragment(raw_html).at_css('p')
686
688
  unless (content.nil? && field == 'date')
687
689
  el.inner_html = content.inner_html.strip
688
690
  el['class'] = field
@@ -753,7 +755,8 @@ module Polytexnic
753
755
  if (head = node.css('h1 a, h2 a, h3 a').first)
754
756
  el = doc.create_element 'span'
755
757
  number = node['data-number']
756
- prefix = (@cha.nil? || number.match(/\./)) ? '' : 'Chapter '
758
+ is_section = number.match(/\./)
759
+ prefix = (@cha.nil? || is_section) ? '' : "#{chaptername} "
757
760
  el.content = prefix + node['data-number'] + ' '
758
761
  el['class'] = 'number'
759
762
  chapter_name = head.children.first
@@ -791,6 +794,15 @@ module Polytexnic
791
794
  end
792
795
  end
793
796
 
797
+ # Returns the name to use for chapters.
798
+ # The default is 'Chapter', of course, but this can be overriden
799
+ # using '\renewcommand', especially in books other than Engilsh.
800
+ def chaptername
801
+ name_regex = /\\renewcommand\{\\chaptername\}\{(.*?)\}/
802
+ name = custom_commands.scan(name_regex).flatten.last
803
+ name || 'Chapter'
804
+ end
805
+
794
806
  # Returns the formatted number appropriate for the node.
795
807
  # E.g., "2.1" for a section.
796
808
  # Note: sets @cha as a side-effect. Yes, this is gross.
@@ -122,10 +122,10 @@ module Polytexnic
122
122
  lines = []
123
123
  in_table = false
124
124
  string.split("\n").each do |line|
125
- in_table ||= (line =~ /^\s*\\begin{(?:tabular|longtable)}/)
125
+ in_table ||= (line =~ /^\s*\\begin{(?:tabularx?|longtable)}/)
126
126
  line.gsub!('\\\\', xmlelement('backslashbreak')) unless in_table
127
127
  lines << line
128
- in_table = (in_table && line !~ /^\s*\\end{tabular}/)
128
+ in_table = (in_table && line !~ /^\s*\\end{tabularx?}/)
129
129
  end
130
130
  lines.join("\n")
131
131
  end
@@ -216,13 +216,19 @@ module Polytexnic
216
216
  output.replace(centered)
217
217
  end
218
218
 
219
- # Converts the longtable environment to simple tabular.
220
- # This is mainly because kramdown outputs longtables by default,
219
+ # Converts the alt table environments to simple tabular.
220
+ # This is was originaly because kramdown outputs longtables by default,
221
221
  # but as a side-effect you can also use longtables in PolyTeX
222
- # input documents.
222
+ # input documents. The latest update includes support for the tabularx
223
+ # environment
223
224
  def convert_longtable(output)
224
225
  output.gsub!('\begin{longtable}', '\begin{tabular}')
225
226
  output.gsub!('\end{longtable}', '\end{tabular}')
227
+ output.gsub!(/\\begin\{tabularx\}\{.*?\}\{(.*)\}/) do
228
+ alignment = $1.gsub('X', 'l') # X becomes left-justified in HTML
229
+ "\\begin{tabular}{#{alignment}}"
230
+ end
231
+ output.gsub!('\end{tabularx}', '\end{tabular}')
226
232
  end
227
233
 
228
234
  # Marks environments with their types.
@@ -287,7 +293,7 @@ module Polytexnic
287
293
  # I've tried in vain to figure out WTF is going on in the Tralics
288
294
  # source, but it's easy enough in Ruby so I'm throwing it in here.
289
295
  def make_tabular_alignment_cache(output)
290
- alignment_regex = /^\s*\\begin{tabular}{((?:\|*[lcr]+\|*)+)}/
296
+ alignment_regex = /^\s*\\begin{tabular}{\s*((?:\|*[lcr]+\|*)+)\s*}/
291
297
  @tabular_alignment_cache = output.scan(alignment_regex).flatten
292
298
  end
293
299
 
@@ -26,7 +26,7 @@ module Polytexnic
26
26
  require 'kramdown'
27
27
  cache = {}
28
28
  math_cache = {}
29
- cleaned_markdown = cache_code_environments
29
+ cleaned_markdown = cache_code_environments(@source)
30
30
  puts cleaned_markdown if debug?
31
31
  cleaned_markdown.tap do |markdown|
32
32
  convert_code_inclusion(markdown, cache)
@@ -63,7 +63,9 @@ module Polytexnic
63
63
 
64
64
  # Caches literal LaTeX environments.
65
65
  def cache_latex_literal(markdown, cache)
66
- Polytexnic::Literal.literal_types.each do |literal|
66
+ # Add tabular and tabularx support.
67
+ literal_types = Polytexnic::Literal.literal_types + %w[tabular tabularx]
68
+ literal_types.each do |literal|
67
69
  regex = /(\\begin\{#{Regexp.escape(literal)}\}
68
70
  .*?
69
71
  \\end\{#{Regexp.escape(literal)}\})
@@ -135,9 +137,9 @@ module Polytexnic
135
137
  # Caches Markdown code environments.
136
138
  # Included are indented environments, Leanpub-style indented environments,
137
139
  # and GitHub-style code fencing.
138
- def cache_code_environments
140
+ def cache_code_environments(source)
139
141
  output = []
140
- lines = @source.split("\n")
142
+ lines = source.split("\n")
141
143
  indentation = ' ' * 4
142
144
  while (line = lines.shift)
143
145
  if line =~ /\{lang="(.*?)"\}/
@@ -1,3 +1,3 @@
1
1
  module Polytexnic
2
- VERSION = "0.7.6"
2
+ VERSION = "0.7.7"
3
3
  end
data/lib/polytexnic.rb CHANGED
@@ -33,7 +33,7 @@ module Polytexnic
33
33
  :custom_commands
34
34
 
35
35
  def initialize(source, options = {})
36
- @literal_cache = {}
36
+ @literal_cache = options[:literal_cache] || {}
37
37
  @code_cache = {}
38
38
  @maketitle_elements = {}
39
39
  @highlight_cache_filename = '.highlight_cache'
@@ -40,7 +40,7 @@ Lorem ipsum
40
40
  it { should_not include '\hypertarget' }
41
41
  end
42
42
 
43
- describe "hyphenation" do
43
+ context "hyphenation" do
44
44
  let(:source) { 'profes\-sional' }
45
45
  it { should include source }
46
46
  end
@@ -302,6 +302,17 @@ def foo; "bar"; end
302
302
  end
303
303
  it { should resemble '\chapter{Foo}' }
304
304
  end
305
+
306
+ context "a tabular LaTeX environment" do
307
+ let(:source) do <<-'EOS'
308
+ \begin{tabularx}
309
+ a & b \\
310
+ c & d
311
+ \end{tabularx}
312
+ EOS
313
+ end
314
+ it { should resemble source }
315
+ end
305
316
  end
306
317
 
307
318
  describe "source code" do
@@ -3,7 +3,8 @@ require 'spec_helper'
3
3
 
4
4
  describe 'Polytexnic::Pipeline#to_html' do
5
5
 
6
- subject(:processed_text) { Polytexnic::Pipeline.new(polytex).to_html }
6
+ let(:pipeline) { Polytexnic::Pipeline.new(polytex) }
7
+ subject(:processed_text) { pipeline.to_html }
7
8
 
8
9
  describe '\chapter' do
9
10
  context "with a name" do
@@ -36,6 +37,25 @@ describe 'Polytexnic::Pipeline#to_html' do
36
37
  it { should resemble output }
37
38
  end
38
39
 
40
+ context "with an alternate to 'Chapter'" do
41
+ before do
42
+ pipeline.stub(:custom_commands).
43
+ and_return('\renewcommand{\chaptername}{Chapitre}')
44
+ end
45
+ let(:polytex) do <<-'EOS'
46
+ \chapter{Foo \emph{bar}}
47
+ \label{cha:foo}
48
+ EOS
49
+ end
50
+ let(:output) do <<-'EOS'
51
+ <div id="cha-foo" data-tralics-id="cid1" class="chapter" data-number="1">
52
+ <h1><a href="#cha-foo" class="heading"><span class="number">Chapitre 1 </span>Foo <em>bar</em></a></h1>
53
+ </div>
54
+ EOS
55
+ end
56
+ it { should resemble output }
57
+ end
58
+
39
59
  end
40
60
 
41
61
  describe '\section' do
@@ -96,7 +96,7 @@ describe 'Polytexnic::Pipeline#to_html' do
96
96
 
97
97
  describe '\maketitle' do
98
98
 
99
- context "with all element filled out explicitly" do
99
+ context "with all elements filled out explicitly" do
100
100
  let(:polytex) do <<-'EOS'
101
101
  \title{Foo \\ \emph{Bar}}
102
102
  \subtitle{Baz}
@@ -124,6 +124,30 @@ describe 'Polytexnic::Pipeline#to_html' do
124
124
  end
125
125
  end
126
126
 
127
+ context "with Unicode" do
128
+ let(:polytex) do <<-'EOS'
129
+ \title{A könyv címe}
130
+ \subtitle{Alcím - itt lesz az alcím}
131
+ \author{Árvíztűrő fúrógép}
132
+ \date{January 1, 2013}
133
+ \begin{document}
134
+ \maketitle
135
+ \end{document}
136
+ EOS
137
+ end
138
+
139
+ it do
140
+ should resemble <<-'EOS'
141
+ <div id="title_page">
142
+ <h1 class="title">A k<span class="unicode">ö</span>nyv c<span class="unicode">í</span>me</h1>
143
+ <h1 class="subtitle">Alc<span class="unicode">í</span>m - itt lesz az alc<span class="unicode">í</span>m</h1>
144
+ <h2 class="author"><span class="unicode">Á</span>rv<span class="unicode">í</span>zt<span class="unicode">ű</span>r<span class="unicode">ő</span> f<span class="unicode">ú</span>r<span class="unicode">ó</span>g<span class="unicode">é</span>p</h2>
145
+ <h2 class="date">January 1, 2013</h2>
146
+ </div>
147
+ EOS
148
+ end
149
+ end
150
+
127
151
  context "when date is blank" do
128
152
  let(:polytex) do <<-'EOS'
129
153
  \title{Foo \\ \emph{Bar}}
@@ -51,6 +51,35 @@ describe 'Polytexnic::Pipeline#to_html' do
51
51
  end
52
52
  end
53
53
 
54
+ context "tabularx environments" do
55
+ let(:polytex) do <<-'EOS'
56
+ \begin{tabularx}{\textwidth}{ |l|l|l|l| }
57
+ \hline
58
+ label 1 & label 2 & label 3 & label 4 \\
59
+ \hline
60
+ item 1 & item 2 & item 3 & item 4 \\
61
+ \hline
62
+ \end{tabularx}
63
+ EOS
64
+ end
65
+ let(:output) do <<-'EOS'
66
+ <table class="tabular">
67
+ <tr class="top_border bottom_border"><td class="left_border align_left right_border">label 1</td>
68
+ <td class="align_left right_border">label 2</td>
69
+ <td class="align_left right_border">label 3</td>
70
+ <td class="align_left right_border">label 4</td>
71
+ </tr>
72
+ <tr class="bottom_border"><td class="left_border align_left right_border">item 1</td>
73
+ <td class="align_left right_border">item 2</td>
74
+ <td class="align_left right_border">item 3</td>
75
+ <td class="align_left right_border">item 4</td>
76
+ </tr>
77
+ </table>
78
+ EOS
79
+ end
80
+ it { should resemble output }
81
+ end
82
+
54
83
  context "more complicated left-aligned cells with lines" do
55
84
  let(:polytex) do <<-'EOS'
56
85
  \begin{tabular}{|l|lll|}
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: 0.7.6
4
+ version: 0.7.7
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: 2013-12-18 00:00:00.000000000 Z
12
+ date: 2013-12-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -194,6 +194,7 @@ files:
194
194
  - .pull_requests/1386936855
195
195
  - .pull_requests/1387316123
196
196
  - .pull_requests/1387337421
197
+ - .pull_requests/1387418273
197
198
  - .rspec
198
199
  - Gemfile
199
200
  - Guardfile