bean-kramdown 0.13.5

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 (60) hide show
  1. data/AUTHORS +1 -0
  2. data/CONTRIBUTERS +11 -0
  3. data/COPYING +24 -0
  4. data/ChangeLog +6683 -0
  5. data/GPL +674 -0
  6. data/README +43 -0
  7. data/VERSION +1 -0
  8. data/bin/kramdown +78 -0
  9. data/lib/kramdown.rb +23 -0
  10. data/lib/kramdown/compatibility.rb +49 -0
  11. data/lib/kramdown/converter.rb +41 -0
  12. data/lib/kramdown/converter/base.rb +169 -0
  13. data/lib/kramdown/converter/bean_html.rb +71 -0
  14. data/lib/kramdown/converter/html.rb +411 -0
  15. data/lib/kramdown/converter/kramdown.rb +428 -0
  16. data/lib/kramdown/converter/latex.rb +607 -0
  17. data/lib/kramdown/converter/toc.rb +82 -0
  18. data/lib/kramdown/document.rb +119 -0
  19. data/lib/kramdown/element.rb +524 -0
  20. data/lib/kramdown/error.rb +30 -0
  21. data/lib/kramdown/options.rb +373 -0
  22. data/lib/kramdown/parser.rb +39 -0
  23. data/lib/kramdown/parser/base.rb +136 -0
  24. data/lib/kramdown/parser/bean_kramdown.rb +25 -0
  25. data/lib/kramdown/parser/bean_kramdown/info_box.rb +52 -0
  26. data/lib/kramdown/parser/bean_kramdown/oembed.rb +230 -0
  27. data/lib/kramdown/parser/html.rb +570 -0
  28. data/lib/kramdown/parser/kramdown.rb +339 -0
  29. data/lib/kramdown/parser/kramdown/abbreviation.rb +71 -0
  30. data/lib/kramdown/parser/kramdown/autolink.rb +53 -0
  31. data/lib/kramdown/parser/kramdown/blank_line.rb +43 -0
  32. data/lib/kramdown/parser/kramdown/block_boundary.rb +46 -0
  33. data/lib/kramdown/parser/kramdown/blockquote.rb +51 -0
  34. data/lib/kramdown/parser/kramdown/codeblock.rb +63 -0
  35. data/lib/kramdown/parser/kramdown/codespan.rb +56 -0
  36. data/lib/kramdown/parser/kramdown/emphasis.rb +70 -0
  37. data/lib/kramdown/parser/kramdown/eob.rb +39 -0
  38. data/lib/kramdown/parser/kramdown/escaped_chars.rb +38 -0
  39. data/lib/kramdown/parser/kramdown/extensions.rb +204 -0
  40. data/lib/kramdown/parser/kramdown/footnote.rb +74 -0
  41. data/lib/kramdown/parser/kramdown/header.rb +68 -0
  42. data/lib/kramdown/parser/kramdown/horizontal_rule.rb +39 -0
  43. data/lib/kramdown/parser/kramdown/html.rb +169 -0
  44. data/lib/kramdown/parser/kramdown/html_entity.rb +44 -0
  45. data/lib/kramdown/parser/kramdown/image.rb +157 -0
  46. data/lib/kramdown/parser/kramdown/line_break.rb +38 -0
  47. data/lib/kramdown/parser/kramdown/link.rb +154 -0
  48. data/lib/kramdown/parser/kramdown/list.rb +240 -0
  49. data/lib/kramdown/parser/kramdown/math.rb +65 -0
  50. data/lib/kramdown/parser/kramdown/paragraph.rb +63 -0
  51. data/lib/kramdown/parser/kramdown/smart_quotes.rb +214 -0
  52. data/lib/kramdown/parser/kramdown/table.rb +178 -0
  53. data/lib/kramdown/parser/kramdown/typographic_symbol.rb +52 -0
  54. data/lib/kramdown/parser/markdown.rb +69 -0
  55. data/lib/kramdown/utils.rb +42 -0
  56. data/lib/kramdown/utils/entities.rb +348 -0
  57. data/lib/kramdown/utils/html.rb +85 -0
  58. data/lib/kramdown/utils/ordered_hash.rb +100 -0
  59. data/lib/kramdown/version.rb +28 -0
  60. metadata +140 -0
@@ -0,0 +1,52 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ #--
4
+ # Copyright (C) 2009-2012 Thomas Leitner <t_leitner@gmx.at>
5
+ #
6
+ # This file is part of kramdown.
7
+ #
8
+ # kramdown is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation, either version 3 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+ #++
21
+ #
22
+
23
+ module Kramdown
24
+ module Parser
25
+ class Kramdown
26
+
27
+ TYPOGRAPHIC_SYMS = [['---', :mdash], ['--', :ndash], ['...', :hellip],
28
+ ['\\<<', '&lt;&lt;'], ['\\>>', '&gt;&gt;'],
29
+ ['<< ', :laquo_space], [' >>', :raquo_space],
30
+ ['<<', :laquo], ['>>', :raquo]]
31
+ TYPOGRAPHIC_SYMS_SUBST = Hash[*TYPOGRAPHIC_SYMS.flatten]
32
+ TYPOGRAPHIC_SYMS_RE = /#{TYPOGRAPHIC_SYMS.map {|k,v| Regexp.escape(k)}.join('|')}/
33
+
34
+ # Parse the typographic symbols at the current location.
35
+ def parse_typographic_syms
36
+ @src.pos += @src.matched_size
37
+ val = TYPOGRAPHIC_SYMS_SUBST[@src.matched]
38
+ if val.kind_of?(Symbol)
39
+ @tree.children << Element.new(:typographic_sym, val)
40
+ elsif @src.matched == '\\<<'
41
+ @tree.children << Element.new(:entity, ::Kramdown::Utils::Entities.entity('lt'))
42
+ @tree.children << Element.new(:entity, ::Kramdown::Utils::Entities.entity('lt'))
43
+ else
44
+ @tree.children << Element.new(:entity, ::Kramdown::Utils::Entities.entity('gt'))
45
+ @tree.children << Element.new(:entity, ::Kramdown::Utils::Entities.entity('gt'))
46
+ end
47
+ end
48
+ define_parser(:typographic_syms, TYPOGRAPHIC_SYMS_RE, '--|\\.\\.\\.|(?:\\\\| )?(?:<<|>>)')
49
+
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,69 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ #--
4
+ # Copyright (C) 2009-2012 Thomas Leitner <t_leitner@gmx.at>
5
+ #
6
+ # This file is part of kramdown.
7
+ #
8
+ # kramdown is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation, either version 3 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+ #++
21
+ #
22
+
23
+ require 'kramdown/parser/kramdown'
24
+
25
+ module Kramdown
26
+
27
+ module Parser
28
+
29
+ # Used for parsing a document in Markdown format.
30
+ #
31
+ # This parser is based on the kramdown parser and removes the parser methods for the additional
32
+ # non-Markdown features. However, since some things are handled differently by the kramdown
33
+ # parser methods (like deciding when a list item contains just text), this parser differs from
34
+ # real Markdown parsers in some respects.
35
+ #
36
+ # Note, though, that the parser basically fails just one of the Markdown test cases (some others
37
+ # also fail but those failures are negligible).
38
+ class Markdown < Kramdown
39
+
40
+ # Array with all the parsing methods that should be removed from the standard kramdown parser.
41
+ EXTENDED = [:codeblock_fenced, :table, :definition_list, :footnote_definition, :abbrev_definition, :block_math,
42
+ :block_extensions,
43
+ :footnote_marker, :smart_quotes, :inline_math, :span_extensions, :typographic_syms]
44
+
45
+ def initialize(source, options) # :nodoc:
46
+ super
47
+ @block_parsers.delete_if {|i| EXTENDED.include?(i)}
48
+ @span_parsers.delete_if {|i| EXTENDED.include?(i)}
49
+ end
50
+
51
+ # :stopdoc:
52
+
53
+ BLOCK_BOUNDARY = /#{BLANK_LINE}|#{EOB_MARKER}|\Z/
54
+ LAZY_END = /#{BLANK_LINE}|#{EOB_MARKER}|^#{OPT_SPACE}#{LAZY_END_HTML_STOP}|^#{OPT_SPACE}#{LAZY_END_HTML_START}|\Z/
55
+ CODEBLOCK_MATCH = /(?:#{BLANK_LINE}?(?:#{INDENT}[ \t]*\S.*\n)+)*/
56
+ PARAGRAPH_END = LAZY_END
57
+
58
+ IAL_RAND_CHARS = (('a'..'z').to_a + ('0'..'9').to_a)
59
+ IAL_RAND_STRING = (1..20).collect {|a| IAL_RAND_CHARS[rand(IAL_RAND_CHARS.size)]}.join
60
+ LIST_ITEM_IAL = /^\s*(#{IAL_RAND_STRING})?\s*\n/
61
+ IAL_SPAN_START = LIST_ITEM_IAL
62
+
63
+ # :startdoc:
64
+
65
+ end
66
+
67
+ end
68
+
69
+ end
@@ -0,0 +1,42 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ #--
4
+ # Copyright (C) 2009-2012 Thomas Leitner <t_leitner@gmx.at>
5
+ #
6
+ # This file is part of kramdown.
7
+ #
8
+ # kramdown is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation, either version 3 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+ #++
21
+ #
22
+
23
+ module Kramdown
24
+
25
+ # == \Utils Module
26
+ #
27
+ # This module contains utility class/modules/methods that can be used by both parsers and
28
+ # converters.
29
+ module Utils
30
+
31
+ autoload :Entities, 'kramdown/utils/entities'
32
+ autoload :Html, 'kramdown/utils/html'
33
+ autoload :OrderedHash, 'kramdown/utils/ordered_hash'
34
+
35
+ # Treat +name+ as if it were snake cased (e.g. snake_case) and camelize it (e.g. SnakeCase).
36
+ def self.camelize(name)
37
+ name.split('_').inject('') {|s,x| s << x[0..0].upcase + x[1..-1] }
38
+ end
39
+
40
+ end
41
+
42
+ end
@@ -0,0 +1,348 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ #--
4
+ # Copyright (C) 2009-2012 Thomas Leitner <t_leitner@gmx.at>
5
+ #
6
+ # This file is part of kramdown.
7
+ #
8
+ # kramdown is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation, either version 3 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+ #++
21
+ #
22
+
23
+ module Kramdown
24
+
25
+ module Utils
26
+
27
+ # Provides convenience methods for handling named and numeric entities.
28
+ module Entities
29
+
30
+ # Represents an entity that has a +code_point+ and +name+.
31
+ class Entity < Struct.new(:code_point, :name)
32
+
33
+ # Return the UTF8 representation of the entity.
34
+ def char
35
+ [code_point].pack('U*') rescue nil
36
+ end
37
+
38
+ end
39
+
40
+ # Array of arrays. Each sub-array specifies a code point and the associated name.
41
+ #
42
+ # This table is not used directly -- Entity objects are automatically created from it and put
43
+ # into a Hash map when this file is loaded.
44
+ ENTITY_TABLE = [
45
+ [913, 'Alpha'],
46
+ [914, 'Beta'],
47
+ [915, 'Gamma'],
48
+ [916, 'Delta'],
49
+ [917, 'Epsilon'],
50
+ [918, 'Zeta'],
51
+ [919, 'Eta'],
52
+ [920, 'Theta'],
53
+ [921, 'Iota'],
54
+ [922, 'Kappa'],
55
+ [923, 'Lambda'],
56
+ [924, 'Mu'],
57
+ [925, 'Nu'],
58
+ [926, 'Xi'],
59
+ [927, 'Omicron'],
60
+ [928, 'Pi'],
61
+ [929, 'Rho'],
62
+ [931, 'Sigma'],
63
+ [932, 'Tau'],
64
+ [933, 'Upsilon'],
65
+ [934, 'Phi'],
66
+ [935, 'Chi'],
67
+ [936, 'Psi'],
68
+ [937, 'Omega'],
69
+ [945, 'alpha'],
70
+ [946, 'beta'],
71
+ [947, 'gamma'],
72
+ [948, 'delta'],
73
+ [949, 'epsilon'],
74
+ [950, 'zeta'],
75
+ [951, 'eta'],
76
+ [952, 'theta'],
77
+ [953, 'iota'],
78
+ [954, 'kappa'],
79
+ [955, 'lambda'],
80
+ [956, 'mu'],
81
+ [957, 'nu'],
82
+ [958, 'xi'],
83
+ [959, 'omicron'],
84
+ [960, 'pi'],
85
+ [961, 'rho'],
86
+ [963, 'sigma'],
87
+ [964, 'tau'],
88
+ [965, 'upsilon'],
89
+ [966, 'phi'],
90
+ [967, 'chi'],
91
+ [968, 'psi'],
92
+ [969, 'omega'],
93
+ [962, 'sigmaf'],
94
+ [977, 'thetasym'],
95
+ [982, 'piv'],
96
+ [8230, 'hellip'],
97
+ [8242, 'prime'],
98
+ [8254, 'oline'],
99
+ [8260, 'frasl'],
100
+ [8472, 'weierp'],
101
+ [8465, 'image'],
102
+ [8476, 'real'],
103
+ [8501, 'alefsym'],
104
+ [8226, 'bull'],
105
+ [8482, 'trade'],
106
+ [8592, 'larr'],
107
+ [8594, 'rarr'],
108
+ [8593, 'uarr'],
109
+ [8595, 'darr'],
110
+ [8596, 'harr'],
111
+ [8629, 'crarr'],
112
+ [8657, 'uArr'],
113
+ [8659, 'dArr'],
114
+ [8656, 'lArr'],
115
+ [8658, 'rArr'],
116
+ [8660, 'hArr'],
117
+ [8704, 'forall'],
118
+ [8706, 'part'],
119
+ [8707, 'exist'],
120
+ [8709, 'empty'],
121
+ [8711, 'nabla'],
122
+ [8712, 'isin'],
123
+ [8715, 'ni'],
124
+ [8713, 'notin'],
125
+ [8721, 'sum'],
126
+ [8719, 'prod'],
127
+ [8722, 'minus'],
128
+ [8727, 'lowast'],
129
+ [8730, 'radic'],
130
+ [8733, 'prop'],
131
+ [8734, 'infin'],
132
+ [8736, 'ang'],
133
+ [8743, 'and'],
134
+ [8744, 'or'],
135
+ [8745, 'cup'],
136
+ [8746, 'cap'],
137
+ [8747, 'int'],
138
+ [8756, 'there4'],
139
+ [8764, 'sim'],
140
+ [8776, 'asymp'],
141
+ [8773, 'cong'],
142
+ [8800, 'ne'],
143
+ [8801, 'equiv'],
144
+ [8804, 'le'],
145
+ [8805, 'ge'],
146
+ [8834, 'sub'],
147
+ [8835, 'sup'],
148
+ [8838, 'sube'],
149
+ [8839, 'supe'],
150
+ [8836, 'nsub'],
151
+ [8853, 'oplus'],
152
+ [8855, 'otimes'],
153
+ [8869, 'perp'],
154
+ [8901, 'sdot'],
155
+ [8968, 'rceil'],
156
+ [8969, 'lceil'],
157
+ [8970, 'lfloor'],
158
+ [8971, 'rfloor'],
159
+ [9001, 'rang'],
160
+ [9002, 'lang'],
161
+ [9674, 'loz'],
162
+ [9824, 'spades'],
163
+ [9827, 'clubs'],
164
+ [9829, 'hearts'],
165
+ [9830, 'diams'],
166
+ [38, 'amp'],
167
+ [34, 'quot'],
168
+ [39, 'apos'],
169
+ [169, 'copy'],
170
+ [60, 'lt'],
171
+ [62, 'gt'],
172
+ [338, 'OElig'],
173
+ [339, 'oelig'],
174
+ [352, 'Scaron'],
175
+ [353, 'scaron'],
176
+ [376, 'Yuml'],
177
+ [710, 'circ'],
178
+ [732, 'tilde'],
179
+ [8211, 'ndash'],
180
+ [8212, 'mdash'],
181
+ [8216, 'lsquo'],
182
+ [8217, 'rsquo'],
183
+ [8220, 'ldquo'],
184
+ [8221, 'rdquo'],
185
+ [8224, 'dagger'],
186
+ [8225, 'Dagger'],
187
+ [8240, 'permil'],
188
+ [8364, 'euro'],
189
+ [8249, 'lsaquo'],
190
+ [8250, 'rsaquo'],
191
+ [160, 'nbsp'],
192
+ [161, 'iexcl'],
193
+ [163, 'pound'],
194
+ [164, 'curren'],
195
+ [165, 'yen'],
196
+ [166, 'brvbar'],
197
+ [167, 'sect'],
198
+ [171, 'laquo'],
199
+ [187, 'raquo'],
200
+ [174, 'reg'],
201
+ [170, 'ordf'],
202
+ [172, 'not'],
203
+ [176, 'deg'],
204
+ [177, 'plusmn'],
205
+ [180, 'acute'],
206
+ [181, 'micro'],
207
+ [182, 'para'],
208
+ [183, 'middot'],
209
+ [186, 'ordm'],
210
+ [162, 'cent'],
211
+ [185, 'sup1'],
212
+ [178, 'sup2'],
213
+ [179, 'sup3'],
214
+ [189, 'frac12'],
215
+ [188, 'frac14'],
216
+ [190, 'frac34'],
217
+ [192, 'Agrave'],
218
+ [193, 'Aacute'],
219
+ [194, 'Acirc'],
220
+ [195, 'Atilde'],
221
+ [196, 'Auml'],
222
+ [197, 'Aring'],
223
+ [198, 'AElig'],
224
+ [199, 'Ccedil'],
225
+ [200, 'Egrave'],
226
+ [201, 'Eacute'],
227
+ [202, 'Ecirc'],
228
+ [203, 'Euml'],
229
+ [204, 'Igrave'],
230
+ [205, 'Iacute'],
231
+ [206, 'Icirc'],
232
+ [207, 'Iuml'],
233
+ [208, 'ETH'],
234
+ [209, 'Ntilde'],
235
+ [210, 'Ograve'],
236
+ [211, 'Oacute'],
237
+ [212, 'Ocirc'],
238
+ [213, 'Otilde'],
239
+ [214, 'Ouml'],
240
+ [215, 'times'],
241
+ [216, 'Oslash'],
242
+ [217, 'Ugrave'],
243
+ [218, 'Uacute'],
244
+ [219, 'Ucirc'],
245
+ [220, 'Uuml'],
246
+ [221, 'Yacute'],
247
+ [222, 'THORN'],
248
+ [223, 'szlig'],
249
+ [224, 'agrave'],
250
+ [225, 'aacute'],
251
+ [226, 'acirc'],
252
+ [227, 'atilde'],
253
+ [228, 'auml'],
254
+ [229, 'aring'],
255
+ [230, 'aelig'],
256
+ [231, 'ccedil'],
257
+ [232, 'egrave'],
258
+ [233, 'eacute'],
259
+ [234, 'ecirc'],
260
+ [235, 'euml'],
261
+ [236, 'igrave'],
262
+ [237, 'iacute'],
263
+ [238, 'icirc'],
264
+ [239, 'iuml'],
265
+ [240, 'eth'],
266
+ [241, 'ntilde'],
267
+ [242, 'ograve'],
268
+ [243, 'oacute'],
269
+ [244, 'ocirc'],
270
+ [245, 'otilde'],
271
+ [246, 'ouml'],
272
+ [247, 'divide'],
273
+ [248, 'oslash'],
274
+ [249, 'ugrave'],
275
+ [250, 'uacute'],
276
+ [251, 'ucirc'],
277
+ [252, 'uuml'],
278
+ [253, 'yacute'],
279
+ [254, 'thorn'],
280
+ [255, 'yuml'],
281
+
282
+ [8218, 'sbquo'],
283
+ [402, 'fnof'],
284
+ [8222, 'bdquo'],
285
+
286
+ [128, 8364],
287
+ [130, 8218],
288
+ [131, 402],
289
+ [132, 8222],
290
+ [133, 8230],
291
+ [134, 8224],
292
+ [135, 8225],
293
+ [136, 710],
294
+ [137, 8240],
295
+ [138, 352],
296
+ [139, 8249],
297
+ [140, 338],
298
+ [142, 381],
299
+ [145, 8216],
300
+ [146, 8217],
301
+ [147, 8220],
302
+ [148, 8221],
303
+ [149, 8226],
304
+ [150, 8211],
305
+ [151, 8212],
306
+ [152, 732],
307
+ [153, 8482],
308
+ [154, 353],
309
+ [155, 8250],
310
+ [156, 339],
311
+ [158, 382],
312
+ [159, 376],
313
+
314
+ [8194, 'ensp'],
315
+ [8195, 'emsp'],
316
+ [8201, 'thinsp'],
317
+ ]
318
+
319
+ # Contains the mapping of code point (or name) to the actual Entity object.
320
+ ENTITY_MAP = Hash.new do |h,k|
321
+ if k.kind_of?(Integer)
322
+ h[k] = Entity.new(k, nil)
323
+ else
324
+ raise Kramdown::Error, "Can't handle generic non-integer character reference '#{k}'"
325
+ end
326
+ end
327
+
328
+ ENTITY_TABLE.each do |code_point, data|
329
+ if data.kind_of?(String)
330
+ ENTITY_MAP[code_point] = ENTITY_MAP[data] = Entity.new(code_point, data)
331
+ else
332
+ ENTITY_MAP[code_point] = ENTITY_MAP[data]
333
+ end
334
+ end
335
+
336
+ # Return the entity for the given code point or name +point_or_name+.
337
+ def entity(point_or_name)
338
+ ENTITY_MAP[point_or_name]
339
+ end
340
+
341
+ module_function :entity
342
+
343
+ end
344
+
345
+ end
346
+
347
+ end
348
+