motion-kramdown 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +9 -7
  3. data/lib/kramdown.rb +1 -1
  4. data/lib/kramdown/compatibility.rb +1 -1
  5. data/lib/kramdown/converter.rb +1 -1
  6. data/lib/kramdown/converter/base.rb +2 -1
  7. data/lib/kramdown/converter/html.rb +10 -5
  8. data/lib/kramdown/converter/kramdown.rb +13 -7
  9. data/lib/kramdown/converter/latex.rb +2 -1
  10. data/lib/kramdown/converter/math_engine/itex2mml.rb +1 -1
  11. data/lib/kramdown/converter/math_engine/mathjax.rb +18 -3
  12. data/lib/kramdown/converter/math_engine/ritex.rb +1 -1
  13. data/lib/kramdown/converter/pdf.rb +3 -2
  14. data/lib/kramdown/converter/remove_html_tags.rb +3 -1
  15. data/lib/kramdown/converter/syntax_highlighter.rb +53 -0
  16. data/lib/kramdown/converter/syntax_highlighter/coderay.rb +1 -1
  17. data/lib/kramdown/converter/syntax_highlighter/rouge.rb +2 -2
  18. data/lib/kramdown/converter/toc.rb +2 -2
  19. data/lib/kramdown/document.rb +5 -5
  20. data/lib/kramdown/element.rb +4 -1
  21. data/lib/kramdown/error.rb +1 -1
  22. data/lib/kramdown/options.rb +4 -3
  23. data/lib/kramdown/parser.rb +1 -1
  24. data/lib/kramdown/parser/base.rb +8 -4
  25. data/lib/kramdown/parser/gfm.rb +9 -1
  26. data/lib/kramdown/parser/html.rb +18 -3
  27. data/lib/kramdown/parser/kramdown.rb +8 -5
  28. data/lib/kramdown/parser/kramdown/abbreviation.rb +10 -2
  29. data/lib/kramdown/parser/kramdown/autolink.rb +1 -1
  30. data/lib/kramdown/parser/kramdown/blank_line.rb +1 -1
  31. data/lib/kramdown/parser/kramdown/block_boundary.rb +1 -1
  32. data/lib/kramdown/parser/kramdown/blockquote.rb +1 -1
  33. data/lib/kramdown/parser/kramdown/codeblock.rb +1 -1
  34. data/lib/kramdown/parser/kramdown/codespan.rb +1 -1
  35. data/lib/kramdown/parser/kramdown/emphasis.rb +2 -2
  36. data/lib/kramdown/parser/kramdown/eob.rb +1 -1
  37. data/lib/kramdown/parser/kramdown/escaped_chars.rb +1 -1
  38. data/lib/kramdown/parser/kramdown/extensions.rb +8 -7
  39. data/lib/kramdown/parser/kramdown/footnote.rb +12 -4
  40. data/lib/kramdown/parser/kramdown/header.rb +1 -1
  41. data/lib/kramdown/parser/kramdown/horizontal_rule.rb +1 -1
  42. data/lib/kramdown/parser/kramdown/html.rb +7 -4
  43. data/lib/kramdown/parser/kramdown/html_entity.rb +1 -1
  44. data/lib/kramdown/parser/kramdown/line_break.rb +1 -1
  45. data/lib/kramdown/parser/kramdown/link.rb +8 -5
  46. data/lib/kramdown/parser/kramdown/list.rb +17 -5
  47. data/lib/kramdown/parser/kramdown/math.rb +3 -3
  48. data/lib/kramdown/parser/kramdown/paragraph.rb +3 -3
  49. data/lib/kramdown/parser/kramdown/smart_quotes.rb +1 -1
  50. data/lib/kramdown/parser/kramdown/table.rb +1 -1
  51. data/lib/kramdown/parser/kramdown/typographic_symbol.rb +1 -1
  52. data/lib/kramdown/parser/markdown.rb +2 -2
  53. data/lib/kramdown/utils.rb +1 -1
  54. data/lib/kramdown/utils/configurable.rb +1 -1
  55. data/lib/kramdown/utils/entities.rb +1 -1
  56. data/lib/kramdown/utils/html.rb +3 -1
  57. data/lib/kramdown/utils/ordered_hash.rb +1 -1
  58. data/lib/kramdown/utils/string_scanner.rb +8 -0
  59. data/lib/kramdown/utils/unidecoder.rb +1 -1
  60. data/lib/kramdown/version.rb +2 -2
  61. data/lib/rubymotion/version.rb +1 -1
  62. data/spec/bench_mark.rb +43 -30
  63. data/spec/document_tree.rb +12 -2
  64. data/spec/gfm_to_html.rb +4 -1
  65. data/spec/html_to_html.rb +27 -9
  66. data/spec/html_to_kramdown_to_html.rb +4 -1
  67. data/spec/kramdown_to_xxx.rb +3 -1
  68. data/spec/text_to_kramdown_to_html.rb +4 -0
  69. data/spec/text_to_latex.rb +1 -1
  70. metadata +5 -4
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009-2014 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2015 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown which is licensed under the MIT.
7
7
  #++
@@ -37,6 +37,9 @@ module Kramdown
37
37
  # :abbrev_defs:: This key may be used to store the mapping of abbreviation to abbreviation
38
38
  # definition.
39
39
  #
40
+ # :abbrev_attr:: This key may be used to store the mapping of abbreviation to abbreviation
41
+ # attributes.
42
+ #
40
43
  # :options:: This key may be used to store options that were set during parsing of the document.
41
44
  #
42
45
  #
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009-2014 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2015 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-2014 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2015 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown which is licensed under the MIT.
7
7
  #++
@@ -418,7 +418,8 @@ specified levels are used for the table of contents.
418
418
  Default: 1..6
419
419
  Used by: HTML/Latex converter
420
420
  EOF
421
- if String === val
421
+ case val
422
+ when String
422
423
  if val =~ /^(\d)\.\.(\d)$/
423
424
  val = Range.new($1.to_i, $2.to_i).to_a
424
425
  elsif val =~ /^\d(?:,\d)*$/
@@ -426,7 +427,7 @@ EOF
426
427
  else
427
428
  raise Kramdown::Error, "Invalid syntax for option toc_levels"
428
429
  end
429
- elsif Array === val
430
+ when Array, Range
430
431
  val = val.map {|s| s.to_i}.uniq
431
432
  else
432
433
  raise Kramdown::Error, "Invalid type #{val.class} for option toc_levels"
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009-2014 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2015 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,13 +1,14 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009-2014 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2015 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/utils/string_scanner'
10
+ # RM require 'kramdown/utils'
11
+ # RM require 'kramdown/parser'
11
12
 
12
13
  module Kramdown
13
14
 
@@ -51,7 +52,8 @@ module Kramdown
51
52
  def initialize(source, options)
52
53
  @source = source
53
54
  @options = Kramdown::Options.merge(options)
54
- @root = Element.new(:root, nil, nil, :encoding => (source.encoding rescue nil), :location => 1)
55
+ @root = Element.new(:root, nil, nil, :encoding => (source.encoding rescue nil), :location => 1,
56
+ :options => {}, :abbrev_defs => {}, :abbrev_attr => {})
55
57
  @warnings = []
56
58
  @text_type = :text
57
59
  end
@@ -88,7 +90,9 @@ module Kramdown
88
90
  # +\n+ and makes sure +source+ ends with a new line character).
89
91
  def adapt_source(source)
90
92
  if source.respond_to?(:encode)
91
- raise "The encoding of the source text is not valid!" if !source.valid_encoding?
93
+ if !source.valid_encoding?
94
+ raise "The source text contains invalid characters for the used encoding #{source.encoding}"
95
+ end
92
96
  source = source.encode('UTF-8')
93
97
  end
94
98
  source.gsub(/\r\n?/, "\n").chomp + "\n"
@@ -1,6 +1,14 @@
1
1
  # -*- coding: utf-8 -*-
2
+ #
3
+ #--
4
+ # Copyright (C) 2009-2015 Thomas Leitner <t_leitner@gmx.at>
5
+ #
6
+ # This file is part of kramdown which is licensed under the MIT.
7
+ #++
8
+ #
2
9
 
3
- # RM require 'kramdown/parser/kramdown'
10
+
11
+ # RM require 'kramdown/parser'
4
12
 
5
13
  module Kramdown
6
14
  module Parser
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009-2014 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2015 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown which is licensed under the MIT.
7
7
  #++
@@ -10,6 +10,7 @@
10
10
  # RM require 'rexml/parsers/baseparser'
11
11
  # RM require 'strscan'
12
12
  # RM require 'kramdown/utils'
13
+ # RM require 'kramdown/parser'
13
14
 
14
15
  module Kramdown
15
16
 
@@ -78,8 +79,7 @@ module Kramdown
78
79
  def handle_html_start_tag(line = nil) # :yields: el, closed, handle_body
79
80
  name = @src[1].downcase
80
81
  closed = !@src[4].nil?
81
- attrs = Utils::OrderedHash.new
82
- @src[2].scan(HTML_ATTRIBUTE_RE).each {|attr,sep,val| attrs[attr.downcase] = val || ""}
82
+ attrs = parse_html_attributes(@src[2], line)
83
83
 
84
84
  el = Element.new(:html_element, name, attrs, :category => :block)
85
85
  el.options[:location] = line if line
@@ -97,6 +97,21 @@ module Kramdown
97
97
  end
98
98
  end
99
99
 
100
+ # Parses the given string for HTML attributes and returns the resulting hash.
101
+ #
102
+ # If the optional +line+ parameter is supplied, it is used in warning messages.
103
+ def parse_html_attributes(str, line = nil)
104
+ attrs = Utils::OrderedHash.new
105
+ str.scan(HTML_ATTRIBUTE_RE).each do |attr, sep, val|
106
+ attr.downcase!
107
+ if attrs.has_key?(attr)
108
+ warning("Duplicate HTML attribute '#{attr}' on line #{line || '?'} - overwriting previous one")
109
+ end
110
+ attrs[attr] = val || ""
111
+ end
112
+ attrs
113
+ end
114
+
100
115
  # Handle the raw HTML tag at the current position.
101
116
  def handle_raw_html_tag(name)
102
117
  curpos = @src.pos
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009-2014 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2015 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown which is licensed under the MIT.
7
7
  #++
@@ -9,6 +9,7 @@
9
9
 
10
10
  # RM require 'strscan'
11
11
  # RM require 'stringio'
12
+ # RM require 'kramdown/parser'
12
13
 
13
14
  #TODO: use [[:alpha:]] in all regexp to allow parsing of international values in 1.9.1
14
15
  #NOTE: use @src.pre_match only before other check/match?/... operations, otherwise the content is changed
@@ -66,7 +67,6 @@ module Kramdown
66
67
 
67
68
  reset_env
68
69
 
69
- @root.options[:abbrev_defs] = {}
70
70
  @alds = {}
71
71
  @footnotes = {}
72
72
  @link_defs = {}
@@ -88,6 +88,7 @@ module Kramdown
88
88
  configure_parser
89
89
  parse_blocks(@root, adapt_source(source))
90
90
  update_tree(@root)
91
+ correct_abbreviations_attributes
91
92
  replace_abbreviations(@root)
92
93
  @footnotes.each {|name,data| update_tree(data[:content])}
93
94
  end
@@ -134,7 +135,6 @@ module Kramdown
134
135
 
135
136
  status = catch(:stop_block_parsing) do
136
137
  while !@src.eos?
137
- block_ial_set = @block_ial
138
138
  @block_parsers.any? do |name|
139
139
  if @src.check(@parsers[name].start_re)
140
140
  send(@parsers[name].method)
@@ -145,7 +145,6 @@ module Kramdown
145
145
  warning('Warning: this should not occur - no block parser handled the line')
146
146
  add_text(@src.scan(/.*\n/))
147
147
  end
148
- @block_ial = nil if block_ial_set
149
148
  end
150
149
  end
151
150
 
@@ -165,6 +164,7 @@ module Kramdown
165
164
  parse_spans(child)
166
165
  child.children
167
166
  elsif child.type == :eob
167
+ update_attr_with_ial(child.attr, child.options[:ial]) if child.options[:ial]
168
168
  []
169
169
  elsif child.type == :blank
170
170
  if last_blank
@@ -290,7 +290,10 @@ module Kramdown
290
290
  # exists. This method should always be used for creating a block-level element!
291
291
  def new_block_el(*args)
292
292
  el = Element.new(*args)
293
- el.options[:ial] = @block_ial if @block_ial && el.type != :blank && el.type != :eob
293
+ if @block_ial
294
+ el.options[:ial] = @block_ial
295
+ @block_ial = nil
296
+ end
294
297
  el
295
298
  end
296
299
 
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009-2014 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2015 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown which is licensed under the MIT.
7
7
  #++
@@ -20,12 +20,20 @@ module Kramdown
20
20
  abbrev_id, abbrev_text = @src[1], @src[2]
21
21
  abbrev_text.strip!
22
22
  warning("Duplicate abbreviation ID '#{abbrev_id}' on line #{start_line_number} - overwriting") if @root.options[:abbrev_defs][abbrev_id]
23
+ @tree.children << new_block_el(:eob, :abbrev_def)
23
24
  @root.options[:abbrev_defs][abbrev_id] = abbrev_text
24
- @tree.children << Element.new(:eob, :abbrev_def)
25
+ @root.options[:abbrev_attr][abbrev_id] = @tree.children.last
25
26
  true
26
27
  end
27
28
  define_parser(:abbrev_definition, ABBREV_DEFINITION_START)
28
29
 
30
+ # Correct abbreviation attributes.
31
+ def correct_abbreviations_attributes
32
+ @root.options[:abbrev_attr].keys.each do |k|
33
+ @root.options[:abbrev_attr][k] = @root.options[:abbrev_attr][k].attr
34
+ end
35
+ end
36
+
29
37
  # Replace the abbreviation text with elements.
30
38
  def replace_abbreviations(el, regexps = nil)
31
39
  return if @root.options[:abbrev_defs].empty?
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009-2014 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2015 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-2014 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2015 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-2014 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2015 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-2014 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2015 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-2014 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2015 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-2014 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2015 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-2014 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2015 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(/[[:alnum:]]/)) || @src.check(/\s/) ||
25
+ if (type == '_' && @src.pre_match =~ /[[:alnum:]]\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-2014 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2015 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-2014 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2015 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-2014 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2015 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown which is licensed under the MIT.
7
7
  #++
@@ -117,7 +117,7 @@ module Kramdown
117
117
  end.each do |k,v|
118
118
  warning("Unknown kramdown option '#{k}'")
119
119
  end
120
- @tree.children << Element.new(:eob, :extension) if type == :block
120
+ @tree.children << new_block_el(:eob, :extension) if type == :block
121
121
  true
122
122
  else
123
123
  false
@@ -129,7 +129,7 @@ module Kramdown
129
129
  ALD_ANY_CHARS = /\\\}|[^\}]/
130
130
  ALD_ID_NAME = /\w#{ALD_ID_CHARS}*/
131
131
  ALD_TYPE_KEY_VALUE_PAIR = /(#{ALD_ID_NAME})=("|')((?:\\\}|\\\2|[^\}\2])*?)\2/
132
- ALD_TYPE_CLASS_NAME = /\.(#{ALD_ID_NAME})/
132
+ ALD_TYPE_CLASS_NAME = /\.(-?#{ALD_ID_NAME})/
133
133
  ALD_TYPE_ID_NAME = /#([A-Za-z][\w:-]*)/
134
134
  ALD_TYPE_ID_OR_CLASS = /#{ALD_TYPE_ID_NAME}|#{ALD_TYPE_CLASS_NAME}/
135
135
  ALD_TYPE_ID_OR_CLASS_MULTI = /((?:#{ALD_TYPE_ID_NAME}|#{ALD_TYPE_CLASS_NAME})+)/
@@ -152,16 +152,17 @@ module Kramdown
152
152
  def parse_block_extensions
153
153
  if @src.scan(ALD_START)
154
154
  parse_attribute_list(@src[2], @alds[@src[1]] ||= Utils::OrderedHash.new)
155
- @tree.children << Element.new(:eob, :ald)
155
+ @tree.children << new_block_el(:eob, :ald)
156
156
  true
157
157
  elsif @src.check(EXT_BLOCK_START)
158
158
  parse_extension_start_tag(:block)
159
159
  elsif @src.scan(IAL_BLOCK_START)
160
- if @tree.children.last && @tree.children.last.type != :blank && @tree.children.last.type != :eob
160
+ if @tree.children.last && @tree.children.last.type != :blank &&
161
+ (@tree.children.last.type != :eob || [:link_def, :abbrev_def, :footnote_def].include?(@tree.children.last.value))
161
162
  parse_attribute_list(@src[1], @tree.children.last.options[:ial] ||= Utils::OrderedHash.new)
162
- @tree.children << Element.new(:eob, :ial) unless @src.check(IAL_BLOCK_START)
163
+ @tree.children << new_block_el(:eob, :ial) unless @src.check(IAL_BLOCK_START)
163
164
  else
164
- parse_attribute_list(@src[1], @block_ial = Utils::OrderedHash.new)
165
+ parse_attribute_list(@src[1], @block_ial ||= Utils::OrderedHash.new)
165
166
  end
166
167
  true
167
168
  else
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  #--
4
- # Copyright (C) 2009-2014 Thomas Leitner <t_leitner@gmx.at>
4
+ # Copyright (C) 2009-2015 Thomas Leitner <t_leitner@gmx.at>
5
5
  #
6
6
  # This file is part of kramdown which is licensed under the MIT.
7
7
  #++
@@ -25,8 +25,9 @@ module Kramdown
25
25
  el = Element.new(:footnote_def, nil, nil, :location => start_line_number)
26
26
  parse_blocks(el, @src[2].gsub(INDENT, ''))
27
27
  warning("Duplicate footnote name '#{@src[1]}' on line #{start_line_number} - overwriting") if @footnotes[@src[1]]
28
+ @tree.children << new_block_el(:eob, :footnote_def)
28
29
  (@footnotes[@src[1]] = {})[:content] = el
29
- @tree.children << Element.new(:eob, :footnote_def)
30
+ @footnotes[@src[1]][:eob] = @tree.children.last
30
31
  true
31
32
  end
32
33
  define_parser(:footnote_definition, FOOTNOTE_DEFINITION_START)
@@ -40,9 +41,15 @@ module Kramdown
40
41
  @src.pos += @src.matched_size
41
42
  fn_def = @footnotes[@src[1]]
42
43
  if fn_def
44
+ if fn_def[:eob]
45
+ update_attr_with_ial(fn_def[:eob].attr, fn_def[:eob].options[:ial] || {})
46
+ fn_def[:attr] = fn_def[:eob].attr
47
+ fn_def[:options] = fn_def[:eob].options
48
+ fn_def.delete(:eob)
49
+ end
43
50
  fn_def[:marker] ||= []
44
- fn_def[:marker].push(Element.new(:footnote, fn_def[:content], nil, :name => @src[1], :location => start_line_number))
45
- fn_def[:stack] = [@stack.map {|s| s.first}, @tree, fn_def[:marker]].flatten.compact
51
+ fn_def[:marker].push(Element.new(:footnote, fn_def[:content], fn_def[:attr],
52
+ fn_def[:options].merge(:name => @src[1], :location => start_line_number)))
46
53
  @tree.children << fn_def[:marker].last
47
54
  else
48
55
  warning("Footnote definition for '#{@src[1]}' not found on line #{start_line_number}")
@@ -54,3 +61,4 @@ module Kramdown
54
61
  end
55
62
  end
56
63
  end
64
+