diff --git a/src/formatters/ansi.cr b/src/formatters/ansi.cr index ea86790..c1bea9a 100644 --- a/src/formatters/ansi.cr +++ b/src/formatters/ansi.cr @@ -11,35 +11,19 @@ module Tartrazine "#{i + 1}".rjust(4).ljust(5) end - def format(text : String, lexer : Lexer) : String + def format(text : String, lexer : Lexer, outp : IO) : Nil tokenizer = Tokenizer.new(lexer, text) i = 0 - output = String.build do |outp| - outp << line_label(i) if line_numbers? - tokenizer.each do |token| - outp << colorize(token[:value], token[:type]) - if token[:value].includes?("\n") - i += 1 - outp << line_label(i) if line_numbers? - end + outp << line_label(i) if line_numbers? + tokenizer.each do |token| + outp << colorize(token[:value], token[:type]) + if token[:value].includes?("\n") + i += 1 + outp << line_label(i) if line_numbers? end end - output end - # def format(text : String, lexer : Lexer) : String - # output = String.build do |outp| - # lexer.group_tokens_in_lines(lexer.tokenize(text)).each_with_index do |line, i| - # label = line_numbers? ? "#{i + 1}".rjust(4).ljust(5) : "" - # outp << label - # line.each do |token| - # outp << colorize(token[:value], token[:type]) - # end - # end - # end - # output - # end - def colorize(text : String, token : String) : String style = theme.styles.fetch(token, nil) return text if style.nil? diff --git a/src/formatters/html.cr b/src/formatters/html.cr index 87105d3..3b994d1 100644 --- a/src/formatters/html.cr +++ b/src/formatters/html.cr @@ -34,24 +34,21 @@ module Tartrazine @weight_of_bold : Int32 = 600) end - def format(text : String, lexer : Lexer) : String - text = format_text(text, lexer) - if standalone? - text = wrap_standalone(text) - end - text + def format(text : String, lexer : Lexer, dst : IO) : Nil + pre, post = wrap_standalone + dst << pre if standalone? + format_text(text, lexer, dst) + dst << post if standalone? end # Wrap text into a full HTML document, including the CSS for the theme - def wrap_standalone(text) : String + def wrap_standalone output = String.build do |outp| outp << "
" - outp << text - outp << "" end - output + {output.to_s, "