docdiff 0.5.0
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 +6 -0
- data/.travis.yml +7 -0
- data/Gemfile +17 -0
- data/Guardfile +8 -0
- data/Makefile +108 -0
- data/Rakefile +17 -0
- data/bin/docdiff +179 -0
- data/devutil/JIS0208.TXT +6952 -0
- data/devutil/char_by_charclass.rb +23 -0
- data/devutil/charclass_by_char.rb +21 -0
- data/devutil/jis0208.rb +343 -0
- data/devutil/testjis0208.rb +38 -0
- data/docdiff.conf.example +22 -0
- data/docdiff.gemspec +23 -0
- data/docdiffwebui.cgi +176 -0
- data/docdiffwebui.html +123 -0
- data/img/docdiff-screenshot-format-html-digest-firefox.png +0 -0
- data/img/docdiff-screenshot-format-html-firefox.png +0 -0
- data/img/docdiff-screenshot-format-tty-cmdexe-en.png +0 -0
- data/img/docdiff-screenshot-format-tty-cmdexe-ja.png +0 -0
- data/img/docdiff-screenshot-format-tty-rxvtunicode-en.png +0 -0
- data/img/docdiff-screenshot-format-tty-rxvtunicode-ja.png +0 -0
- data/img/docdiff-screenshot-format-tty-xterm-en.png +0 -0
- data/img/docdiff-screenshot-format-tty-xterm-ja.png +0 -0
- data/img/docdiff-screenshot-resolution-linewordchar-xterm.png +0 -0
- data/index.html +181 -0
- data/langfilter.rb +14 -0
- data/lib/doc_diff.rb +170 -0
- data/lib/docdiff.rb +7 -0
- data/lib/docdiff/charstring.rb +579 -0
- data/lib/docdiff/diff.rb +217 -0
- data/lib/docdiff/diff/contours.rb +382 -0
- data/lib/docdiff/diff/editscript.rb +148 -0
- data/lib/docdiff/diff/rcsdiff.rb +107 -0
- data/lib/docdiff/diff/shortestpath.rb +93 -0
- data/lib/docdiff/diff/speculative.rb +40 -0
- data/lib/docdiff/diff/subsequence.rb +39 -0
- data/lib/docdiff/diff/unidiff.rb +124 -0
- data/lib/docdiff/difference.rb +92 -0
- data/lib/docdiff/document.rb +127 -0
- data/lib/docdiff/encoding/en_ascii.rb +97 -0
- data/lib/docdiff/encoding/ja_eucjp.rb +269 -0
- data/lib/docdiff/encoding/ja_sjis.rb +260 -0
- data/lib/docdiff/encoding/ja_utf8.rb +6974 -0
- data/lib/docdiff/version.rb +3 -0
- data/lib/docdiff/view.rb +476 -0
- data/lib/viewdiff.rb +375 -0
- data/readme.html +713 -0
- data/sample/01.en.ascii.cr +1 -0
- data/sample/01.en.ascii.crlf +2 -0
- data/sample/01.en.ascii.lf +2 -0
- data/sample/01.ja.eucjp.lf +2 -0
- data/sample/01.ja.sjis.cr +1 -0
- data/sample/01.ja.sjis.crlf +2 -0
- data/sample/01.ja.utf8.crlf +2 -0
- data/sample/02.en.ascii.cr +1 -0
- data/sample/02.en.ascii.crlf +2 -0
- data/sample/02.en.ascii.lf +2 -0
- data/sample/02.ja.eucjp.lf +2 -0
- data/sample/02.ja.sjis.cr +1 -0
- data/sample/02.ja.sjis.crlf +2 -0
- data/sample/02.ja.utf8.crlf +2 -0
- data/sample/humpty_dumpty01.ascii.lf +4 -0
- data/sample/humpty_dumpty02.ascii.lf +4 -0
- data/test/charstring_test.rb +1008 -0
- data/test/diff_test.rb +36 -0
- data/test/difference_test.rb +64 -0
- data/test/docdiff_test.rb +193 -0
- data/test/document_test.rb +626 -0
- data/test/test_helper.rb +7 -0
- data/test/view_test.rb +570 -0
- data/test/viewdiff_test.rb +908 -0
- metadata +129 -0
data/docdiff.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "docdiff/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "docdiff"
|
7
|
+
s.version = Docdiff::VERSION
|
8
|
+
s.authors = ["Hisashi Morita"]
|
9
|
+
s.email = ["hisashim at users.sourceforge.net"]
|
10
|
+
s.homepage = "http://docdiff.sourceforge.net"
|
11
|
+
s.summary = %q{Word-by-word diff}
|
12
|
+
s.description = %q{DocDiff compares two text files and shows the
|
13
|
+
difference. It can compare files word by word,
|
14
|
+
character by character, or line by line. It has
|
15
|
+
several output formats such as HTML, tty, Manued,
|
16
|
+
or user-defined markup.}
|
17
|
+
s.rubyforge_project = "docdiff"
|
18
|
+
|
19
|
+
s.files = `git ls-files`.split("\n")
|
20
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
21
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
22
|
+
s.require_paths = ["lib"]
|
23
|
+
end
|
data/docdiffwebui.cgi
ADDED
@@ -0,0 +1,176 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
# DocDiff Web UI (CGI)
|
3
|
+
# 2005-10-08.. Hisashi Morita
|
4
|
+
# requirement: Ruby 1.8+ (for timeout.rb)
|
5
|
+
|
6
|
+
require 'cgi'
|
7
|
+
require 'tempfile'
|
8
|
+
require 'open3'
|
9
|
+
require 'timeout'
|
10
|
+
|
11
|
+
docdiff = "/usr/bin/docdiff"
|
12
|
+
|
13
|
+
def errmsg(bndg) # receive binding and return error anatomy
|
14
|
+
timeout_second = eval("timeout_second", bndg)
|
15
|
+
meth = eval("meth", bndg)
|
16
|
+
cgierr = eval("cgierr", bndg)
|
17
|
+
cmderr = eval("cmderr", bndg)
|
18
|
+
cmdline = eval("cmdline", bndg)
|
19
|
+
file1 = eval("file1", bndg)
|
20
|
+
file2 = eval("file2", bndg)
|
21
|
+
msg = ["<h1>I am so sorry, but something went wrong and an error occured.</h1>",
|
22
|
+
"<h2>For users:</h2>",
|
23
|
+
"<p>#{cgierr}</p>",
|
24
|
+
"<p>#{'You may try again specifying encoding and eol explicitly.' if cmderr.size > 0}</p>",
|
25
|
+
"<p>If you are still in trouble after self-help effort, please consult your system administrator (or nearest geek) with the detail below.</p>",
|
26
|
+
"<hr />",
|
27
|
+
"<h2>For system administrators:</h2>",
|
28
|
+
"<p>Technical detail of the error:</p>",
|
29
|
+
"<p>",
|
30
|
+
"CGI error: #{CGI.escapeHTML(cgierr.inspect)}<br />",
|
31
|
+
"Command error: #{CGI.escapeHTML(cmderr.inspect)}<br />",
|
32
|
+
"Timeout: #{timeout_second}<br />",
|
33
|
+
"Method used: #{meth}<br />",
|
34
|
+
"Commandline used: #{CGI.escapeHTML(cmdline.inspect)}<br />",
|
35
|
+
"file1: #{CGI.escapeHTML(file1.inspect)}<br />",
|
36
|
+
"file1 stat: #{CGI.escapeHTML(File.stat(file1.path).inspect)}<br />",
|
37
|
+
"file2: #{CGI.escapeHTML(file2.inspect)}<br />",
|
38
|
+
"file2 stat: #{CGI.escapeHTML(File.stat(file2.path).inspect)}<br />",
|
39
|
+
# "file1 content: #{`head #{file1.path}`}<br />",
|
40
|
+
# "file2 content: #{`head #{file2.path}`}<br />",
|
41
|
+
# "#{`#{cmdline}`}",
|
42
|
+
"</p><hr />"].join
|
43
|
+
return msg
|
44
|
+
end
|
45
|
+
|
46
|
+
class InvalidUsageError < StandardError
|
47
|
+
end
|
48
|
+
class TimeoutErrorPopen < TimeoutError
|
49
|
+
end
|
50
|
+
class TimeoutErrorPopen3 < TimeoutError
|
51
|
+
end
|
52
|
+
|
53
|
+
cgi = CGI.new("html4")
|
54
|
+
file1 = Tempfile.new("file1-")
|
55
|
+
file1.print(cgi.params['file1'][0].read)
|
56
|
+
file1.close
|
57
|
+
file2 = Tempfile.new("file2-")
|
58
|
+
file2.print(cgi.params['file2'][0].read)
|
59
|
+
file2.close
|
60
|
+
|
61
|
+
if resolution = cgi.params['resolution'][0]
|
62
|
+
case resolution.read
|
63
|
+
when "line" then resolution = "line"
|
64
|
+
when "word" then resolution = "word"
|
65
|
+
when "char" then resolution = "char"
|
66
|
+
else raise "Consult your system administrator. Unsupported resolution."
|
67
|
+
end
|
68
|
+
else
|
69
|
+
raise "param 'resolution' was not available."
|
70
|
+
end
|
71
|
+
|
72
|
+
if format = cgi.params['format'][0]
|
73
|
+
case format.read
|
74
|
+
when "html" then format = "html"
|
75
|
+
when "tty" then format = "tty"
|
76
|
+
when "wdiff" then format = "wdiff"
|
77
|
+
when "manued" then format = "manued"
|
78
|
+
else raise "Consult your system administrator. Unsupported format."
|
79
|
+
end
|
80
|
+
else
|
81
|
+
raise "param 'format' was not available."
|
82
|
+
end
|
83
|
+
|
84
|
+
if encoding = cgi.params['encoding'][0]
|
85
|
+
case encoding.read
|
86
|
+
when "auto" then encoding = "auto"
|
87
|
+
when "ascii" then encoding = "ASCII"
|
88
|
+
when "utf8" then encoding = "UTF-8"
|
89
|
+
when "eucjp" then encoding = "EUC-JP"
|
90
|
+
when "sjis" then encoding = "Shift_JIS"
|
91
|
+
else raise "Consult your system administrator. Unsupported encoding."
|
92
|
+
end
|
93
|
+
else
|
94
|
+
raise "param 'encoding' was not available."
|
95
|
+
end
|
96
|
+
|
97
|
+
if eol = cgi.params['eol'][0]
|
98
|
+
case eol.read
|
99
|
+
when "auto" then eol = "auto"
|
100
|
+
when "cr" then eol = "CR"
|
101
|
+
when "lf" then eol = "LF"
|
102
|
+
when "crlf" then eol = "CRLF"
|
103
|
+
else raise "Consult your system administrator. Unsupported eol."
|
104
|
+
end
|
105
|
+
else
|
106
|
+
raise "param 'eol' was not available."
|
107
|
+
end
|
108
|
+
|
109
|
+
digest = cgi.params['digest'][0]
|
110
|
+
if digest && digest.read == "digest"
|
111
|
+
digest = "--digest"
|
112
|
+
else
|
113
|
+
digest = ""
|
114
|
+
end
|
115
|
+
|
116
|
+
if timeout_second = cgi.params['timeout_second'][0]
|
117
|
+
case timeout_second.read
|
118
|
+
when "5" then timeout_second = 5
|
119
|
+
when "15" then timeout_second = 15
|
120
|
+
when "30" then timeout_second = 30
|
121
|
+
when "60" then timeout_second = 60
|
122
|
+
else raise "Consult your system administrator. Unsupported timeout period."
|
123
|
+
end
|
124
|
+
else
|
125
|
+
raise "param 'timeout_second' was not available."
|
126
|
+
end
|
127
|
+
|
128
|
+
begin
|
129
|
+
cmderr = ""
|
130
|
+
cgierr = ""
|
131
|
+
output = ""
|
132
|
+
cmdline = "#{docdiff} " +
|
133
|
+
" --resolution=#{resolution} --format=#{format} " +
|
134
|
+
" --encoding=#{encoding} --eol=#{eol} #{digest} " +
|
135
|
+
" #{file1.path} #{file2.path} "
|
136
|
+
raise InvalidUsageError, "file1 is either empty (size 0) or not specified." if FileTest.zero?(file1.path)
|
137
|
+
raise InvalidUsageError, "file2 is either empty (size 0) or not specified." if FileTest.zero?(file2.path)
|
138
|
+
raise "file1 is unreadable." unless FileTest.readable?(file1.path)
|
139
|
+
raise "file2 is unreadable." unless FileTest.readable?(file2.path)
|
140
|
+
meth = "IO.popen"
|
141
|
+
timeout(timeout_second, TimeoutErrorPopen){
|
142
|
+
output = IO.popen(cmdline, "rb").read
|
143
|
+
raise "stdout from docdiff is nil." if output == nil
|
144
|
+
raise "stdout from docdiff is not nil, but empty." if output == ""
|
145
|
+
}
|
146
|
+
rescue InvalidUsageError => cgierr
|
147
|
+
output = errmsg(binding())
|
148
|
+
|
149
|
+
rescue TimeoutErrorPopen => cgierr
|
150
|
+
# popen failed, so falling back to open3, though open3 can fail too...
|
151
|
+
meth = "Open3.popen3"
|
152
|
+
|
153
|
+
timeout(timeout_second, TimeoutErrorPopen3){
|
154
|
+
stdin, stdout, stderr = Open3.popen3(cmdline)
|
155
|
+
raise "stdin to docdiff is nil." unless stdin
|
156
|
+
raise "stdout from docdiff is nil." unless stdout
|
157
|
+
raise "stderr from docdiff is nil." unless stderr
|
158
|
+
cmderr = stderr.read
|
159
|
+
raise cmderr if cmderr && cmderr.length > 0
|
160
|
+
output = stdout.read
|
161
|
+
}
|
162
|
+
rescue TimeoutErrorPopen3 => cgierr
|
163
|
+
output = errmsg(binding())
|
164
|
+
rescue => cgierr
|
165
|
+
output = errmsg(binding())
|
166
|
+
ensure
|
167
|
+
cgi.out {
|
168
|
+
if output == nil then
|
169
|
+
errmsg(binding())
|
170
|
+
elsif output.size == 0 then
|
171
|
+
errmsg(binding())
|
172
|
+
else
|
173
|
+
output
|
174
|
+
end
|
175
|
+
}
|
176
|
+
end
|
data/docdiffwebui.html
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title>DocDiff Web UI</title>
|
4
|
+
<meta http-equiv="Content-Style-Type" content="text/css">
|
5
|
+
<style type="text/css">
|
6
|
+
body {
|
7
|
+
margin: 1em 2em 1em 2em;
|
8
|
+
}
|
9
|
+
h1 {
|
10
|
+
border-left-width: thick;
|
11
|
+
border-left-style: solid;
|
12
|
+
border-style: solid none solid none;
|
13
|
+
}
|
14
|
+
.form {
|
15
|
+
border-style: outset;
|
16
|
+
padding: 0.5em 1em 0.5em 1em;
|
17
|
+
width: 100%;
|
18
|
+
max-width: 50%;
|
19
|
+
min-width: 30em;
|
20
|
+
}
|
21
|
+
.buttons {
|
22
|
+
float: right;
|
23
|
+
min-width: 30%;
|
24
|
+
}
|
25
|
+
.buttons + * {
|
26
|
+
clear: both;
|
27
|
+
}
|
28
|
+
.form .options {
|
29
|
+
margin-left: 1em;
|
30
|
+
}
|
31
|
+
.form .options dt {
|
32
|
+
float: left;
|
33
|
+
width: 30%;
|
34
|
+
max-width: 20em;
|
35
|
+
}
|
36
|
+
.form .options dd {
|
37
|
+
width: 70%;
|
38
|
+
}
|
39
|
+
</style>
|
40
|
+
</head>
|
41
|
+
<body>
|
42
|
+
<h1>DocDiff Web UI</h1>
|
43
|
+
<p><a href="http://www.kt.rim.or.jp/~hisashim/docdiff/">DocDiff</a> is a word/char oriented text file comparison utility.</p>
|
44
|
+
<p><strong>Caution: This web ui is totally experimental and insecure! Do not use it on public site.</strong></p>
|
45
|
+
<div class="form">
|
46
|
+
<form action="cgi-bin/docdiffwebui.cgi" method="post" enctype="multipart/form-data" target="_blank">
|
47
|
+
<fieldset>
|
48
|
+
<legend>Files to compare</legend>
|
49
|
+
<ol>
|
50
|
+
<li><input type="file" name="file1" size="72"></li>
|
51
|
+
<li><input type="file" name="file2" size="72"></li>
|
52
|
+
</ol>
|
53
|
+
</fieldset>
|
54
|
+
<fieldset>
|
55
|
+
<legend>Options</legend>
|
56
|
+
<dl class="options">
|
57
|
+
<dt>Resolution:</dt>
|
58
|
+
<dd>
|
59
|
+
<select name="resolution">
|
60
|
+
<option value="line">Line</option>
|
61
|
+
<option value="word" selected>Word (default)</option>
|
62
|
+
<option value="char">Character</option>
|
63
|
+
</select><br />
|
64
|
+
</dd>
|
65
|
+
<dt>Output Format:</dt>
|
66
|
+
<dd>
|
67
|
+
<select name="format">
|
68
|
+
<option value="html" selected>HTML (default)</option>
|
69
|
+
<option value="tty">tty</option>
|
70
|
+
<option value="wdiff">wdiff</option>
|
71
|
+
<option value="manued">Manued</option>
|
72
|
+
</select>
|
73
|
+
</dd>
|
74
|
+
<dt>Encoding:</dt>
|
75
|
+
<dd>
|
76
|
+
<select name="encoding">
|
77
|
+
<option value="auto" selected>Auto (default)</option>
|
78
|
+
<option value="ascii">ASCII</option>
|
79
|
+
<option value="utf8">UTF-8</option>
|
80
|
+
<option value="eucjp">EUC-JP (Japanese Unix)</option>
|
81
|
+
<option value="sjis">Shift-JIS (Japanese Windows, Mac)</option>
|
82
|
+
</select>
|
83
|
+
</dd>
|
84
|
+
<dt>End-of-line:</dt>
|
85
|
+
<dd>
|
86
|
+
<select name="eol">
|
87
|
+
<option value="auto" selected>Auto (default)</option>
|
88
|
+
<option value="crlf">CRLF (Windows)</option>
|
89
|
+
<option value="lf">LF (Unix, Mac OS X)</option>
|
90
|
+
<option value="cr">CR (Old Mac)</option>
|
91
|
+
</select>
|
92
|
+
</dd>
|
93
|
+
<dt>Digest?</dt>
|
94
|
+
<dd>
|
95
|
+
<input type="checkbox" name="digest" value="digest">
|
96
|
+
</dd>
|
97
|
+
<dt>Timeout:</dt>
|
98
|
+
<dd>
|
99
|
+
<select name="timeout_second">
|
100
|
+
<option value="5" selected>5 sec. (default)</option>
|
101
|
+
<option value="15">15 sec.</option>
|
102
|
+
<option value="30">30 sec.</option>
|
103
|
+
<option value="60">60 sec.</option>
|
104
|
+
</select>
|
105
|
+
</dd>
|
106
|
+
</dl>
|
107
|
+
</fieldset>
|
108
|
+
<div class="buttons">
|
109
|
+
<p>
|
110
|
+
<input type="reset">
|
111
|
+
<input type="submit">
|
112
|
+
</p>
|
113
|
+
</div>
|
114
|
+
<br />
|
115
|
+
</form>
|
116
|
+
</div>
|
117
|
+
<p>Wait for a while untill you get the result.</p>
|
118
|
+
<p>If you get an error, try specifying encoding and eol explicitly. If that does not help, ask your system administrator who installed this software.</p>
|
119
|
+
|
120
|
+
<hr />
|
121
|
+
2005-10-08.. Hisashi Morita
|
122
|
+
</body>
|
123
|
+
</html>
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/index.html
ADDED
@@ -0,0 +1,181 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
3
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
5
|
+
<head>
|
6
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
7
|
+
<title>DocDiff</title>
|
8
|
+
<style type="text/css">
|
9
|
+
body {
|
10
|
+
margin-left: 5%;
|
11
|
+
}
|
12
|
+
h1, h2 {
|
13
|
+
margin-left: -5%;
|
14
|
+
}
|
15
|
+
h1 {
|
16
|
+
border: medium outset;
|
17
|
+
padding: 0.5em;
|
18
|
+
}
|
19
|
+
h2 {
|
20
|
+
border-top: thin solid;
|
21
|
+
border-right: thin solid;
|
22
|
+
border-left: thick solid;
|
23
|
+
border-bottom: thin solid;
|
24
|
+
padding-left: 0.3em;
|
25
|
+
}
|
26
|
+
h3 {
|
27
|
+
border-left: thick solid;
|
28
|
+
padding-left: 0.3em;
|
29
|
+
}
|
30
|
+
.figure {
|
31
|
+
padding: 0.5em 0em;
|
32
|
+
clear: both;
|
33
|
+
}
|
34
|
+
.img {
|
35
|
+
margin-right: 0.5em;
|
36
|
+
}
|
37
|
+
.img:first-child {
|
38
|
+
float: left;
|
39
|
+
}
|
40
|
+
.img + .img {
|
41
|
+
float: left;
|
42
|
+
}
|
43
|
+
h1, h2, h3, hr {
|
44
|
+
clear: both;
|
45
|
+
}
|
46
|
+
.img > p {
|
47
|
+
margin-top: 0.5em;
|
48
|
+
margin-bottom: 0.25em;
|
49
|
+
font-size: small;
|
50
|
+
}
|
51
|
+
</style>
|
52
|
+
<style title="en" type="text/css">
|
53
|
+
* [lang="ja"] {display: none}
|
54
|
+
* [lang="en"] {display: inherit}
|
55
|
+
</style>
|
56
|
+
<style title="ja" type="text/css">
|
57
|
+
* [lang="en"] {display: none}
|
58
|
+
* [lang="ja"] {display: inherit}
|
59
|
+
</style>
|
60
|
+
</head>
|
61
|
+
<body>
|
62
|
+
<h1>DocDiff</h1>
|
63
|
+
<h2 id="toc">
|
64
|
+
<span lang="en">Table of Contents</span>
|
65
|
+
<span lang="ja">目次</span>
|
66
|
+
</h2>
|
67
|
+
<ul>
|
68
|
+
<li><a href="#summary">Summary</a></li>
|
69
|
+
<li><a href="#screenshot">Screenshot</a></li>
|
70
|
+
<li><a href="#document">Document</a></li>
|
71
|
+
<li><a href="#download">Download</a></li>
|
72
|
+
</ul>
|
73
|
+
</div>
|
74
|
+
<div class="content">
|
75
|
+
<h2 id="summary">
|
76
|
+
<span lang="en">Summary</span>
|
77
|
+
<span lang="ja">概要</span>
|
78
|
+
</h2>
|
79
|
+
<p>
|
80
|
+
<span lang="en">
|
81
|
+
<a href="http://www.kt.rim.or.jp/~hisashim/docdiff/">DocDiff</a> compares two text files and shows the difference. It can compare files by word, character, or line. It has several output formats such as HTML, tty, Manued, or user-defined markup.
|
82
|
+
</span>
|
83
|
+
<span lang="ja">
|
84
|
+
<a href="http://www.kt.rim.or.jp/~hisashim/docdiff/">DocDiff</a>は2つのテキストファイルを比較してその違いを表示します。単語ごと、文字ごと、そして行ごとにファイルを比較できます。結果を出力する形式は、HTML, tty(文字 端末向けのエスケープシーケンス), Manued(真鵺道という校正用のマークアップ形式)などが用意されており、ユーザ定義のタグを使うこともできます。
|
85
|
+
</span>
|
86
|
+
</p>
|
87
|
+
<p>
|
88
|
+
<span lang="en">
|
89
|
+
It supports several encodings and end-of-line characters, including ASCII (and ISO-8859-*), UTF-8, EUC-JP, Shift_JIS, CR, LF, and CRLF.
|
90
|
+
</span>
|
91
|
+
<span lang="ja">
|
92
|
+
次のエンコーディング(文字コード)と行末コード(改行文字)をサポートしています: ASCII(およびISO-8859-*), UTF-8, EUC-JP, Shift_JIS、そしてCR, LF, CRLF.
|
93
|
+
</span>
|
94
|
+
</p>
|
95
|
+
<hr />
|
96
|
+
<h2 id="screenshot">
|
97
|
+
<span lang="en">Screenshot</span>
|
98
|
+
<span lang="ja">スクリーンショット</span>
|
99
|
+
</h2>
|
100
|
+
<p>
|
101
|
+
<span lang="en">Screenshots as of version 0.3.2. All shots are in the <a href="img/">img</a> directory.</span>
|
102
|
+
<span lang="ja">バージョン0.3.2時点のスクリーンショットです。スクリーンショットは<a href="img/">img</a>ディレクトリにあります。</span>
|
103
|
+
</p>
|
104
|
+
<div class="figure">
|
105
|
+
<span class="img">
|
106
|
+
<p>HTML output in web browser</p>
|
107
|
+
<img src="img/docdiff-screenshot-format-html-firefox.png" alt="screenshot" />
|
108
|
+
</span>
|
109
|
+
<span class="img">
|
110
|
+
<p>HTML output in web browser (digest)</p>
|
111
|
+
<img src="img/docdiff-screenshot-format-html-digest-firefox.png" alt="screenshot" />
|
112
|
+
</span>
|
113
|
+
</div>
|
114
|
+
<div class="figure">
|
115
|
+
<span class="img">
|
116
|
+
<p>tty output in terminal</p>
|
117
|
+
<img src="img/docdiff-screenshot-format-tty-rxvtunicode-en.png" alt="screenshot" />
|
118
|
+
</span>
|
119
|
+
<span class="img">
|
120
|
+
<p>tty output in terminal (comparing Japanese text)</p>
|
121
|
+
<img src="img/docdiff-screenshot-format-tty-rxvtunicode-ja.png" alt="screenshot" />
|
122
|
+
</span>
|
123
|
+
</div>
|
124
|
+
<div class ="figure">
|
125
|
+
<span class="img">
|
126
|
+
<p>tty output in terminal</p>
|
127
|
+
<img src="img/docdiff-screenshot-format-tty-xterm-en.png" alt="screenshot" />
|
128
|
+
</span>
|
129
|
+
<span class="img">
|
130
|
+
<p>tty output in terminal (comparing Japanese text)</p>
|
131
|
+
<img src="img/docdiff-screenshot-format-tty-xterm-ja.png" alt="screenshot" />
|
132
|
+
</span>
|
133
|
+
</div>
|
134
|
+
<div class="figure">
|
135
|
+
<span class="img">
|
136
|
+
<p>Comparing English text (codepage 437) on Windows (Cygwin)</p>
|
137
|
+
<img src="img/docdiff-screenshot-format-tty-cmdexe-en.png" alt="screenshot" />
|
138
|
+
</span>
|
139
|
+
<span class="img">
|
140
|
+
<p>Comparing Japanese text (codepage 932) on Windows (Cygwin)</p>
|
141
|
+
<img src="img/docdiff-screenshot-format-tty-cmdexe-ja.png" alt="screenshot" />
|
142
|
+
</span>
|
143
|
+
</div>
|
144
|
+
<div class="figure">
|
145
|
+
<span class="img">
|
146
|
+
<p>You can compare text files by line, word, or character (format: tty)</p>
|
147
|
+
<img src="img/docdiff-screenshot-resolution-linewordchar-xterm.png" alt="screenshot" />
|
148
|
+
</span>
|
149
|
+
</div>
|
150
|
+
<hr />
|
151
|
+
<h2 id="document">
|
152
|
+
<span lang="en">Document</span>
|
153
|
+
<span lang="ja">ドキュメント</span>
|
154
|
+
</h2>
|
155
|
+
<ul>
|
156
|
+
<li><a href="readme.html">readme.html</a> (Multilingual)</li>
|
157
|
+
<li><a href="readme.en.html">readme.en.html</a> (English)</li>
|
158
|
+
<li><a href="readme.ja.html">readme.ja.html</a> (Japanese)</li>
|
159
|
+
</ul>
|
160
|
+
|
161
|
+
<h2 id="download">
|
162
|
+
<span lang="en">Download</span>
|
163
|
+
<span lang="ja">ダウンロード</span>
|
164
|
+
</h2>
|
165
|
+
<p>
|
166
|
+
<span lang="en">Please read the readme before you download.</span>
|
167
|
+
<span lang="ja">ダウンロードする前にreadmeをお読みください。</span>
|
168
|
+
</p>
|
169
|
+
<ul>
|
170
|
+
<li><a href="http://sourceforge.net/projects/docdiff/files/">
|
171
|
+
http://sourceforge.net/projects/docdiff/files/</a></li>
|
172
|
+
</ul>
|
173
|
+
</div>
|
174
|
+
<hr>
|
175
|
+
<a href ="../">Up</a>
|
176
|
+
<hr>
|
177
|
+
2011-02-23 +0900<br />
|
178
|
+
2001-02-12 +0900<br />
|
179
|
+
Copyright (C) 2001-2011 Hisashi MORITA<br />
|
180
|
+
</body>
|
181
|
+
</html>
|