bean-kramdown 0.13.5

Sign up to get free protection for your applications and to get access to all the features.
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
+