diff2xml 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3 @@
1
+ * 2006-11-09 Revision 1
2
+
3
+ - Just added my local code. (xoinu)
data/README ADDED
@@ -0,0 +1,3 @@
1
+ README for diff2xml
2
+ ===================
3
+
@@ -0,0 +1,85 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/clean'
4
+ require 'rake/testtask'
5
+ require 'rake/packagetask'
6
+ require 'rake/gempackagetask'
7
+ require 'rake/rdoctask'
8
+ require 'rake/contrib/rubyforgepublisher'
9
+ require 'fileutils'
10
+ include FileUtils
11
+ require File.join(File.dirname(__FILE__), 'lib', 'diff2xml', 'version')
12
+
13
+ AUTHOR = "xoinu"
14
+ EMAIL = "xoinu@mac.com"
15
+ DESCRIPTION = "Generate xml (xhtml, rss, etc.) from unified diff. This package contains diff2xml command-line tool and reusable diff-parser framework."
16
+ RUBYFORGE_PROJECT = "diff2xml"
17
+ HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
18
+ BIN_FILES = %w(diff2xml)
19
+
20
+
21
+ NAME = "diff2xml"
22
+ REV = File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
23
+ VERS = ENV['VERSION'] || (Diff2Xml::VERSION::STRING + (REV ? ".#{REV}" : ""))
24
+ CLEAN.include ['**/.*.sw?', '*.gem', '.config']
25
+ RDOC_OPTS = ['--quiet', '--title', "diff2xml documentation",
26
+ "--opname", "index.html",
27
+ "--line-numbers",
28
+ "--main", "README",
29
+ "--inline-source"]
30
+
31
+ desc "Packages up diff2xml gem."
32
+ task :default => [:test]
33
+ task :package => [:clean]
34
+
35
+ Rake::TestTask.new("test") { |t|
36
+ t.libs << "test"
37
+ t.pattern = "test/**/*_test.rb"
38
+ t.verbose = true
39
+ }
40
+
41
+ spec =
42
+ Gem::Specification.new do |s|
43
+ s.name = NAME
44
+ s.version = VERS
45
+ s.platform = Gem::Platform::RUBY
46
+ s.has_rdoc = true
47
+ s.extra_rdoc_files = ["README", "CHANGELOG"]
48
+ s.rdoc_options += RDOC_OPTS + ['--exclude', '^(examples|extras)/']
49
+ s.summary = DESCRIPTION
50
+ s.description = DESCRIPTION
51
+ s.author = AUTHOR
52
+ s.email = EMAIL
53
+ s.homepage = HOMEPATH
54
+ s.executables = BIN_FILES
55
+ s.rubyforge_project = RUBYFORGE_PROJECT
56
+ s.bindir = "bin"
57
+ s.require_path = "lib"
58
+ s.autorequire = "diff2xml"
59
+
60
+ #s.add_dependency('activesupport', '>=1.3.1')
61
+ #s.required_ruby_version = '>= 1.8.2'
62
+
63
+ s.files = %w(README CHANGELOG Rakefile) +
64
+ Dir.glob("{bin,doc,test,lib,templates,generator,extras,website,script}/**/*") +
65
+ Dir.glob("ext/**/*.{h,c,rb}") +
66
+ Dir.glob("examples/**/*.rb") +
67
+ Dir.glob("tools/*.rb")
68
+
69
+ # s.extensions = FileList["ext/**/extconf.rb"].to_a
70
+ end
71
+
72
+ Rake::GemPackageTask.new(spec) do |p|
73
+ p.need_tar = true
74
+ p.gem_spec = spec
75
+ end
76
+
77
+ task :install do
78
+ name = "#{NAME}-#{VERS}.gem"
79
+ sh %{rake package}
80
+ sh %{sudo gem install pkg/#{name}}
81
+ end
82
+
83
+ task :uninstall => [:clean] do
84
+ sh %{sudo gem uninstall #{NAME}}
85
+ end
@@ -0,0 +1,167 @@
1
+ # -*- Ruby -*-
2
+ #
3
+ # Copyright (c) 2006, xoinu
4
+ # All rights reserved.
5
+ #
6
+ # Redistribution and use in source and binary forms, with or without
7
+ # modification, are permitted provided that the following conditions are met:
8
+ #
9
+ # * Redistributions of source code must retain the above copyright notice,
10
+ # this list of conditions and the following disclaimer.
11
+ # * Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ # * Neither the name of the Xoinu nor the names of its contributors may
15
+ # be used to endorse or promote products derived from this software
16
+ # without specific prior written permission.
17
+ #
18
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
22
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ #
29
+ require 'optparse'
30
+ require 'diff2xml.rb'
31
+
32
+ module Diff2Xml
33
+ def print_version(os)
34
+ os << <<PRINT_VERSION
35
+ diff2xml version #{VERSION::STRING}, (c) 2006-2007 Junnosuke Yamazaki
36
+ PRINT_VERSION
37
+ end
38
+
39
+ def print_usage
40
+ STDERR.print <<USAGE
41
+ Usage: diff2xml input_file [-s css_name] [-g] [-o html_name] ...
42
+ -d, --desc=description specify <description> field of rss
43
+ -f, --format=html 'html', 'rss20' (default: html)
44
+ -g, --generate-css generate a css file for html
45
+ -h, --help show this help
46
+ -l, --lang=en-us specify language (default: en-us)
47
+ -o, --output=html_name ouput file name
48
+ -s, --style=css_name specify stylesheet file name for html
49
+ -t, --title=title_name specify <title> field for rss
50
+ -u, --url=url_name specify the base url for rss
51
+ -v, --verbose show more information
52
+ -V, --version show version
53
+
54
+ Example: % diff2xml -g # generate css
55
+ % svn diff | diff2xml > diff_result.html # generate html
56
+ % diff2xml -f rss20 diff.txt -u 'http://xoi.nu/' > diff.rss # generate rss
57
+ USAGE
58
+ end
59
+ end
60
+
61
+ include Diff2Xml
62
+
63
+ css_name = 'diff2html.css'
64
+ options = Hash.new
65
+
66
+ #
67
+ # Parse options
68
+ #
69
+ OptionParser.new do |opt|
70
+ begin
71
+ opt.on('-d VAL', '--desc=VAL') {|v| options[:d] = v }
72
+ opt.on('-f VAL', '--format=VAL') {|v| options[:f] = v }
73
+ opt.on('-g', '--generate-css') {|v| options[:g] = v }
74
+ opt.on('-h', '--help') {|v| options[:h] = v }
75
+ opt.on('-l VAL', '--lang=VAL') {|v| options[:l] = v }
76
+ opt.on('-o VAL', '--output=VAL') {|v| options[:o] = v }
77
+ opt.on('-s VAL', '--style=VAL') {|v| options[:s] = v }
78
+ opt.on('-t VAL', '--title=VAL') {|v| options[:t] = v }
79
+ opt.on('-v VAL', '--verbose') {|v| options[:e] = v }
80
+ opt.on('-V', '--version') {|v| options[:v] = v }
81
+ opt.parse!(ARGV)
82
+ rescue
83
+ STDERR.puts 'ERROR: Invalid option was passed.'
84
+ print_usage
85
+ exit 0
86
+ end
87
+ end
88
+
89
+ #
90
+ # Evalueate -h, --help
91
+ #
92
+ if options[:h]
93
+ print_version(STDERR) if options[:v]
94
+ print_usage
95
+ exit 0
96
+ end
97
+
98
+ #
99
+ # Evaluate -V, --version
100
+ #
101
+ if options[:v]
102
+ print_version(STDERR)
103
+ exit 0
104
+ end
105
+
106
+ #
107
+ # Evaluate -s, --style
108
+ #
109
+ css_name = options[:s] if options[:s]
110
+
111
+ #
112
+ # Evaluate -g, --generate-css
113
+ #
114
+ if options[:g]
115
+ File.open(css_name, 'w') {|f| Diff2Html::print_default_css(f) }
116
+ puts "#{css_name} was written."
117
+ exit 0
118
+ end
119
+
120
+ #
121
+ # Evaluate -f, --format
122
+ #
123
+ options[:f] = 'html' if !options[:f]
124
+
125
+ case options[:f]
126
+ when 'html'
127
+ handler = Diff2Html.new
128
+ handler.css_name = css_name
129
+ when 'rss20'
130
+ #
131
+ # Evaluate -t, -d, -l, -u
132
+ #
133
+ handler = Diff2Rss20.new
134
+ handler.title = options[:t] if options[:t]
135
+ handler.desc = options[:d] if options[:d]
136
+ handler.lang = options[:l] if options[:l]
137
+ handler.url = options[:u] if options[:u]
138
+ #
139
+ # Evaluate -v, --verbose
140
+ #
141
+ if options[:e]
142
+ STDERR << <<VERBOSE
143
+ url: #{app.url}
144
+ language: #{app.lang}
145
+ title: #{app.title}
146
+ description: #{app.desc}
147
+ VERBOSE
148
+ end
149
+ else
150
+ end
151
+
152
+ begin
153
+ #
154
+ # evaluate -o, --output
155
+ #
156
+ istream = ARGV.size > 0 ? File.open(ARGV[0], 'r') : STDIN
157
+ ostream = options[:o] ? File.open(options[:o], 'w') : STDOUT
158
+
159
+ handler.ostream = ostream
160
+ Parser.new(handler).parse(istream)
161
+ rescue
162
+ STDERR.puts 'ERROR: Invalid option was passed.'
163
+ print_usage
164
+ ensure
165
+ istream.close if istream && istream != STDIN
166
+ ostream.close if ostream && ostream != STDOUT
167
+ end
@@ -0,0 +1 @@
1
+ Dir[File.join(File.dirname(__FILE__), 'diff2xml/**/*.rb')].sort.each { |lib| require lib }
@@ -0,0 +1,158 @@
1
+ #
2
+ # Copyright (c) 2006, xoinu
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # * Redistributions of source code must retain the above copyright notice,
9
+ # this list of conditions and the following disclaimer.
10
+ # * Redistributions in binary form must reproduce the above copyright notice,
11
+ # this list of conditions and the following disclaimer in the documentation
12
+ # and/or other materials provided with the distribution.
13
+ # * Neither the name of the Xoinu nor the names of its contributors may
14
+ # be used to endorse or promote products derived from this software
15
+ # without specific prior written permission.
16
+ #
17
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
21
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
24
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+ #
28
+ require File.dirname(__FILE__) + '/parser'
29
+ require File.dirname(__FILE__) + '/handler'
30
+ require File.dirname(__FILE__) + '/xmltool'
31
+
32
+ module Diff2Xml
33
+ class Diff2Html
34
+ include Handler
35
+ include XmlTool
36
+
37
+ attr_writer :ostream
38
+ attr_accessor :css_name
39
+
40
+ @file_count
41
+ @diff_count
42
+ @next_block
43
+
44
+ def self.print_default_css(os)
45
+ os << <<STYLE
46
+ a:link { color:#000; cursor:point; text-decoration:none }
47
+ a:hover { cursor:point; text-decoration:none }
48
+ a:visited { color:#000; cursor:point; text-decoration:none }
49
+ body { margin:0px; font-family:\"Verdana\",Serif; background-color:#fff }
50
+ h4.title { margin:20px 0px 10px 10px }
51
+ table { padding:0px; margin:0px; border-collapse:collapse; }
52
+ th.title { border-width:8px 0px 8px 0px; border-color:Green; border-style:solid; font-family:\"Verdana\"; font-size:1.25em; text-align:left; padding:10px 10px 10px 20px; background-color:#fff }
53
+ th, td { font-family:\"Courier New\",Monospace; font-size:.9em; padding-left:20px }
54
+ td.del { background-color:#888 }
55
+ td.add { font-weight:bold; font-size:.9em; background-color:#ff0 }
56
+ td.blank { background-color:DarkGray }
57
+ td.same,td.omit { color:#444; background-color:#ccc }
58
+ td.omit { font-weight:bold; padding:20px }
59
+ span.c, span.g, span.m { color:#f00 }
60
+ span.a, span.u, span.p { color:#00f }
61
+ span.d { color:#880 }
62
+ p.timestamp { font-size:.8em; margin-right:20px }
63
+ p.result { text-align:center; font-weight:bold; font-size:.8em; margin-right:20px }
64
+ p.diff2html-header { padding:10px; margin:0px }
65
+ STYLE
66
+ end
67
+
68
+ def initialize(os = STDOUT, inline_css = false, css = 'diff2html.css')
69
+ @file_count = 0
70
+ @diff_count = 0
71
+ @next_block = false
72
+ @ostream = os
73
+ @inline_css = inline_css
74
+ @css_name = css
75
+ end
76
+
77
+ #
78
+ # Override
79
+ #
80
+
81
+ def start_parse
82
+ @ostream << <<HEAD
83
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
84
+ <html>
85
+ <head>
86
+ <title>diff2html result</title>
87
+ HEAD
88
+
89
+ if @inline_css
90
+ @ostream.puts '<style>'
91
+ Diff2Html.print_default_css(@ostream)
92
+ @ostream.puts '</style>'
93
+ else
94
+ @ostream.puts "<link rel=\"stylesheet\" type=\"text/css\" href=\"#{@css_name}\" />"
95
+ end
96
+
97
+ @ostream << <<HEAD
98
+ </head>
99
+ <body>
100
+ <p class="diff2html-header">Created on #{Time.now}</p>
101
+ <table cellspacing=\"0\" cellpadding=\"0\">
102
+ HEAD
103
+ end
104
+
105
+ def end_parse
106
+ @ostream.puts "</table>\n</body>\n</html>"
107
+ end
108
+
109
+ def start_document(source, target)
110
+ source = sanitize(source)
111
+ target = sanitize(target)
112
+ title = ""
113
+ if source == target then
114
+ title = source
115
+ else
116
+ title = "Source: #{source}<br/>Target: #{target}"
117
+ end
118
+ @ostream.puts "<tr><th class=\"title\"><a name=\"file_#{@file_count}\"/><a name=\"#{source}\"/><a href=\"#file_#{@file_count+1}\">#{title}</a></th></tr>"
119
+ @file_count = @file_count + 1
120
+ end
121
+
122
+ def end_document
123
+ end
124
+
125
+ def start_block(source_base, source_length, target_base, target_length)
126
+ @ostream.puts "<tr><td class=\"omit\">(From line #{source_base} to #{source_base.to_i+source_length.to_i})</td></tr>"
127
+ @next_block = true
128
+ end
129
+
130
+ def source_line(line)
131
+ line = sanitize(line)
132
+ if @next_block then
133
+ @diff_count = @diff_count + 1
134
+ @next_block = false
135
+ @ostream.puts "<tr><td class=\"del\"><a name=\"diff_#{@diff_count}\"/><a href=\"#diff_#{@diff_count+1}\">#{line}</a></td></tr>"
136
+ else
137
+ @ostream.puts "<tr><td class=\"del\"><a href=\"#diff_#{@diff_count+1}\">#{line}</a></td></tr>"
138
+ end
139
+ end
140
+
141
+ def target_line(line)
142
+ line = sanitize(line)
143
+ if @next_block then
144
+ @diff_count = @diff_count + 1
145
+ @next_block = false
146
+ @ostream.puts "<tr><td class=\"add\"><a name=\"diff_#{@diff_count}\"/><a href=\"#diff_#{@diff_count+1}\">#{line}</a></td></tr>"
147
+ else
148
+ @ostream.puts "<tr><td class=\"add\"><a href=\"#diff_#{@diff_count+1}\">#{line}</a></td></tr>"
149
+ end
150
+ end
151
+
152
+ def common_line(line)
153
+ line = sanitize(line)
154
+ @ostream.puts "<tr><td class=\"same\">#{line}</td></tr>"
155
+ @next_block = true
156
+ end
157
+ end
158
+ end
@@ -0,0 +1,118 @@
1
+ #
2
+ # Copyright (c) 2006, xoinu
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # * Redistributions of source code must retain the above copyright notice,
9
+ # this list of conditions and the following disclaimer.
10
+ # * Redistributions in binary form must reproduce the above copyright notice,
11
+ # this list of conditions and the following disclaimer in the documentation
12
+ # and/or other materials provided with the distribution.
13
+ # * Neither the name of the Xoinu nor the names of its contributors may
14
+ # be used to endorse or promote products derived from this software
15
+ # without specific prior written permission.
16
+ #
17
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
21
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
24
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+ #
28
+ require 'kconv'
29
+ require 'diff2xml/parser'
30
+ require 'diff2xml/handler'
31
+ require 'diff2xml/xmltool'
32
+
33
+ module Diff2Xml
34
+ class Diff2Rss20
35
+ include XmlTool
36
+ include Handler
37
+
38
+ attr_accessor :title, :desc, :lang, :url
39
+ attr_writer :ostream
40
+
41
+ @now
42
+ @str_buffer
43
+
44
+ def initialize(os = STDOUT, url = 'http://localhost/', title = 'Diff2Xml', desc = 'Diff RSS', lang = 'en-us')
45
+ @ostream = os
46
+ @url = url
47
+ @title = title
48
+ @desc = desc
49
+ @lang = lang
50
+ @now = Time.now
51
+ @str_buffer = ''
52
+ end
53
+
54
+ #
55
+ # Override
56
+ #
57
+
58
+ def start_parse
59
+ @str_buffer << <<HEAD
60
+ <?xml version=\"1.0\" encoding=\"UTF-8\"?>
61
+ <rss version=\"2.0\">
62
+ <channel>
63
+ <title>#{@title}</title>
64
+ <description>#{@desc}</description>
65
+ <language>#{@lang}/language>
66
+ HEAD
67
+ end
68
+
69
+ def end_parse
70
+ @str_buffer << "</channel>\n</rss>"
71
+ @str_buffer = Kconv.toutf8(@str_buffer)
72
+ @ostream.print @str_buffer
73
+ end
74
+
75
+ def start_document(source, target)
76
+ @str_buffer << <<HEADER
77
+ <item>
78
+ <title>#{source}</title>
79
+ <link>#{@url}##{source}</link>
80
+ <author>Diff2Xml::Diff2Rss20</author>
81
+ <pubDate>#{@now}</pubDate>
82
+ <description>
83
+ <![CDATA[
84
+ HEADER
85
+ @now = @now.succ
86
+ end
87
+
88
+ def end_document
89
+ @str_buffer << "]]>\n</description>\n</item>"
90
+ end
91
+
92
+ def start_block(sourceBase, sourceLength, targetBase, targetLength)
93
+ @str_buffer << <<BLOCK
94
+ <h3>From #{sourceBase} to #{sourceBase.to_i+sourceLength.to_i}</h3>
95
+ <table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\">
96
+ BLOCK
97
+ end
98
+
99
+ def end_block
100
+ @str_buffer << "</table>"
101
+ end
102
+
103
+ def source_line(line)
104
+ line = sanitize(line)
105
+ @str_buffer << "<tr><td bgcolor=\"#aaaaaa\"><tt>#{line}</tt></td></tr>"
106
+ end
107
+
108
+ def target_line(line)
109
+ line = sanitize(line)
110
+ @str_buffer << "<tr><td bgcolor=\"#ffff00\"><tt>#{line}</tt></td></tr>"
111
+ end
112
+
113
+ def common_line(line)
114
+ line = sanitize(line)
115
+ @str_buffer << "<tr><td bgcolor=\"#dddddd\"><tt>#{line}</tt></td></tr>"
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,57 @@
1
+ #
2
+ # Copyright (c) 2006, xoinu
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # * Redistributions of source code must retain the above copyright notice,
9
+ # this list of conditions and the following disclaimer.
10
+ # * Redistributions in binary form must reproduce the above copyright notice,
11
+ # this list of conditions and the following disclaimer in the documentation
12
+ # and/or other materials provided with the distribution.
13
+ # * Neither the name of the Xoinu nor the names of its contributors may
14
+ # be used to endorse or promote products derived from this software
15
+ # without specific prior written permission.
16
+ #
17
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
21
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
24
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+ #
28
+ module Diff2Xml
29
+ module Handler
30
+ def start_parse
31
+ end
32
+
33
+ def end_parse
34
+ end
35
+
36
+ def start_document(source, target)
37
+ end
38
+
39
+ def end_document
40
+ end
41
+
42
+ def start_block(sourceBase, sourceLength, targetBase, targetLength)
43
+ end
44
+
45
+ def end_block
46
+ end
47
+
48
+ def source_line(line)
49
+ end
50
+
51
+ def target_line(line)
52
+ end
53
+
54
+ def common_line(line)
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,77 @@
1
+ #
2
+ # Copyright (c) 2006, xoinu
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # * Redistributions of source code must retain the above copyright notice,
9
+ # this list of conditions and the following disclaimer.
10
+ # * Redistributions in binary form must reproduce the above copyright notice,
11
+ # this list of conditions and the following disclaimer in the documentation
12
+ # and/or other materials provided with the distribution.
13
+ # * Neither the name of the Xoinu nor the names of its contributors may
14
+ # be used to endorse or promote products derived from this software
15
+ # without specific prior written permission.
16
+ #
17
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
21
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
24
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+ #
28
+ module Diff2Xml
29
+ class Parser
30
+ @source
31
+ @started
32
+ @block_started
33
+ @handler
34
+
35
+ def initialize(handler)
36
+ @source = ""
37
+ @started = false
38
+ @block_started = false
39
+ @handler = handler
40
+ end
41
+
42
+ def parse(istream)
43
+ @handler.start_parse
44
+ istream.each do |line|
45
+ if /^\-\-\-[\t\s]*([\w+\.\/\\\:]+)/.match(line) then
46
+ @source = $1
47
+ elsif /^\+\+\+[\t\s]*([\w+\.\/\\\:]+)/.match(line) then
48
+ target = $1
49
+ if @started then
50
+ @handler.end_document
51
+ end
52
+ @handler.start_document(@source, target)
53
+ @started = true
54
+ elsif /^\-(.*)/.match(line) then
55
+ @handler.source_line($1)
56
+ elsif /^\+(.*)/.match(line) then
57
+ @handler.target_line($1)
58
+ elsif /^\s(.*)/.match(line) then
59
+ @handler.common_line($1)
60
+ elsif /^@@\s\-(\d+),(\d+)\s\+(\d+),(\d+)\s@@/.match(line) then
61
+ if @block_started then
62
+ @handler.end_block
63
+ end
64
+ @handler.start_block($1, $2, $3, $4)
65
+ @block_started = true
66
+ end
67
+ end
68
+ if @block_started then
69
+ @handler.end_block
70
+ end
71
+ if @started then
72
+ @handler.end_document
73
+ end
74
+ @handler.end_parse
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,36 @@
1
+ #
2
+ # Copyright (c) 2006, xoinu
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # * Redistributions of source code must retain the above copyright notice,
9
+ # this list of conditions and the following disclaimer.
10
+ # * Redistributions in binary form must reproduce the above copyright notice,
11
+ # this list of conditions and the following disclaimer in the documentation
12
+ # and/or other materials provided with the distribution.
13
+ # * Neither the name of the Xoinu nor the names of its contributors may
14
+ # be used to endorse or promote products derived from this software
15
+ # without specific prior written permission.
16
+ #
17
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
21
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
24
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+ #
28
+ module Diff2Xml #:nodoc:
29
+ module VERSION #:nodoc:
30
+ MAJOR = 0
31
+ MINOR = 0
32
+ TINY = 2
33
+
34
+ STRING = [MAJOR, MINOR, TINY].join('.')
35
+ end
36
+ end
@@ -0,0 +1,51 @@
1
+ #
2
+ # Copyright (c) 2006, xoinu
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # * Redistributions of source code must retain the above copyright notice,
9
+ # this list of conditions and the following disclaimer.
10
+ # * Redistributions in binary form must reproduce the above copyright notice,
11
+ # this list of conditions and the following disclaimer in the documentation
12
+ # and/or other materials provided with the distribution.
13
+ # * Neither the name of the Xoinu nor the names of its contributors may
14
+ # be used to endorse or promote products derived from this software
15
+ # without specific prior written permission.
16
+ #
17
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
21
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
24
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+ #
28
+ module Diff2Xml
29
+ module XmlTool
30
+ def convert_illegal_characters(str)
31
+ ret = str.chomp
32
+ ret.gsub!( '&', '&amp;' )
33
+ ret.gsub!('\'', '&apos;')
34
+ ret.gsub!('"', '&quot;')
35
+ ret.gsub!( '<', '&lt;' )
36
+ ret.gsub!( '>', '&gt;' )
37
+ ret.gsub!("\t", '&nbsp;&nbsp;&nbsp;&nbsp;')
38
+ ret
39
+ end
40
+
41
+ def convert_space(str)
42
+ ret = str.gsub(' ', '&nbsp;')
43
+ 0 == ret.length ? '&nbsp;' : ret
44
+ end
45
+
46
+ def sanitize(str)
47
+ ret = convert_illegal_characters(str)
48
+ ret = convert_space(ret)
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class Diff2xmlTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def test_truth
9
+ assert true
10
+ end
11
+ end
@@ -0,0 +1,2 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../lib/diff2xml'
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.2
3
+ specification_version: 1
4
+ name: diff2xml
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.0.2
7
+ date: 2007-08-14 00:00:00 -07:00
8
+ summary: Generate xml (xhtml, rss, etc.) from unified diff. This package contains diff2xml command-line tool and reusable diff-parser framework.
9
+ require_paths:
10
+ - lib
11
+ email: xoinu@mac.com
12
+ homepage: http://diff2xml.rubyforge.org
13
+ rubyforge_project: diff2xml
14
+ description: Generate xml (xhtml, rss, etc.) from unified diff. This package contains diff2xml command-line tool and reusable diff-parser framework.
15
+ autorequire: diff2xml
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ post_install_message:
29
+ authors:
30
+ - xoinu
31
+ files:
32
+ - README
33
+ - CHANGELOG
34
+ - Rakefile
35
+ - bin/diff2xml
36
+ - test/diff2xml_test.rb
37
+ - test/test_helper.rb
38
+ - lib/diff2xml
39
+ - lib/diff2xml.rb
40
+ - lib/diff2xml/diff2html.rb
41
+ - lib/diff2xml/diff2rss20.rb
42
+ - lib/diff2xml/handler.rb
43
+ - lib/diff2xml/parser.rb
44
+ - lib/diff2xml/version.rb
45
+ - lib/diff2xml/xmltool.rb
46
+ test_files: []
47
+
48
+ rdoc_options:
49
+ - --quiet
50
+ - --title
51
+ - diff2xml documentation
52
+ - --opname
53
+ - index.html
54
+ - --line-numbers
55
+ - --main
56
+ - README
57
+ - --inline-source
58
+ - --exclude
59
+ - ^(examples|extras)/
60
+ extra_rdoc_files:
61
+ - README
62
+ - CHANGELOG
63
+ executables:
64
+ - diff2xml
65
+ extensions: []
66
+
67
+ requirements: []
68
+
69
+ dependencies: []
70
+