mirror of
https://github.com/ralsina/tartrazine.git
synced 2024-11-10 05:22:23 +00:00
Use IO for output
This commit is contained in:
parent
ae03e4612e
commit
bb952a44b8
@ -11,10 +11,9 @@ 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])
|
||||
@ -24,21 +23,6 @@ module Tartrazine
|
||||
end
|
||||
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)
|
||||
|
@ -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 << "<!DOCTYPE html><html><head><style>"
|
||||
outp << style_defs
|
||||
outp << "</style></head><body>"
|
||||
outp << text
|
||||
outp << "</body></html>"
|
||||
end
|
||||
output
|
||||
{output.to_s, "</body></html>"}
|
||||
end
|
||||
|
||||
private def line_label(i : Int32) : String
|
||||
@ -61,11 +58,9 @@ module Tartrazine
|
||||
"<span #{line_id} #{line_class} style=\"user-select: none;\">#{line_label} </span>"
|
||||
end
|
||||
|
||||
def format_text(text : String, lexer : Lexer) : String
|
||||
# lines = lexer.group_tokens_in_lines(lexer.tokenize(text))
|
||||
def format_text(text : String, lexer : Lexer, outp : IO) : Nil
|
||||
tokenizer = Tokenizer.new(lexer, text)
|
||||
i = 0
|
||||
output = String.build do |outp|
|
||||
if surrounding_pre?
|
||||
pre_style = wrap_long_lines? ? "style=\"white-space: pre-wrap; word-break: break-word;\"" : ""
|
||||
outp << "<pre class=\"#{get_css_class("Background")}\" #{pre_style}>"
|
||||
@ -81,8 +76,6 @@ module Tartrazine
|
||||
end
|
||||
outp << "</code></pre>"
|
||||
end
|
||||
output
|
||||
end
|
||||
|
||||
# ameba:disable Metrics/CyclomaticComplexity
|
||||
def style_defs : String
|
||||
|
@ -4,8 +4,9 @@ module Tartrazine
|
||||
class Json < Formatter
|
||||
property name = "json"
|
||||
|
||||
def format(text : String, lexer : Lexer, _theme : Theme) : String
|
||||
lexer.tokenize(text).to_json
|
||||
def format(text : String, lexer : Lexer, outp : IO) : Nil
|
||||
tokenizer = Tokenizer.new(lexer, text)
|
||||
outp << Tartrazine::Lexer.collapse_tokens(tokenizer.to_a).to_json
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -85,13 +85,11 @@ if options["-f"]
|
||||
lexer = Tartrazine.lexer(name: options["-l"].as(String), filename: options["FILE"].as(String))
|
||||
|
||||
input = File.open(options["FILE"].as(String)).gets_to_end
|
||||
output = formatter.format(input, lexer)
|
||||
|
||||
if options["-o"].nil?
|
||||
puts output
|
||||
outf = STDOUT
|
||||
else
|
||||
File.open(options["-o"].as(String), "w") do |outf|
|
||||
outf << output
|
||||
end
|
||||
outf = File.open(options["-o"].as(String), "w")
|
||||
end
|
||||
formatter.format(input, lexer, outf)
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user