diff_from_delta 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/Guardfile +9 -0
- data/README +13 -0
- data/Rakefile +2 -0
- data/diff_from_delta.gemspec +24 -0
- data/lib/diff_from_delta/version.rb +3 -0
- data/lib/diff_from_delta.rb +54 -0
- data/spec/examples_spec.rb +20 -0
- metadata +97 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
data/README
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
== diff_from_delta
|
2
|
+
|
3
|
+
diff_from_delta converts delta strings produced by diff-match-patch ( http://code.google.com/p/google-diff-match-patch/ ) back to an array of diffs.
|
4
|
+
|
5
|
+
Usage:
|
6
|
+
|
7
|
+
To get the compiled string..
|
8
|
+
|
9
|
+
DiffFromDelta::compile_diff_from_delta(original_text, delta_string)
|
10
|
+
|
11
|
+
For the actual diff array..
|
12
|
+
|
13
|
+
DiffFromDelta::diff_from_delta(original_text, delta_string)
|
data/Rakefile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "diff_from_delta/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "diff_from_delta"
|
7
|
+
s.version = DiffFromDelta::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Henry Turner"]
|
10
|
+
#s.email = ["TODO: Write your email address"]
|
11
|
+
#s.homepage = ""
|
12
|
+
s.summary = %q{A ruby helper to decode diff deltas produced by diff-match-patch}
|
13
|
+
s.description = %q{A conversion of the python version to ruby from http://code.google.com/p/google-diff-match-patch/ and added tests.}
|
14
|
+
|
15
|
+
s.add_development_dependency "rspec"
|
16
|
+
s.add_development_dependency "guard-rspec"
|
17
|
+
|
18
|
+
s.rubyforge_project = "diff_from_delta"
|
19
|
+
|
20
|
+
s.files = `git ls-files`.split("\n")
|
21
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
22
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
23
|
+
s.require_paths = ["lib"]
|
24
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module DiffFromDelta
|
2
|
+
|
3
|
+
def self.compile_diff_from_delta(text1, delta)
|
4
|
+
diff_from_delta(text1, delta).delete_if{|d| d[0]==-1 }.map{|d| d[1] }.join("")
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.diff_from_delta(text1, delta)
|
8
|
+
diff_delete = -1
|
9
|
+
diff_insert = 1
|
10
|
+
diff_equal = 0
|
11
|
+
diffs = []
|
12
|
+
pointer = 0 # Cursor in text1
|
13
|
+
tokens = delta.split("\t")
|
14
|
+
for token in tokens
|
15
|
+
if token == ""
|
16
|
+
# Blank tokens are ok (from a trailing \t).
|
17
|
+
next
|
18
|
+
end
|
19
|
+
# Each token begins with a one character parameter which specifies the
|
20
|
+
# operation of this token (delete, insert, equality).
|
21
|
+
param = token[1..-1]
|
22
|
+
if token[0..0] == "+"
|
23
|
+
param = URI.unescape(param)
|
24
|
+
diffs << [diff_insert, param]
|
25
|
+
elsif token[0..0] == "-" || token[0..0] == "="
|
26
|
+
begin
|
27
|
+
n = param.to_i
|
28
|
+
rescue
|
29
|
+
raise("Invalid number in diff_fromDelta: " + param)
|
30
|
+
end
|
31
|
+
if n < 0
|
32
|
+
raise("Negative number in diff_fromDelta: " + param)
|
33
|
+
end
|
34
|
+
#text = text1[pointer : pointer + n]
|
35
|
+
text = text1[pointer..pointer+(n-1)]
|
36
|
+
pointer += n
|
37
|
+
if token[0..0] == "="
|
38
|
+
diffs << [diff_equal, text]
|
39
|
+
else
|
40
|
+
diffs << [diff_delete, text]
|
41
|
+
end
|
42
|
+
else
|
43
|
+
# Anything else is an error.
|
44
|
+
raise("Invalid diff operation in diff_fromDelta: #{token[0..0]}")
|
45
|
+
end
|
46
|
+
end # end for token in tokens
|
47
|
+
if pointer != text1.length
|
48
|
+
raise("Delta length (#{pointer}) does not equal source text length (#{text1.length}).")
|
49
|
+
end
|
50
|
+
return diffs
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "../lib/diff_from_delta")
|
2
|
+
|
3
|
+
describe "#diff_from_delta" do
|
4
|
+
|
5
|
+
initial_text = "The quick\nbrown fox\njumped over\nthe lazy dog"
|
6
|
+
|
7
|
+
examples = [
|
8
|
+
{:delta => "=4\t-5\t+slow\t=35", :result => "The slow\nbrown fox\njumped over\nthe lazy dog"},
|
9
|
+
{:delta => "=35\t-5\t=4", :result => "The quick\nbrown fox\njumped over\nthe dog"},
|
10
|
+
{:delta => "=4\t-5\t+daft\t=35\t+%20twice", :result => "The daft\nbrown fox\njumped over\nthe lazy dog twice"},
|
11
|
+
{:delta => "-44\t+Barnacles", :result => "Barnacles"},
|
12
|
+
]
|
13
|
+
|
14
|
+
examples.each do |example|
|
15
|
+
it "should process the delta #{example[:delta]} correctly" do
|
16
|
+
DiffFromDelta::compile_diff_from_delta(initial_text, example[:delta]).should == example[:result]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
metadata
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: diff_from_delta
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
version: 0.0.2
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Henry Turner
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2011-10-09 00:00:00 +01:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: rspec
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
version: "0"
|
31
|
+
type: :development
|
32
|
+
version_requirements: *id001
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: guard-rspec
|
35
|
+
prerelease: false
|
36
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
37
|
+
none: false
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 0
|
43
|
+
version: "0"
|
44
|
+
type: :development
|
45
|
+
version_requirements: *id002
|
46
|
+
description: A conversion of the python version to ruby from http://code.google.com/p/google-diff-match-patch/ and added tests.
|
47
|
+
email:
|
48
|
+
executables: []
|
49
|
+
|
50
|
+
extensions: []
|
51
|
+
|
52
|
+
extra_rdoc_files: []
|
53
|
+
|
54
|
+
files:
|
55
|
+
- .gitignore
|
56
|
+
- Gemfile
|
57
|
+
- Guardfile
|
58
|
+
- README
|
59
|
+
- Rakefile
|
60
|
+
- diff_from_delta.gemspec
|
61
|
+
- lib/diff_from_delta.rb
|
62
|
+
- lib/diff_from_delta/version.rb
|
63
|
+
- spec/examples_spec.rb
|
64
|
+
has_rdoc: true
|
65
|
+
homepage:
|
66
|
+
licenses: []
|
67
|
+
|
68
|
+
post_install_message:
|
69
|
+
rdoc_options: []
|
70
|
+
|
71
|
+
require_paths:
|
72
|
+
- lib
|
73
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
segments:
|
79
|
+
- 0
|
80
|
+
version: "0"
|
81
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
segments:
|
87
|
+
- 0
|
88
|
+
version: "0"
|
89
|
+
requirements: []
|
90
|
+
|
91
|
+
rubyforge_project: diff_from_delta
|
92
|
+
rubygems_version: 1.3.7
|
93
|
+
signing_key:
|
94
|
+
specification_version: 3
|
95
|
+
summary: A ruby helper to decode diff deltas produced by diff-match-patch
|
96
|
+
test_files:
|
97
|
+
- spec/examples_spec.rb
|