X-Git-Url: http://nitlanguage.org diff --git a/lib/markdown/markdown.nit b/lib/markdown/markdown.nit index ef247be..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 @@ -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. @@ -1937,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 @@ -2329,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