lib/makeup/syntax_highlighter.rb in makeup-0.3.0 vs lib/makeup/syntax_highlighter.rb in makeup-0.4.0

- old
+ new

@@ -22,10 +22,11 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. #++ require "pygments" require "htmlentities" +require "linguist" module Makeup CodeBlock = Struct.new(:lexer, :code) class SyntaxHighlighter @@ -34,61 +35,31 @@ end def highlight(path, code, options = {}) options[:lexer] ||= lexer(path, code) lexer = Pygments::Lexer.find(options[:lexer]) - CodeBlock.new(lexer && lexer.aliases.first, - Pygments.highlight(code, highlight_options(options))) + code = lexer.nil? ? code : Pygments.highlight(code, highlight_options(options)) + CodeBlock.new(lexer && lexer.aliases.first, code) rescue MentosError => e # "MentosError" is what Pyments.rb raises when an unknown lexer is # attempted used CodeBlock.new(nil, @entities.encode(code)) end - def lexer(path, code = nil) - self.class.lexer(path.split(".").pop, code) + def lexer(path, code = nil, mode = nil) + self.class.lexer(path, code, mode) end - def self.lexer(suffix, code = nil) - return @@lexer_aliases[suffix] if @@lexer_aliases[suffix] - lexer = Pygments::Lexer.find_by_extname(".#{suffix}") - return lexer.aliases.first || lexer.name if lexer - shebang_language(shebang(code)) || suffix + def self.lexer(path, code = nil, mode = nil) + lexer = Linguist::Language.detect(path, code, mode) + lexer && (lexer.aliases.first || lexer.name) end - def self.shebang(code) - first_line = (code || "").split("\n")[0] - first_line =~ /^#!/ ? first_line : nil - end - - def self.shebang_language(shebang) - shebang = @@lexer_shebangs.find { |s| (shebang || "") =~ s[:pattern] } - shebang && shebang[:lexer] - end - - def self.add_lexer_alias(extension, lexer) - @@lexer_aliases ||= {} - @@lexer_aliases[extension] = lexer - end - - def self.add_lexer_shebang(pattern, lexer) - @@lexer_shebangs ||= [] - @@lexer_shebangs << { :pattern => pattern, :lexer => lexer } - end - private def highlight_options(options = {}) options[:options] ||= {} options[:options][:nowrap] = true options[:options][:encoding] ||= "utf-8" options end end end - -Makeup::SyntaxHighlighter.add_lexer_alias("txt", "text") -Makeup::SyntaxHighlighter.add_lexer_alias("ru", "rb") -Makeup::SyntaxHighlighter.add_lexer_alias("Rakefile", "rb") -Makeup::SyntaxHighlighter.add_lexer_alias("Gemfile", "rb") -Makeup::SyntaxHighlighter.add_lexer_alias("Gemfile.lock", "yaml") - -Makeup::SyntaxHighlighter.add_lexer_shebang(/\bruby\b/, "rb")