summaryrefslogtreecommitdiffstats
path: root/vendor/plugins/coderay-0.9.0/lib/coderay/scanners/diff.rb
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2009-11-07 09:08:13 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2009-11-07 09:08:13 +0000
commitbe41f7f473070d00302d1a485819248f3b114fc4 (patch)
treed51d116cc1e3b06f3ea67768470f7728af5e4952 /vendor/plugins/coderay-0.9.0/lib/coderay/scanners/diff.rb
parent3b9d8c2a72f64b451db700e2d3dba6bb46e070af (diff)
downloadredmine-be41f7f473070d00302d1a485819248f3b114fc4.tar.gz
redmine-be41f7f473070d00302d1a485819248f3b114fc4.zip
Upgrade Coderay to 0.9.0.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3014 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'vendor/plugins/coderay-0.9.0/lib/coderay/scanners/diff.rb')
-rw-r--r--vendor/plugins/coderay-0.9.0/lib/coderay/scanners/diff.rb105
1 files changed, 105 insertions, 0 deletions
diff --git a/vendor/plugins/coderay-0.9.0/lib/coderay/scanners/diff.rb b/vendor/plugins/coderay-0.9.0/lib/coderay/scanners/diff.rb
new file mode 100644
index 000000000..bfb400be3
--- /dev/null
+++ b/vendor/plugins/coderay-0.9.0/lib/coderay/scanners/diff.rb
@@ -0,0 +1,105 @@
+module CodeRay
+module Scanners
+
+ class Diff < Scanner
+
+ register_for :diff
+ title 'diff output'
+
+ def scan_tokens tokens, options
+
+ line_kind = nil
+ state = :initial
+
+ until eos?
+ kind = match = nil
+
+ if match = scan(/\n/)
+ if line_kind
+ tokens << [:end_line, line_kind]
+ line_kind = nil
+ end
+ tokens << [match, :space]
+ next
+ end
+
+ case state
+
+ when :initial
+ if match = scan(/--- |\+\+\+ |=+|_+/)
+ tokens << [:begin_line, line_kind = :head]
+ tokens << [match, :head]
+ next unless match = scan(/.+/)
+ kind = :plain
+ elsif match = scan(/Index: |Property changes on: /)
+ tokens << [:begin_line, line_kind = :head]
+ tokens << [match, :head]
+ next unless match = scan(/.+/)
+ kind = :plain
+ elsif match = scan(/Added: /)
+ tokens << [:begin_line, line_kind = :head]
+ tokens << [match, :head]
+ next unless match = scan(/.+/)
+ kind = :plain
+ state = :added
+ elsif match = scan(/\\ /)
+ tokens << [:begin_line, line_kind = :change]
+ tokens << [match, :change]
+ next unless match = scan(/.+/)
+ kind = :plain
+ elsif scan(/(@@)((?>[^@\n]*))(@@)/)
+ tokens << [:begin_line, line_kind = :change]
+ tokens << [self[1], :change]
+ tokens << [self[2], :plain]
+ tokens << [self[3], :change]
+ next unless match = scan(/.+/)
+ kind = :plain
+ elsif match = scan(/\+/)
+ tokens << [:begin_line, line_kind = :insert]
+ tokens << [match, :insert]
+ next unless match = scan(/.+/)
+ kind = :plain
+ elsif match = scan(/-/)
+ tokens << [:begin_line, line_kind = :delete]
+ tokens << [match, :delete]
+ next unless match = scan(/.+/)
+ kind = :plain
+ elsif scan(/ .*/)
+ kind = :comment
+ elsif scan(/.+/)
+ tokens << [:begin_line, line_kind = :head]
+ kind = :plain
+ else
+ raise_inspect 'else case rached'
+ end
+
+ when :added
+ if match = scan(/ \+/)
+ tokens << [:begin_line, line_kind = :insert]
+ tokens << [match, :insert]
+ next unless match = scan(/.+/)
+ kind = :plain
+ else
+ state = :initial
+ next
+ end
+ end
+
+ match ||= matched
+ if $DEBUG and not kind
+ raise_inspect 'Error token %p in line %d' %
+ [[match, kind], line], tokens
+ end
+ raise_inspect 'Empty token', tokens unless match
+
+ tokens << [match, kind]
+ end
+
+ tokens << [:end_line, line_kind] if line_kind
+ tokens
+ end
+
+ end
+
+end
+end