docdiff 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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>
|