lib/kramdown/parser/kramdown/paragraph.rb in kramdown-0.10.0 vs lib/kramdown/parser/kramdown/paragraph.rb in kramdown-0.11.0
- old
+ new
@@ -18,23 +18,34 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#++
#
+require 'kramdown/parser/kramdown/blank_line'
+require 'kramdown/parser/kramdown/attribute_list'
+require 'kramdown/parser/kramdown/eob'
+require 'kramdown/parser/kramdown/list'
+require 'kramdown/parser/kramdown/html'
+
module Kramdown
module Parser
class Kramdown
+ LAZY_END_HTML_SPAN_ELEMENTS = HTML_SPAN_ELEMENTS + %w{script}
+ LAZY_END_HTML_START = /<(?>(?!(?:#{LAZY_END_HTML_SPAN_ELEMENTS.join('|')})\b)#{REXML::Parsers::BaseParser::UNAME_STR})\s*(?>\s+#{REXML::Parsers::BaseParser::UNAME_STR}\s*=\s*(["']).*?\1)*\s*\/?>/m
+ LAZY_END_HTML_STOP = /<\/(?!(?:#{LAZY_END_HTML_SPAN_ELEMENTS.join('|')})\b)#{REXML::Parsers::BaseParser::UNAME_STR}\s*>/m
+
PARAGRAPH_START = /^#{OPT_SPACE}[^ \t].*?\n/
+ PARAGRAPH_MATCH = /(?:^.*\n)+?(?=#{BLANK_LINE}|#{IAL_BLOCK_START}|#{EOB_MARKER}|#{DEFINITION_LIST_START}|^#{OPT_SPACE}#{LAZY_END_HTML_STOP}|^#{OPT_SPACE}#{LAZY_END_HTML_START}|\Z)/
# Parse the paragraph at the current location.
def parse_paragraph
- @src.pos += @src.matched_size
+ result = @src.scan(PARAGRAPH_MATCH)
if @tree.children.last && @tree.children.last.type == :p
- @tree.children.last.children.first.value << "\n" << @src.matched.chomp
+ @tree.children.last.children.first.value << "\n" << result.chomp
else
@tree.children << new_block_el(:p)
- add_text(@src.matched.lstrip.chomp, @tree.children.last)
+ @tree.children.last.children << Element.new(@text_type, result.lstrip.chomp)
end
true
end
define_parser(:paragraph, PARAGRAPH_START)