lib/kramdown/parser/kramdown/emphasis.rb in kramdown-2.4.0 vs lib/kramdown/parser/kramdown/emphasis.rb in kramdown-2.5.0

- old
+ new

@@ -20,16 +20,17 @@ result = @src.scan(EMPHASIS_START) element = (result.length == 2 ? :strong : :em) type = result[0..0] - if (type == '_' && @src.pre_match =~ /[[:alpha:]]-?[[:alpha:]]*\z/) || @src.check(/\s/) || + if (type == '_' && @src.pre_match =~ /[[:alpha:]]-?[[:alpha:]]*_*\z/) || @src.check(/\s/) || @tree.type == element || @stack.any? {|el, _| el.type == element } add_text(result) return end + warnings_pos = @warnings.size sub_parse = lambda do |delim, elem| el = Element.new(elem, nil, nil, location: start_line_number) stop_re = /#{Regexp.escape(delim)}/ found = parse_spans(el, stop_re) do (@src.pre_match[-1, 1] !~ /\s/) && @@ -44,12 +45,16 @@ @src.revert_pos(saved_pos) @src.pos += 1 found, el, stop_re = sub_parse.call(type, :em) end if found + # Useful for implementing underlines. + el.options[:char] = type + @src.scan(stop_re) @tree.children << el else + @warnings.slice!(0...warnings_pos) @src.revert_pos(saved_pos) @src.pos += result.length add_text(result) end end