motion-kramdown 0.6.0 → 1.16.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +6 -2
  3. data/lib/kramdown.rb +1 -1
  4. data/lib/kramdown/converter.rb +10 -11
  5. data/lib/kramdown/converter/base.rb +19 -12
  6. data/lib/kramdown/converter/hash_ast.rb +38 -0
  7. data/lib/kramdown/converter/html.rb +71 -39
  8. data/lib/kramdown/converter/kramdown.rb +19 -10
  9. data/lib/kramdown/converter/latex.rb +28 -10
  10. data/lib/kramdown/converter/man.rb +303 -0
  11. data/lib/kramdown/converter/math_engine/itex2mml.rb +2 -2
  12. data/lib/kramdown/converter/math_engine/mathjax.rb +13 -3
  13. data/lib/kramdown/converter/math_engine/mathjaxnode.rb +56 -0
  14. data/lib/kramdown/converter/math_engine/ritex.rb +2 -2
  15. data/lib/kramdown/converter/math_engine/sskatex.rb +97 -0
  16. data/lib/kramdown/converter/pdf.rb +6 -6
  17. data/lib/kramdown/converter/remove_html_tags.rb +5 -3
  18. data/lib/kramdown/converter/syntax_highlighter.rb +5 -2
  19. data/lib/kramdown/converter/syntax_highlighter/coderay.rb +8 -5
  20. data/lib/kramdown/converter/syntax_highlighter/minted.rb +35 -0
  21. data/lib/kramdown/converter/syntax_highlighter/rouge.rb +48 -10
  22. data/lib/kramdown/converter/toc.rb +2 -2
  23. data/lib/kramdown/document.rb +16 -19
  24. data/lib/kramdown/element.rb +5 -1
  25. data/lib/kramdown/error.rb +1 -1
  26. data/lib/kramdown/options.rb +103 -7
  27. data/lib/kramdown/parser.rb +1 -1
  28. data/lib/kramdown/parser/base.rb +12 -18
  29. data/lib/kramdown/parser/gfm.rb +142 -11
  30. data/lib/kramdown/parser/html.rb +28 -18
  31. data/lib/kramdown/parser/kramdown.rb +45 -36
  32. data/lib/kramdown/parser/kramdown/abbreviation.rb +1 -1
  33. data/lib/kramdown/parser/kramdown/autolink.rb +2 -8
  34. data/lib/kramdown/parser/kramdown/blank_line.rb +2 -2
  35. data/lib/kramdown/parser/kramdown/block_boundary.rb +4 -4
  36. data/lib/kramdown/parser/kramdown/blockquote.rb +4 -4
  37. data/lib/kramdown/parser/kramdown/codeblock.rb +11 -8
  38. data/lib/kramdown/parser/kramdown/codespan.rb +1 -1
  39. data/lib/kramdown/parser/kramdown/emphasis.rb +2 -2
  40. data/lib/kramdown/parser/kramdown/eob.rb +1 -1
  41. data/lib/kramdown/parser/kramdown/escaped_chars.rb +1 -1
  42. data/lib/kramdown/parser/kramdown/extensions.rb +6 -3
  43. data/lib/kramdown/parser/kramdown/footnote.rb +4 -5
  44. data/lib/kramdown/parser/kramdown/header.rb +2 -2
  45. data/lib/kramdown/parser/kramdown/horizontal_rule.rb +1 -1
  46. data/lib/kramdown/parser/kramdown/html.rb +8 -8
  47. data/lib/kramdown/parser/kramdown/html_entity.rb +2 -2
  48. data/lib/kramdown/parser/kramdown/line_break.rb +1 -1
  49. data/lib/kramdown/parser/kramdown/link.rb +5 -4
  50. data/lib/kramdown/parser/kramdown/list.rb +17 -10
  51. data/lib/kramdown/parser/kramdown/math.rb +2 -2
  52. data/lib/kramdown/parser/kramdown/paragraph.rb +19 -8
  53. data/lib/kramdown/parser/kramdown/smart_quotes.rb +3 -3
  54. data/lib/kramdown/parser/kramdown/table.rb +10 -12
  55. data/lib/kramdown/parser/kramdown/typographic_symbol.rb +1 -1
  56. data/lib/kramdown/parser/markdown.rb +2 -2
  57. data/lib/kramdown/utils.rb +2 -1
  58. data/lib/kramdown/utils/configurable.rb +2 -2
  59. data/lib/kramdown/utils/entities.rb +1 -1
  60. data/lib/kramdown/utils/html.rb +2 -2
  61. data/lib/kramdown/utils/lru_cache.rb +40 -0
  62. data/lib/kramdown/utils/ordered_hash.rb +2 -71
  63. data/lib/kramdown/utils/string_scanner.rb +2 -2
  64. data/lib/kramdown/utils/unidecoder.rb +2 -2
  65. data/lib/kramdown/version.rb +2 -2
  66. data/lib/rubymotion/require_override.rb +9 -0
  67. data/lib/rubymotion/version.rb +1 -1
  68. data/spec/{helpers → motion-kramdown/_helpers}/it_behaves_like.rb +0 -0
  69. data/spec/{helpers → motion-kramdown/_helpers}/option_file.rb +2 -2
  70. data/spec/{helpers → motion-kramdown/_helpers}/tidy.rb +0 -0
  71. data/spec/motion-kramdown/bench_mark.rb +37 -0
  72. data/spec/{document_tree.rb → motion-kramdown/document_tree.rb} +11 -1
  73. data/spec/{gfm_to_html.rb → motion-kramdown/gfm_to_html.rb} +51 -18
  74. data/spec/{html_to_html.rb → motion-kramdown/html_to_html.rb} +27 -9
  75. data/spec/{html_to_kramdown_to_html.rb → motion-kramdown/html_to_kramdown_to_html.rb} +35 -16
  76. data/spec/motion-kramdown/kramdown_to_xxx.rb +75 -0
  77. data/spec/{test_location.rb → motion-kramdown/test_location.rb} +0 -0
  78. data/spec/{test_string_scanner_kramdown.rb → motion-kramdown/test_string_scanner_kramdown.rb} +0 -0
  79. data/spec/motion-kramdown/text_manpage.rb +11 -0
  80. data/spec/{text_to_kramdown_to_html.rb → motion-kramdown/text_to_kramdown_to_html.rb} +30 -19
  81. data/spec/{text_to_latex.rb → motion-kramdown/text_to_latex.rb} +0 -0
  82. data/spec/{helpers/spec_options.rb → spec_helper.rb} +13 -2
  83. metadata +54 -33
  84. data/lib/kramdown/compatibility.rb +0 -36
  85. data/spec/bench_mark.rb +0 -43
  86. data/spec/kramdown_to_xxx.rb +0 -42
@@ -1,16 +1,16 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009-2015 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2016 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown which is licensed under the MIT.
7
7
  #++
8
8
  #
9
9
 
10
- # RM require 'rexml/parsers/baseparser'
11
- # RM require 'strscan'
12
- # RM require 'kramdown/utils'
13
- # RM require 'kramdown/parser'
10
+ require 'rexml/parsers/baseparser'
11
+ require 'strscan'
12
+ require 'kramdown/utils'
13
+ require 'kramdown/parser'
14
14
 
15
15
  module Kramdown
16
16
 
@@ -35,8 +35,8 @@ module Kramdown
35
35
  HTML_ENTITY_RE = /&([\w:][\-\w\.:]*);|&#(\d+);|&\#x([0-9a-fA-F]+);/
36
36
 
37
37
  HTML_CONTENT_MODEL_BLOCK = %w{address applet article aside blockquote body
38
- dd details div dl fieldset figure figcaption footer form header hgroup iframe li map menu nav
39
- noscript object section summary td}
38
+ dd details div dl fieldset figure figcaption footer form header hgroup iframe li main
39
+ map menu nav noscript object section summary td}
40
40
  HTML_CONTENT_MODEL_SPAN = %w{a abbr acronym b bdo big button cite caption del dfn dt em
41
41
  h1 h2 h3 h4 h5 h6 i ins label legend optgroup p q rb rbc
42
42
  rp rt rtc ruby select small span strong sub sup th tt}
@@ -53,12 +53,18 @@ module Kramdown
53
53
  # span HTML) and don't appear therefore!
54
54
  # script, textarea
55
55
  HTML_SPAN_ELEMENTS = %w{a abbr acronym b big bdo br button cite code del dfn em i img input
56
- ins kbd label option q rb rbc rp rt rtc ruby samp select small span
56
+ ins kbd label mark option q rb rbc rp rt rtc ruby samp select small span
57
57
  strong sub sup tt u var}
58
58
  HTML_BLOCK_ELEMENTS = %w{address article aside applet body blockquote caption col colgroup dd div dl dt fieldset
59
59
  figcaption footer form h1 h2 h3 h4 h5 h6 header hgroup hr html head iframe legend menu
60
- li map nav ol optgroup p pre section summary table tbody td th thead tfoot tr ul}
60
+ li main map nav ol optgroup p pre section summary table tbody td th thead tfoot tr ul}
61
61
  HTML_ELEMENTS_WITHOUT_BODY = %w{area base br col command embed hr img input keygen link meta param source track wbr}
62
+
63
+ HTML_ELEMENT = Hash.new(false)
64
+ (HTML_SPAN_ELEMENTS + HTML_BLOCK_ELEMENTS + HTML_ELEMENTS_WITHOUT_BODY +
65
+ HTML_CONTENT_MODEL.keys).each do |a|
66
+ HTML_ELEMENT[a] = true
67
+ end
62
68
  end
63
69
 
64
70
 
@@ -77,16 +83,16 @@ module Kramdown
77
83
  # element is already closed, ie. contains no body; the third parameter specifies whether the
78
84
  # body - and the end tag - need to be handled in case closed=false).
79
85
  def handle_html_start_tag(line = nil) # :yields: el, closed, handle_body
80
- name = @src[1].downcase
86
+ name = @src[1]
87
+ name.downcase! if HTML_ELEMENT[name.downcase]
81
88
  closed = !@src[4].nil?
82
- attrs = parse_html_attributes(@src[2], line)
89
+ attrs = parse_html_attributes(@src[2], line, HTML_ELEMENT[name])
83
90
 
84
91
  el = Element.new(:html_element, name, attrs, :category => :block)
85
92
  el.options[:location] = line if line
86
93
  @tree.children << el
87
94
 
88
95
  if !closed && HTML_ELEMENTS_WITHOUT_BODY.include?(el.value)
89
- warning("The HTML tag '#{el.value}' on line #{line} cannot have any content - auto-closing it")
90
96
  closed = true
91
97
  end
92
98
  if name == 'script' || name == 'style'
@@ -100,10 +106,13 @@ module Kramdown
100
106
  # Parses the given string for HTML attributes and returns the resulting hash.
101
107
  #
102
108
  # If the optional +line+ parameter is supplied, it is used in warning messages.
103
- def parse_html_attributes(str, line = nil)
109
+ #
110
+ # If the optional +in_html_tag+ parameter is set to +false+, attributes are not modified to
111
+ # contain only lowercase letters.
112
+ def parse_html_attributes(str, line = nil, in_html_tag = true)
104
113
  attrs = Utils::OrderedHash.new
105
114
  str.scan(HTML_ATTRIBUTE_RE).each do |attr, sep, val|
106
- attr.downcase!
115
+ attr.downcase! if in_html_tag
107
116
  if attrs.has_key?(attr)
108
117
  warning("Duplicate HTML attribute '#{attr}' on line #{line || '?'} - overwriting previous one")
109
118
  end
@@ -150,16 +159,17 @@ module Kramdown
150
159
  elsif result = @src.scan(HTML_INSTRUCTION_RE)
151
160
  @tree.children << Element.new(:xml_pi, result, nil, :category => :block, :location => line)
152
161
  elsif @src.scan(HTML_TAG_RE)
153
- if method(:handle_html_start_tag).arity == 1
162
+ if method(:handle_html_start_tag).arity.abs >= 1
154
163
  handle_html_start_tag(line, &block)
155
164
  else
156
165
  handle_html_start_tag(&block) # DEPRECATED: method needs to accept line number in 2.0
157
166
  end
158
167
  elsif @src.scan(HTML_TAG_CLOSE_RE)
159
- if @tree.value == @src[1].downcase
168
+ if @tree.value == (HTML_ELEMENT[@tree.value] ? @src[1].downcase : @src[1])
160
169
  done = true
161
170
  else
162
- warning("Found invalidly used HTML closing tag for '#{@src[1].downcase}' on line #{line} - ignoring it")
171
+ add_text(@src.matched, @tree, :text)
172
+ warning("Found invalidly used HTML closing tag for '#{@src[1]}' on line #{line} - ignoring it")
163
173
  end
164
174
  else
165
175
  add_text(@src.getch, @tree, :text)
@@ -422,7 +432,7 @@ module Kramdown
422
432
  else
423
433
  set_basics(el, :codeblock)
424
434
  if el.children.size == 1 && el.children.first.value == 'code'
425
- value = (el.children.first.attr['class'] || '').scan(/\blanguage-\w+\b/).first
435
+ value = (el.children.first.attr['class'] || '').scan(/\blanguage-\S+/).first
426
436
  el.attr['class'] = "#{value} #{el.attr['class']}".rstrip if value
427
437
  end
428
438
  end
@@ -1,15 +1,15 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009-2015 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2016 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown which is licensed under the MIT.
7
7
  #++
8
8
  #
9
9
 
10
- # RM require 'strscan'
11
- # RM require 'stringio'
12
- # RM require 'kramdown/parser'
10
+ require 'strscan'
11
+ require 'stringio'
12
+ require 'kramdown/parser'
13
13
 
14
14
  #TODO: use [[:alpha:]] in all regexp to allow parsing of international values in 1.9.1
15
15
  #NOTE: use @src.pre_match only before other check/match?/... operations, otherwise the content is changed
@@ -90,7 +90,15 @@ module Kramdown
90
90
  update_tree(@root)
91
91
  correct_abbreviations_attributes
92
92
  replace_abbreviations(@root)
93
- @footnotes.each {|name,data| update_tree(data[:content])}
93
+ @footnotes.each do |name,data|
94
+ update_tree(data[:content])
95
+ replace_abbreviations(data[:content])
96
+ end
97
+ @footnotes.each do |name, data|
98
+ next if data.key?(:marker)
99
+ line = data[:content].options[:location]
100
+ warning("Footnote definition for '#{name}' on line #{line} is unreferenced - ignoring")
101
+ end
94
102
  end
95
103
 
96
104
  #######
@@ -178,7 +186,11 @@ module Kramdown
178
186
  last_blank = nil
179
187
  update_tree(child)
180
188
  update_attr_with_ial(child.attr, child.options[:ial]) if child.options[:ial]
181
- update_raw_header_text(child) if child.type == :header
189
+ # DEPRECATED: option auto_id_stripping will be removed in 2.0 because then this will be
190
+ # the default behaviour
191
+ if child.type == :dt || (child.type == :header && @options[:auto_id_stripping])
192
+ update_raw_text(child)
193
+ end
182
194
  child
183
195
  end
184
196
  end.flatten!
@@ -267,11 +279,8 @@ module Kramdown
267
279
  end
268
280
  end
269
281
 
270
- # Update the raw header text for automatic ID generation.
271
- def update_raw_header_text(header)
272
- # DEPRECATED: option auto_id_stripping will be removed in 2.0 because then this will be the
273
- # default behaviour
274
- return unless @options[:auto_id_stripping]
282
+ # Update the raw text for automatic ID generation.
283
+ def update_raw_text(item)
275
284
  raw_text = ''
276
285
 
277
286
  append_text = lambda do |child|
@@ -282,8 +291,8 @@ module Kramdown
282
291
  end
283
292
  end
284
293
 
285
- append_text.call(header)
286
- header.options[:raw_text] = raw_text
294
+ append_text.call(item)
295
+ item.options[:raw_text] = raw_text
287
296
  end
288
297
 
289
298
  # Create a new block-level element, taking care of applying a preceding block IAL if it
@@ -331,29 +340,29 @@ module Kramdown
331
340
  # Regexp for matching the optional space (zero or up to three spaces)
332
341
  OPT_SPACE = / {0,3}/
333
342
 
334
- # RM require 'kramdown/parser/kramdown/blank_line'
335
- # RM require 'kramdown/parser/kramdown/eob'
336
- # RM require 'kramdown/parser/kramdown/paragraph'
337
- # RM require 'kramdown/parser/kramdown/header'
338
- # RM require 'kramdown/parser/kramdown/blockquote'
339
- # RM require 'kramdown/parser/kramdown/table'
340
- # RM require 'kramdown/parser/kramdown/codeblock'
341
- # RM require 'kramdown/parser/kramdown/horizontal_rule'
342
- # RM require 'kramdown/parser/kramdown/list'
343
- # RM require 'kramdown/parser/kramdown/link'
344
- # RM require 'kramdown/parser/kramdown/extensions'
345
- # RM require 'kramdown/parser/kramdown/footnote'
346
- # RM require 'kramdown/parser/kramdown/html'
347
- # RM require 'kramdown/parser/kramdown/escaped_chars'
348
- # RM require 'kramdown/parser/kramdown/html_entity'
349
- # RM require 'kramdown/parser/kramdown/line_break'
350
- # RM require 'kramdown/parser/kramdown/typographic_symbol'
351
- # RM require 'kramdown/parser/kramdown/autolink'
352
- # RM require 'kramdown/parser/kramdown/codespan'
353
- # RM require 'kramdown/parser/kramdown/emphasis'
354
- # RM require 'kramdown/parser/kramdown/smart_quotes'
355
- # RM require 'kramdown/parser/kramdown/math'
356
- # RM require 'kramdown/parser/kramdown/abbreviation'
343
+ require 'kramdown/parser/kramdown/blank_line'
344
+ require 'kramdown/parser/kramdown/eob'
345
+ require 'kramdown/parser/kramdown/paragraph'
346
+ require 'kramdown/parser/kramdown/header'
347
+ require 'kramdown/parser/kramdown/blockquote'
348
+ require 'kramdown/parser/kramdown/table'
349
+ require 'kramdown/parser/kramdown/codeblock'
350
+ require 'kramdown/parser/kramdown/horizontal_rule'
351
+ require 'kramdown/parser/kramdown/list'
352
+ require 'kramdown/parser/kramdown/link'
353
+ require 'kramdown/parser/kramdown/extensions'
354
+ require 'kramdown/parser/kramdown/footnote'
355
+ require 'kramdown/parser/kramdown/html'
356
+ require 'kramdown/parser/kramdown/escaped_chars'
357
+ require 'kramdown/parser/kramdown/html_entity'
358
+ require 'kramdown/parser/kramdown/line_break'
359
+ require 'kramdown/parser/kramdown/typographic_symbol'
360
+ require 'kramdown/parser/kramdown/autolink'
361
+ require 'kramdown/parser/kramdown/codespan'
362
+ require 'kramdown/parser/kramdown/emphasis'
363
+ require 'kramdown/parser/kramdown/smart_quotes'
364
+ require 'kramdown/parser/kramdown/math'
365
+ require 'kramdown/parser/kramdown/abbreviation'
357
366
 
358
367
  end
359
368
 
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009-2015 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2016 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown which is licensed under the MIT.
7
7
  #++
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009-2015 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2016 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown which is licensed under the MIT.
7
7
  #++
@@ -11,13 +11,7 @@ module Kramdown
11
11
  module Parser
12
12
  class Kramdown
13
13
 
14
- if RUBY_VERSION == '1.8.5'
15
- ACHARS = '\w\x80-\xFF'
16
- elsif RUBY_VERSION < '1.9.0'
17
- ACHARS = '\w'
18
- else
19
- ACHARS = '[[:alnum:]]'
20
- end
14
+ ACHARS = '[[:alnum:]]_'
21
15
  AUTOLINK_START_STR = "<((mailto|https?|ftps?):.+?|[-.#{ACHARS}]+@[-#{ACHARS}]+(?:\.[-#{ACHARS}]+)*\.[a-z]+)>"
22
16
  AUTOLINK_START = /#{AUTOLINK_START_STR}/u
23
17
 
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009-2015 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2016 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown which is licensed under the MIT.
7
7
  #++
@@ -11,7 +11,7 @@ module Kramdown
11
11
  module Parser
12
12
  class Kramdown
13
13
 
14
- BLANK_LINE = /(?:^\s*\n)+/m # RM Oniguruma -> ICU
14
+ BLANK_LINE = /(?>^\s*\n)+/m # RM Oniguruma -> ICU
15
15
 
16
16
  # Parse the blank line at the current postition.
17
17
  def parse_blank_line
@@ -1,15 +1,15 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009-2015 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2016 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown which is licensed under the MIT.
7
7
  #++
8
8
  #
9
9
 
10
- # RM require 'kramdown/parser/kramdown/extensions'
11
- # RM require 'kramdown/parser/kramdown/blank_line'
12
- # RM require 'kramdown/parser/kramdown/eob'
10
+ require 'kramdown/parser/kramdown/extensions'
11
+ require 'kramdown/parser/kramdown/blank_line'
12
+ require 'kramdown/parser/kramdown/eob'
13
13
 
14
14
  module Kramdown
15
15
  module Parser
@@ -1,15 +1,15 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009-2015 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2016 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown which is licensed under the MIT.
7
7
  #++
8
8
  #
9
9
 
10
- # RM require 'kramdown/parser/kramdown/blank_line'
11
- # RM require 'kramdown/parser/kramdown/extensions'
12
- # RM require 'kramdown/parser/kramdown/eob'
10
+ require 'kramdown/parser/kramdown/blank_line'
11
+ require 'kramdown/parser/kramdown/extensions'
12
+ require 'kramdown/parser/kramdown/eob'
13
13
 
14
14
  module Kramdown
15
15
  module Parser
@@ -1,16 +1,16 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009-2015 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2016 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown which is licensed under the MIT.
7
7
  #++
8
8
  #
9
9
 
10
- # RM require 'kramdown/parser/kramdown/blank_line'
11
- # RM require 'kramdown/parser/kramdown/extensions'
12
- # RM require 'kramdown/parser/kramdown/eob'
13
- # RM require 'kramdown/parser/kramdown/paragraph'
10
+ require 'kramdown/parser/kramdown/blank_line'
11
+ require 'kramdown/parser/kramdown/extensions'
12
+ require 'kramdown/parser/kramdown/eob'
13
+ require 'kramdown/parser/kramdown/paragraph'
14
14
 
15
15
  module Kramdown
16
16
  module Parser
@@ -33,16 +33,19 @@ module Kramdown
33
33
 
34
34
 
35
35
  FENCED_CODEBLOCK_START = /^~{3,}/
36
- FENCED_CODEBLOCK_MATCH = /^((~){3,})\s*?(\w+)?\s*?\n(.*?)^\1\2*\s*?\n/m
36
+ FENCED_CODEBLOCK_MATCH = /^((~){3,})\s*?((\S+?)(?:\?\S*)?)?\s*?\n(.*?)^\1\2*\s*?\n/m
37
37
 
38
38
  # Parse the fenced codeblock at the current location.
39
39
  def parse_codeblock_fenced
40
40
  if @src.check(self.class::FENCED_CODEBLOCK_MATCH)
41
41
  start_line_number = @src.current_line_number
42
42
  @src.pos += @src.matched_size
43
- el = new_block_el(:codeblock, @src[4], nil, :location => start_line_number)
43
+ el = new_block_el(:codeblock, @src[5], nil, :location => start_line_number)
44
44
  lang = @src[3].to_s.strip
45
- el.attr['class'] = "language-#{lang}" unless lang.empty?
45
+ unless lang.empty?
46
+ el.options[:lang] = lang
47
+ el.attr['class'] = "language-#{@src[4]}"
48
+ end
46
49
  @tree.children << el
47
50
  true
48
51
  else
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009-2015 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2016 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown which is licensed under the MIT.
7
7
  #++
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009-2015 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2016 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown which is licensed under the MIT.
7
7
  #++
@@ -22,7 +22,7 @@ module Kramdown
22
22
  element = (result.length == 2 ? :strong : :em)
23
23
  type = result[0..0]
24
24
 
25
- if (type == '_' && @src.pre_match =~ /[[:alnum:]]\z/) || @src.check(/\s/) ||
25
+ if (type == '_' && @src.pre_match =~ /[[:alpha:]-]\z/) || @src.check(/\s/) ||
26
26
  @tree.type == element || @stack.any? {|el, _| el.type == element}
27
27
  add_text(result)
28
28
  return
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009-2015 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2016 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown which is licensed under the MIT.
7
7
  #++
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009-2015 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2016 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown which is licensed under the MIT.
7
7
  #++
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009-2015 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2016 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown which is licensed under the MIT.
7
7
  #++
@@ -128,8 +128,11 @@ module Kramdown
128
128
  ALD_ID_CHARS = /[\w-]/
129
129
  ALD_ANY_CHARS = /\\\}|[^\}]/
130
130
  ALD_ID_NAME = /\w#{ALD_ID_CHARS}*/
131
- ALD_TYPE_KEY_VALUE_PAIR = /(#{ALD_ID_NAME})=("|')((?:\\\}|\\\2|[^\}\2])*?)\2/
132
- ALD_TYPE_CLASS_NAME = /\.(-?#{ALD_ID_NAME})/
131
+ ALD_CLASS_NAME = /[^\s\.#]+/
132
+ # RM I don't know why the original has an extra `\2` in it, but a test no
133
+ # longer passes with. Removed, and all specs pass
134
+ ALD_TYPE_KEY_VALUE_PAIR = /(#{ALD_ID_NAME})=("|')((?:\\\}|\\\2|[^\}])*?)\2/ # RM
135
+ ALD_TYPE_CLASS_NAME = /\.(#{ALD_CLASS_NAME})/
133
136
  ALD_TYPE_ID_NAME = /#([A-Za-z][\w:-]*)/
134
137
  ALD_TYPE_ID_OR_CLASS = /#{ALD_TYPE_ID_NAME}|#{ALD_TYPE_CLASS_NAME}/
135
138
  ALD_TYPE_ID_OR_CLASS_MULTI = /((?:#{ALD_TYPE_ID_NAME}|#{ALD_TYPE_CLASS_NAME})+)/