X-Git-Url: http://nitlanguage.org diff --git a/lib/markdown/markdown.nit b/lib/markdown/markdown.nit index 9124ad7..d63f3e4 100644 --- a/lib/markdown/markdown.nit +++ b/lib/markdown/markdown.nit @@ -133,6 +133,14 @@ class MarkdownProcessor # ~~~ var ext_mode = true + # Disable attaching MDLocation to Tokens + # + # Locations are useful for some tools but they may + # cause an important time and space overhead. + # + # Default = `false` + var no_location = false is writable + init do self.emitter = new MarkdownEmitter(self) # Process the mardown `input` string and return the processed output. @@ -168,6 +176,7 @@ class MarkdownProcessor var c = input[i] if c == '\n' then eol = true + else if c == '\r' then else if c == '\t' then var np = pos + (4 - (pos & 3)) while pos < np do @@ -396,11 +405,16 @@ class MarkdownProcessor c2 = ' ' end - var loc = new MDLocation( - current_loc.line_start, - current_loc.column_start + pos, - current_loc.line_start, - current_loc.column_start + pos) + var loc + if no_location then + loc = null + else + loc = new MDLocation( + current_loc.line_start, + current_loc.column_start + pos, + current_loc.line_start, + current_loc.column_start + pos) + end if c == '*' then if c1 == '*' then @@ -417,7 +431,7 @@ class MarkdownProcessor end else if c == '_' then if c1 == '_' then - if c0 != ' ' or c2 != ' 'then + if c0 != ' ' or c2 != ' ' then return new TokenStrongUnderscore(loc, pos, c) else return new TokenEmUnderscore(loc, pos, c) @@ -609,10 +623,12 @@ class MarkdownEmitter end # Append `c` to current buffer. - fun addc(c: Char) do add c.to_s + fun addc(c: Char) do + current_buffer.add c + end # Append a "\n" line break. - fun addn do add "\n" + fun addn do addc '\n' end # A Link Reference. @@ -634,7 +650,7 @@ class LinkRef # Create a link with a title. init with_title(link: String, title: nullable String) do - self.link = link + init(link) self.title = title end end @@ -758,8 +774,11 @@ class HTMLDecorator end redef fun add_code(v, block) do - if block isa BlockFence and block.meta != null then - v.add "
"
+		var meta = block.meta
+		if meta != null then
+			v.add "
"
 		else
 			v.add "
"
 		end
@@ -1233,6 +1252,9 @@ end
 class BlockCode
 	super Block
 
+	# Any string found after fence token.
+	var meta: nullable Text
+
 	# Number of char to skip at the beginning of the line.
 	#
 	# Block code lines start at 4 spaces.
@@ -1259,9 +1281,6 @@ end
 class BlockFence
 	super BlockCode
 
-	# Any string found after fence token.
-	var meta: nullable Text
-
 	# Fence code lines start at 0 spaces.
 	redef var line_start = 0
 end
@@ -1934,7 +1953,7 @@ end
 abstract class Token
 
 	# Location of `self` in the original input.
-	var location: MDLocation
+	var location: nullable MDLocation
 
 	# Position of `self` in input independant from lines.
 	var pos: Int
@@ -2326,18 +2345,11 @@ redef class Text
 			if c == '\\' and pos + 1 < length then
 				pos = escape(out, self[pos + 1], pos)
 			else
-				var end_reached = false
-				for n in nend do
-					if c == n then
-						end_reached = true
-						break
-					end
-				end
-				if end_reached then break
+				for n in nend do if c == n then break label
 				out.add c
 			end
 			pos += 1
-		end
+		end label
 		if pos == length then return -1
 		return pos
 	end