hemingway 0.0.2 → 0.0.3

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.
@@ -2,6 +2,7 @@ require "hemingway/block/block_nodes"
2
2
  require "hemingway/block/list/list"
3
3
  require "hemingway/block/verbatim/verbatim"
4
4
  require "hemingway/block/quote/quote"
5
+ require "hemingway/block/center/center"
5
6
 
6
7
  module Hemingway
7
8
  grammar Block
@@ -9,6 +10,7 @@ module Hemingway
9
10
  include List
10
11
  include Verbatim
11
12
  include Quote
13
+ include Center
12
14
 
13
15
  # Example:
14
16
  # \begin{itemize}
@@ -18,9 +20,10 @@ module Hemingway
18
20
  # \end{itemize}
19
21
  rule block
20
22
  (
21
- block_start type:list_type "}" whitespace content:list whitespace block_end list_type "}" &{ |seq| seq[1].text_value == seq[7].text_value } /
22
- block_start type:verbatim_type "}" whitespace content:verbatim whitespace block_end verbatim_type "}" /
23
- block_start type:quote_type "}" whitespace content:quote_entry whitespace block_end quote_type "}"
23
+ block_start type:list_type "}" whitespace? content:list whitespace? block_end list_type "}" &{ |seq| seq[1].text_value == seq[7].text_value } /
24
+ block_start type:verbatim_type "}" whitespace? content:verbatim whitespace? block_end verbatim_type "}" /
25
+ block_start type:quote_type "}" whitespace? content:quote_entry whitespace? block_end quote_type "}" /
26
+ block_start type:center_type "}" whitespace? content:center whitespace? block_end center_type "}"
24
27
  ) <BlockNode>
25
28
  end
26
29
 
@@ -0,0 +1,134 @@
1
+ # Autogenerated from a Treetop grammar. Edits may be lost.
2
+
3
+
4
+ require "hemingway/block/center/center_nodes"
5
+
6
+ module Hemingway
7
+ module Block
8
+ module Center
9
+ include Treetop::Runtime
10
+
11
+ def root
12
+ @root ||= :center
13
+ end
14
+
15
+ module Center0
16
+ def block_end
17
+ elements[0]
18
+ end
19
+
20
+ def center_type
21
+ elements[1]
22
+ end
23
+ end
24
+
25
+ module Center1
26
+ def content
27
+ elements[1]
28
+ end
29
+ end
30
+
31
+ def _nt_center
32
+ start_index = index
33
+ if node_cache[:center].has_key?(index)
34
+ cached = node_cache[:center][index]
35
+ if cached
36
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
37
+ @index = cached.interval.end
38
+ end
39
+ return cached
40
+ end
41
+
42
+ s0, i0 = [], index
43
+ loop do
44
+ i1 = index
45
+ i2, s2 = index, []
46
+ i3 = index
47
+ i4, s4 = index, []
48
+ r5 = _nt_block_end
49
+ s4 << r5
50
+ if r5
51
+ r6 = _nt_center_type
52
+ s4 << r6
53
+ end
54
+ if s4.last
55
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
56
+ r4.extend(Center0)
57
+ else
58
+ @index = i4
59
+ r4 = nil
60
+ end
61
+ if r4
62
+ r3 = nil
63
+ else
64
+ @index = i3
65
+ r3 = instantiate_node(SyntaxNode,input, index...index)
66
+ end
67
+ s2 << r3
68
+ if r3
69
+ r7 = _nt_content
70
+ s2 << r7
71
+ end
72
+ if s2.last
73
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
74
+ r2.extend(Center1)
75
+ else
76
+ @index = i2
77
+ r2 = nil
78
+ end
79
+ if r2
80
+ r1 = r2
81
+ else
82
+ r8 = _nt_newline
83
+ if r8
84
+ r1 = r8
85
+ else
86
+ @index = i1
87
+ r1 = nil
88
+ end
89
+ end
90
+ if r1
91
+ s0 << r1
92
+ else
93
+ break
94
+ end
95
+ end
96
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
97
+
98
+ node_cache[:center][start_index] = r0
99
+
100
+ r0
101
+ end
102
+
103
+ def _nt_center_type
104
+ start_index = index
105
+ if node_cache[:center_type].has_key?(index)
106
+ cached = node_cache[:center_type][index]
107
+ if cached
108
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
109
+ @index = cached.interval.end
110
+ end
111
+ return cached
112
+ end
113
+
114
+ if has_terminal?("center", false, index)
115
+ r0 = instantiate_node(CenterNode,input, index...(index + 6))
116
+ @index += 6
117
+ else
118
+ terminal_parse_failure("center")
119
+ r0 = nil
120
+ end
121
+
122
+ node_cache[:center_type][start_index] = r0
123
+
124
+ r0
125
+ end
126
+
127
+ end
128
+
129
+ class CenterParser < Treetop::Runtime::CompiledParser
130
+ include Center
131
+ end
132
+
133
+ end
134
+ end
@@ -0,0 +1,17 @@
1
+ require "hemingway/block/center/center_nodes"
2
+
3
+ module Hemingway
4
+ module Block
5
+ grammar Center
6
+
7
+ rule center
8
+ ( !( block_end center_type ) content / newline )*
9
+ end
10
+
11
+ rule center_type
12
+ "center" <CenterNode>
13
+ end
14
+
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module Hemingway
2
+
3
+ module CenterNode
4
+ def html(block_content)
5
+ content = block_content.elements.map do |e|
6
+ if e.respond_to?(:content)
7
+ e.content.html
8
+ else
9
+ e.visible_html
10
+ end
11
+ end.join
12
+
13
+ Build.tag("div", content , class: "center")
14
+ end
15
+ end
16
+
17
+ end
@@ -98,10 +98,6 @@ module Hemingway
98
98
  end
99
99
 
100
100
  module Item0
101
- def whitespace1
102
- elements[1]
103
- end
104
-
105
101
  def label
106
102
  elements[2]
107
103
  end
@@ -109,10 +105,6 @@ module Hemingway
109
105
  def sequence
110
106
  elements[3]
111
107
  end
112
-
113
- def whitespace2
114
- elements[4]
115
- end
116
108
  end
117
109
 
118
110
  def _nt_item
@@ -136,32 +128,45 @@ module Hemingway
136
128
  end
137
129
  s0 << r1
138
130
  if r1
139
- r2 = _nt_whitespace
131
+ r3 = _nt_whitespace
132
+ if r3
133
+ r2 = r3
134
+ else
135
+ r2 = instantiate_node(SyntaxNode,input, index...index)
136
+ end
140
137
  s0 << r2
141
138
  if r2
142
- r4 = _nt_label
143
- if r4
144
- r3 = r4
139
+ r5 = _nt_label
140
+ if r5
141
+ r4 = r5
145
142
  else
146
- r3 = instantiate_node(SyntaxNode,input, index...index)
143
+ r4 = instantiate_node(SyntaxNode,input, index...index)
147
144
  end
148
- s0 << r3
149
- if r3
150
- s5, i5 = [], index
145
+ s0 << r4
146
+ if r4
147
+ s6, i6 = [], index
151
148
  loop do
152
- r6 = _nt_content
153
- if r6
154
- s5 << r6
149
+ i7 = index
150
+ r8 = _nt_content
151
+ if r8
152
+ r7 = r8
153
+ else
154
+ r9 = _nt_whitespace
155
+ if r9
156
+ r7 = r9
157
+ else
158
+ @index = i7
159
+ r7 = nil
160
+ end
161
+ end
162
+ if r7
163
+ s6 << r7
155
164
  else
156
165
  break
157
166
  end
158
167
  end
159
- r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
160
- s0 << r5
161
- if r5
162
- r7 = _nt_whitespace
163
- s0 << r7
164
- end
168
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
169
+ s0 << r6
165
170
  end
166
171
  end
167
172
  end
@@ -17,7 +17,7 @@ module Hemingway
17
17
  end
18
18
 
19
19
  rule item
20
- "\\item" whitespace label:label? sequence:content* whitespace <ItemNode>
20
+ "\\item" whitespace? label:label? sequence:( content / whitespace )* <ItemNode>
21
21
  end
22
22
 
23
23
  rule label
@@ -5,13 +5,15 @@ module Hemingway
5
5
  class Build
6
6
  def self.tag(html_attribute, html_content=nil, options={})
7
7
  String.new.tap do |t|
8
- t << "<" + html_attribute
9
- t << " id='" + options[:id] + "'" if options[:id]
10
- t << " class='" + options[:class] + "'" if options[:class]
11
- t << " href='" + options[:href] + "'" if options[:href]
8
+ t << "<#{html_attribute}"
9
+
10
+ options.select { |k, v| k != :close_tag }.each do |k, v|
11
+ t << " #{k}='#{v}'"
12
+ end
13
+
12
14
  t << ">"
13
15
  t << html_content if html_content
14
- t << "</" + html_attribute + ">" unless options[:close_tag] == false
16
+ t << "</#{html_attribute}>" unless options[:close_tag] == false
15
17
  end
16
18
  end
17
19
 
@@ -19,6 +21,11 @@ module Hemingway
19
21
  latex_sym_to_html[symbol]
20
22
  end
21
23
 
24
+ # return the accented character or just the character if no match.
25
+ def self.accent(character, accent)
26
+ character_accent_to_html[character] and character_accent_to_html[character][accent] or character
27
+ end
28
+
22
29
  private
23
30
  def self.latex_sym_to_html
24
31
  {
@@ -56,7 +63,98 @@ module Hemingway
56
63
  "\\phi" => "&phi;",
57
64
  "\\chi" => "&chi;",
58
65
  "\\psi" => "&psi;",
59
- "\\omega" => "&omega;"
66
+ "\\omega" => "&omega;",
67
+ "\\rightarrow" => "&rArr;"
68
+ }
69
+ end
70
+
71
+ def self.character_accent_to_html
72
+ {
73
+ "A" => {
74
+ "`" => "&Agrave;",
75
+ "'" => "&Aacute;",
76
+ "c" => "&Acirc;",
77
+ "~" => "&Atilde;",
78
+ '"' => "&Auml;",
79
+ "r" => "&Aring;"
80
+ },
81
+ "C" => {
82
+ "c" => "&Ccedil;"
83
+ },
84
+ "E" => {
85
+ "`" => "&Egrave;",
86
+ "'" => "&Eacute;",
87
+ "c" => "&Ecirc;",
88
+ '"' => "&Euml;"
89
+ },
90
+ "I" => {
91
+ "`" => "&Igrave;",
92
+ "'" => "&Iacute;",
93
+ "c" => "&Icirc;",
94
+ '"' => "&Iuml;"
95
+ },
96
+ "N" => {
97
+ "~" => "&Ntilde;"
98
+ },
99
+ "O" => {
100
+ "`" => "&Ograve;",
101
+ "'" => "&Oacute;",
102
+ "c" => "&Ocirc;",
103
+ "~" => "&Otilde;",
104
+ '"' => "&Ouml;"
105
+ },
106
+ "U" => {
107
+ "`" => "&Ugrave;",
108
+ "'" => "&Uacute;",
109
+ "c" => "&Ucirc;",
110
+ '"' => "&Uuml;"
111
+ },
112
+ "Y" => {
113
+ "'" => "&Yacute;"
114
+ },
115
+ "a" => {
116
+ "`" => "&agrave;",
117
+ "'" => "&aacute;",
118
+ "c" => "&acirc;",
119
+ "~" => "&atilde;",
120
+ '"' => "&auml;",
121
+ "r" => "&aring;"
122
+ },
123
+ "c" => {
124
+ "c" => "&ccedil;"
125
+ },
126
+ "e" => {
127
+ "`" => "&egrave;",
128
+ "'" => "&eacute;",
129
+ "c" => "&ecirc;",
130
+ '"' => "&euml;"
131
+ },
132
+ "i" => {
133
+ "`" => "&igrave;",
134
+ "'" => "&iacute;",
135
+ "c" => "&icirc;",
136
+ '"' => "&iuml;"
137
+ },
138
+ "n" => {
139
+ "~" => "&ntilde;"
140
+ },
141
+ "o" => {
142
+ "`" => "&ograve;",
143
+ "'" => "&oacute;",
144
+ "c" => "&ocirc;",
145
+ "~" => "&otilde;",
146
+ '"' => "&ouml;"
147
+ },
148
+ "u" => {
149
+ "`" => "&ugrave;",
150
+ "'" => "&uacute;",
151
+ "c" => "&ucirc;",
152
+ '"' => "&uuml;"
153
+ },
154
+ "y" => {
155
+ "'" => "&yacute;",
156
+ '"' => "&yuml;"
157
+ }
60
158
  }
61
159
  end
62
160
 
@@ -91,6 +91,12 @@ module Hemingway
91
91
  end
92
92
 
93
93
  module Paragraph0
94
+ def newline
95
+ elements[1]
96
+ end
97
+ end
98
+
99
+ module Paragraph1
94
100
  def sequence
95
101
  elements[0]
96
102
  end
@@ -123,8 +129,33 @@ module Hemingway
123
129
  if r4
124
130
  r2 = r4
125
131
  else
126
- @index = i2
127
- r2 = nil
132
+ i5, s5 = index, []
133
+ i6 = index
134
+ r7 = _nt_eop
135
+ if r7
136
+ r6 = nil
137
+ else
138
+ @index = i6
139
+ r6 = instantiate_node(SyntaxNode,input, index...index)
140
+ end
141
+ s5 << r6
142
+ if r6
143
+ r8 = _nt_newline
144
+ s5 << r8
145
+ end
146
+ if s5.last
147
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
148
+ r5.extend(Paragraph0)
149
+ else
150
+ @index = i5
151
+ r5 = nil
152
+ end
153
+ if r5
154
+ r2 = r5
155
+ else
156
+ @index = i2
157
+ r2 = nil
158
+ end
128
159
  end
129
160
  end
130
161
  if r2
@@ -136,12 +167,12 @@ module Hemingway
136
167
  r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
137
168
  s0 << r1
138
169
  if r1
139
- r5 = _nt_eop
140
- s0 << r5
170
+ r9 = _nt_eop
171
+ s0 << r9
141
172
  end
142
173
  if s0.last
143
174
  r0 = instantiate_node(ParagraphNode,input, i0...index, s0)
144
- r0.extend(Paragraph0)
175
+ r0.extend(Paragraph1)
145
176
  else
146
177
  @index = i0
147
178
  r0 = nil
@@ -153,6 +184,12 @@ module Hemingway
153
184
  end
154
185
 
155
186
  module LastParagraph0
187
+ def newline
188
+ elements[1]
189
+ end
190
+ end
191
+
192
+ module LastParagraph1
156
193
  def sequence
157
194
  elements[0]
158
195
  end
@@ -182,8 +219,33 @@ module Hemingway
182
219
  if r4
183
220
  r2 = r4
184
221
  else
185
- @index = i2
186
- r2 = nil
222
+ i5, s5 = index, []
223
+ i6 = index
224
+ r7 = _nt_eop
225
+ if r7
226
+ r6 = nil
227
+ else
228
+ @index = i6
229
+ r6 = instantiate_node(SyntaxNode,input, index...index)
230
+ end
231
+ s5 << r6
232
+ if r6
233
+ r8 = _nt_newline
234
+ s5 << r8
235
+ end
236
+ if s5.last
237
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
238
+ r5.extend(LastParagraph0)
239
+ else
240
+ @index = i5
241
+ r5 = nil
242
+ end
243
+ if r5
244
+ r2 = r5
245
+ else
246
+ @index = i2
247
+ r2 = nil
248
+ end
187
249
  end
188
250
  end
189
251
  if r2
@@ -200,17 +262,17 @@ module Hemingway
200
262
  end
201
263
  s0 << r1
202
264
  if r1
203
- r6 = _nt_eop
204
- if r6
205
- r5 = r6
265
+ r10 = _nt_eop
266
+ if r10
267
+ r9 = r10
206
268
  else
207
- r5 = instantiate_node(SyntaxNode,input, index...index)
269
+ r9 = instantiate_node(SyntaxNode,input, index...index)
208
270
  end
209
- s0 << r5
271
+ s0 << r9
210
272
  end
211
273
  if s0.last
212
274
  r0 = instantiate_node(ParagraphNode,input, i0...index, s0)
213
- r0.extend(LastParagraph0)
275
+ r0.extend(LastParagraph1)
214
276
  else
215
277
  @index = i0
216
278
  r0 = nil
@@ -304,7 +366,12 @@ module Hemingway
304
366
  break
305
367
  end
306
368
  end
307
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
369
+ if s0.empty?
370
+ @index = i0
371
+ r0 = nil
372
+ else
373
+ r0 = instantiate_node(WhitespaceNode,input, i0...index, s0)
374
+ end
308
375
 
309
376
  node_cache[:whitespace][start_index] = r0
310
377
 
@@ -388,7 +455,7 @@ module Hemingway
388
455
  end
389
456
 
390
457
  if has_terminal?("\n", false, index)
391
- r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
458
+ r0 = instantiate_node(NewlineNode,input, index...(index + 1))
392
459
  @index += 1
393
460
  else
394
461
  terminal_parse_failure("\n")