# Transform and emit mardown text starting at `start` and
# until a token with the same type as `token` is found.
# Go until the end of `text` if `token` is null.
fun emit_text_until(text: Text, start: Int, token: nullable Token): Int do
var old_text = current_text
var old_pos = current_pos
current_text = text
current_pos = start
while current_pos < text.length do
if text[current_pos] == '\n' then
current_loc.line_start += 1
current_loc.column_start = -current_pos
end
var mt = token_at(text, current_pos)
if (token != null and not token isa TokenNone) and
(mt.is_same_type(token) or
(token isa TokenEmStar and mt isa TokenStrongStar) or
(token isa TokenEmUnderscore and mt isa TokenStrongUnderscore)) then
return current_pos
end
mt.emit(self)
current_pos += 1
end
current_text = old_text
current_pos = old_pos
return -1
end
lib/markdown/markdown.nit:525,2--551,4