summaryrefslogtreecommitdiffstats
path: root/vendor/gems/coderay-1.0.0/lib/coderay/scanners/diff.rb
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/gems/coderay-1.0.0/lib/coderay/scanners/diff.rb')
-rw-r--r--vendor/gems/coderay-1.0.0/lib/coderay/scanners/diff.rb201
1 files changed, 0 insertions, 201 deletions
diff --git a/vendor/gems/coderay-1.0.0/lib/coderay/scanners/diff.rb b/vendor/gems/coderay-1.0.0/lib/coderay/scanners/diff.rb
deleted file mode 100644
index fd70016d8..000000000
--- a/vendor/gems/coderay-1.0.0/lib/coderay/scanners/diff.rb
+++ /dev/null
@@ -1,201 +0,0 @@
-module CodeRay
-module Scanners
-
- # Scanner for output of the diff command.
- #
- # Alias: +patch+
- class Diff < Scanner
-
- register_for :diff
- title 'diff output'
-
- DEFAULT_OPTIONS = {
- :highlight_code => true,
- :inline_diff => true,
- }
-
- protected
-
- require 'coderay/helpers/file_type'
-
- def scan_tokens encoder, options
-
- line_kind = nil
- state = :initial
- deleted_lines = 0
- scanners = Hash.new do |h, lang|
- h[lang] = Scanners[lang].new '', :keep_tokens => true, :keep_state => true
- end
- content_scanner = scanners[:plain]
- content_scanner_entry_state = nil
-
- until eos?
-
- if match = scan(/\n/)
- deleted_lines = 0 unless line_kind == :delete
- if line_kind
- encoder.end_line line_kind
- line_kind = nil
- end
- encoder.text_token match, :space
- next
- end
-
- case state
-
- when :initial
- if match = scan(/--- |\+\+\+ |=+|_+/)
- encoder.begin_line line_kind = :head
- encoder.text_token match, :head
- if match = scan(/.*?(?=$|[\t\n\x00]| \(revision)/)
- encoder.text_token match, :filename
- if options[:highlight_code]
- file_type = FileType.fetch(match, :text)
- file_type = :text if file_type == :diff
- content_scanner = scanners[file_type]
- content_scanner_entry_state = nil
- end
- end
- next unless match = scan(/.+/)
- encoder.text_token match, :plain
- elsif match = scan(/Index: |Property changes on: /)
- encoder.begin_line line_kind = :head
- encoder.text_token match, :head
- next unless match = scan(/.+/)
- encoder.text_token match, :plain
- elsif match = scan(/Added: /)
- encoder.begin_line line_kind = :head
- encoder.text_token match, :head
- next unless match = scan(/.+/)
- encoder.text_token match, :plain
- state = :added
- elsif match = scan(/\\ .*/)
- encoder.text_token match, :comment
- elsif match = scan(/@@(?>[^@\n]*)@@/)
- content_scanner.state = :initial unless match?(/\n\+/)
- content_scanner_entry_state = nil
- if check(/\n|$/)
- encoder.begin_line line_kind = :change
- else
- encoder.begin_group :change
- end
- encoder.text_token match[0,2], :change
- encoder.text_token match[2...-2], :plain
- encoder.text_token match[-2,2], :change
- encoder.end_group :change unless line_kind
- next unless match = scan(/.+/)
- if options[:highlight_code]
- content_scanner.tokenize match, :tokens => encoder
- else
- encoder.text_token match, :plain
- end
- next
- elsif match = scan(/\+/)
- encoder.begin_line line_kind = :insert
- encoder.text_token match, :insert
- next unless match = scan(/.+/)
- if options[:highlight_code]
- content_scanner.tokenize match, :tokens => encoder
- else
- encoder.text_token match, :plain
- end
- next
- elsif match = scan(/-/)
- deleted_lines += 1
- encoder.begin_line line_kind = :delete
- encoder.text_token match, :delete
- if options[:inline_diff] && deleted_lines == 1 && check(/(?>.*)\n\+(?>.*)$(?!\n\+)/)
- content_scanner_entry_state = content_scanner.state
- skip(/(.*)\n\+(.*)$/)
- head, deletion, insertion, tail = diff self[1], self[2]
- pre, deleted, post = content_scanner.tokenize [head, deletion, tail], :tokens => Tokens.new
- encoder.tokens pre
- unless deleted.empty?
- encoder.begin_group :eyecatcher
- encoder.tokens deleted
- encoder.end_group :eyecatcher
- end
- encoder.tokens post
- encoder.end_line line_kind
- encoder.text_token "\n", :space
- encoder.begin_line line_kind = :insert
- encoder.text_token '+', :insert
- content_scanner.state = content_scanner_entry_state || :initial
- pre, inserted, post = content_scanner.tokenize [head, insertion, tail], :tokens => Tokens.new
- encoder.tokens pre
- unless inserted.empty?
- encoder.begin_group :eyecatcher
- encoder.tokens inserted
- encoder.end_group :eyecatcher
- end
- encoder.tokens post
- elsif match = scan(/.*/)
- if options[:highlight_code]
- if deleted_lines == 1
- content_scanner_entry_state = content_scanner.state
- end
- content_scanner.tokenize match, :tokens => encoder unless match.empty?
- if !match?(/\n-/)
- if match?(/\n\+/)
- content_scanner.state = content_scanner_entry_state || :initial
- end
- content_scanner_entry_state = nil
- end
- else
- encoder.text_token match, :plain
- end
- end
- next
- elsif match = scan(/ .*/)
- if options[:highlight_code]
- content_scanner.tokenize match, :tokens => encoder
- else
- encoder.text_token match, :plain
- end
- next
- elsif match = scan(/.+/)
- encoder.begin_line line_kind = :comment
- encoder.text_token match, :plain
- else
- raise_inspect 'else case rached'
- end
-
- when :added
- if match = scan(/ \+/)
- encoder.begin_line line_kind = :insert
- encoder.text_token match, :insert
- next unless match = scan(/.+/)
- encoder.text_token match, :plain
- else
- state = :initial
- next
- end
- end
-
- end
-
- encoder.end_line line_kind if line_kind
-
- encoder
- end
-
- private
-
- def diff a, b
- # i will be the index of the leftmost difference from the left.
- i_max = [a.size, b.size].min
- i = 0
- i += 1 while i < i_max && a[i] == b[i]
- # j_min will be the index of the leftmost difference from the right.
- j_min = i - i_max
- # j will be the index of the rightmost difference from the right which
- # does not precede the leftmost one from the left.
- j = -1
- j -= 1 while j >= j_min && a[j] == b[j]
- return a[0...i], a[i..j], b[i..j], (j < -1) ? a[j+1..-1] : ''
- end
-
- end
-
-end
-end