Compare commits

..

No commits in common. "8eb8b8cb48e1fb59e938be2b8ad550778d817fc2" and "2aa8b235ee2d6c510df4c3a59555cc104d8dd234" have entirely different histories.

4 changed files with 11 additions and 15 deletions

View File

@ -12,7 +12,7 @@ module Tartrazine
def format(text : String, lexer : BaseLexer, io : IO) : Nil def format(text : String, lexer : BaseLexer, io : IO) : Nil
tokenizer = lexer.tokenizer(text) tokenizer = lexer.tokenizer(text)
io << Tartrazine::RegexLexer.collapse_tokens(tokenizer.to_a).to_json io << Tartrazine::Lexer.collapse_tokens(tokenizer.to_a).to_json
end end
end end
end end

View File

@ -1,6 +1,5 @@
require "./constants/lexers"
require "./heuristics"
require "baked_file_system" require "baked_file_system"
require "./constants/lexers"
module Tartrazine module Tartrazine
class LexerFiles class LexerFiles
@ -15,14 +14,14 @@ module Tartrazine
return lexer_by_filename(filename) if filename return lexer_by_filename(filename) if filename
return lexer_by_mimetype(mimetype) if mimetype return lexer_by_mimetype(mimetype) if mimetype
RegexLexer.from_xml(LexerFiles.get("/#{LEXERS_BY_NAME["plaintext"]}.xml").gets_to_end) Lexer.from_xml(LexerFiles.get("/#{LEXERS_BY_NAME["plaintext"]}.xml").gets_to_end)
end end
private def self.lexer_by_mimetype(mimetype : String) : BaseLexer private def self.lexer_by_mimetype(mimetype : String) : BaseLexer
lexer_file_name = LEXERS_BY_MIMETYPE.fetch(mimetype, nil) lexer_file_name = LEXERS_BY_MIMETYPE.fetch(mimetype, nil)
raise Exception.new("Unknown mimetype: #{mimetype}") if lexer_file_name.nil? raise Exception.new("Unknown mimetype: #{mimetype}") if lexer_file_name.nil?
RegexLexer.from_xml(LexerFiles.get("/#{lexer_file_name}.xml").gets_to_end) Lexer.from_xml(LexerFiles.get("/#{lexer_file_name}.xml").gets_to_end)
end end
private def self.lexer_by_name(name : String) : BaseLexer private def self.lexer_by_name(name : String) : BaseLexer
@ -30,7 +29,7 @@ module Tartrazine
return create_delegating_lexer(name) if lexer_file_name.nil? && name.includes? "+" return create_delegating_lexer(name) if lexer_file_name.nil? && name.includes? "+"
raise Exception.new("Unknown lexer: #{name}") if lexer_file_name.nil? raise Exception.new("Unknown lexer: #{name}") if lexer_file_name.nil?
RegexLexer.from_xml(LexerFiles.get("/#{lexer_file_name}.xml").gets_to_end) Lexer.from_xml(LexerFiles.get("/#{lexer_file_name}.xml").gets_to_end)
end end
private def self.lexer_by_filename(filename : String) : BaseLexer private def self.lexer_by_filename(filename : String) : BaseLexer
@ -53,7 +52,7 @@ module Tartrazine
end end
end end
RegexLexer.from_xml(LexerFiles.get("/#{lexer_file_name}.xml").gets_to_end) Lexer.from_xml(LexerFiles.get("/#{lexer_file_name}.xml").gets_to_end)
end end
private def self.lexer_by_content(fname : String) : String? private def self.lexer_by_content(fname : String) : String?
@ -153,9 +152,7 @@ module Tartrazine
end end
end end
alias BaseLexer = Lexer abstract class BaseLexer
abstract class Lexer
property config = { property config = {
name: "", name: "",
priority: 0.0, priority: 0.0,
@ -177,7 +174,7 @@ module Tartrazine
# For explanations on what actions and states do # For explanations on what actions and states do
# the Pygments documentation is a good place to start. # the Pygments documentation is a good place to start.
# https://pygments.org/docs/lexerdevelopment/ # https://pygments.org/docs/lexerdevelopment/
class RegexLexer < BaseLexer class Lexer < BaseLexer
# Collapse consecutive tokens of the same type for easier comparison # Collapse consecutive tokens of the same type for easier comparison
# and smaller output # and smaller output
def self.collapse_tokens(tokens : Array(Tartrazine::Token)) : Array(Tartrazine::Token) def self.collapse_tokens(tokens : Array(Tartrazine::Token)) : Array(Tartrazine::Token)
@ -201,7 +198,7 @@ module Tartrazine
end end
def self.from_xml(xml : String) : Lexer def self.from_xml(xml : String) : Lexer
l = RegexLexer.new l = Lexer.new
lexer = XML.parse(xml).first_element_child lexer = XML.parse(xml).first_element_child
if lexer if lexer
config = lexer.children.find { |node| config = lexer.children.find { |node|
@ -266,7 +263,7 @@ module Tartrazine
# #
# This is useful for things like template languages, where # This is useful for things like template languages, where
# you have Jinja + HTML or Jinja + CSS and so on. # you have Jinja + HTML or Jinja + CSS and so on.
class DelegatingLexer < Lexer class DelegatingLexer < BaseLexer
property language_lexer : BaseLexer property language_lexer : BaseLexer
property root_lexer : BaseLexer property root_lexer : BaseLexer

View File

@ -1,5 +1,5 @@
require "docopt" require "docopt"
require "./tartrazine" require "./**"
HELP = <<-HELP HELP = <<-HELP
tartrazine: a syntax highlighting tool tartrazine: a syntax highlighting tool

View File

@ -1,6 +1,5 @@
require "./actions" require "./actions"
require "./formatter" require "./formatter"
require "./formatters/**"
require "./rules" require "./rules"
require "./styles" require "./styles"
require "./tartrazine" require "./tartrazine"