module Rouge module Lexers class Diff < RegexLexer title 'diff' desc 'Lexes unified diffs or patches' tag 'diff' aliases 'patch', 'udiff' filenames '*.diff', '*.patch' mimetypes 'text/x-diff', 'text/x-patch' def self.analyze_text(text) return 1 if text.start_with?('Index: ') return 1 if text.start_with?('diff ') return 0.9 if text.start_with?('--- ') end state :root do rule(/^ .*\n/, Text) rule(/^---\n/, Text) rule(/^\+.*\n/, Generic::Inserted) rule(/^-+.*\n/, Generic::Deleted) rule(/^!.*\n/, Generic::Strong) rule(/^@.*\n/, Generic::Subheading) rule(/^([Ii]ndex|diff).*\n/, Generic::Heading) rule(/^=.*\n/, Generic::Heading) rule(/.*\n/, Text) end end end end