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")