xmlscan 0.3.0prea → 0.3.0preb
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/VERSION +1 -1
- data/lib/xmlscan/processor.rb +66 -4
- metadata +10 -14
- data/README.processor +0 -33
- data/install.rb +0 -41
- data/test.rb +0 -7
- data/xmlcard.rb +0 -48
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.0preb
|
data/lib/xmlscan/processor.rb
CHANGED
@@ -13,7 +13,9 @@ module XMLScan
|
|
13
13
|
MY_METHODS = XMLScan::Visitor.instance_methods.to_a - SKIP
|
14
14
|
|
15
15
|
def initialize(opts={}, mod=nil)
|
16
|
-
|
16
|
+
raise "No module" unless mod
|
17
|
+
STDERR << "init Element Processer #{mod}\n"
|
18
|
+
(MY_METHODS - mod.instance_methods).each do |i|
|
17
19
|
self.class.class_eval %{def #{i}(d, *a) d&&(@out << d) end}, __FILE__, __LINE__
|
18
20
|
end
|
19
21
|
self.class.send :include, mod
|
@@ -35,13 +37,73 @@ module XMLScan
|
|
35
37
|
class XMLProcessor
|
36
38
|
include ElementProcessor
|
37
39
|
|
38
|
-
def self.process(
|
39
|
-
|
40
|
-
|
40
|
+
def self.process(io, opts={}, mod=nil)
|
41
|
+
mod ||= ElementProcessing
|
42
|
+
STDERR << "process #{io.inspect}, #{opts.inspect}\n"
|
43
|
+
io = case io
|
44
|
+
when String; open(io)
|
45
|
+
when IO, StringIO; io
|
46
|
+
else raise "bad type file input #{io.inspect}"
|
47
|
+
end
|
48
|
+
|
41
49
|
visitor = new(opts, mod)
|
42
50
|
visitor.parser.parse(io)
|
43
51
|
visitor.pairs
|
44
52
|
end
|
45
53
|
end
|
46
54
|
|
55
|
+
|
56
|
+
module ElementProcessing
|
57
|
+
def on_chardata(s) @out << s end
|
58
|
+
def on_stag_end(name, s, h, *a)
|
59
|
+
if name.to_sym == @element
|
60
|
+
# starting a new context, first output our substitute string
|
61
|
+
key= h&&h[@key.to_s]||'*no-name*'
|
62
|
+
@tmpl = ":transclude|{{:name}}" # def: "{{:key}}"
|
63
|
+
STDERR << "templ #{@tmpl.inspect}\n"
|
64
|
+
#STDERR << "x> #{x.inspect}, #{h.inspect}, #{(!(/:\w[\w\d]*/ =~ x)) || h[$&[1..-1].to_s] }\n"
|
65
|
+
sub =
|
66
|
+
@tmpl.split('|').find {|x| !(/:\w[\w\d]*/ =~ x) ||
|
67
|
+
h[$&[1..-1].to_s] }.gsub(/:\w[\w\d]*/) {|m|
|
68
|
+
STDERR << "templ sub match #{m.inspect}, #{h[m[1..-1]]}\n"
|
69
|
+
h[m[1..-1]] }
|
70
|
+
#sub = h['transclude'] || "{{#{key}}}"
|
71
|
+
@out << sub
|
72
|
+
# then push the current context and initialize this one
|
73
|
+
@stack.push([@context, @out, *@ex])
|
74
|
+
@context = key; @out = []
|
75
|
+
@ex = @extras.map {|e| h[e]}
|
76
|
+
else @out << s end # pass through tags we aren't processing
|
77
|
+
end
|
78
|
+
|
79
|
+
def on_etag(name, s=nil)
|
80
|
+
if name.to_sym == @element
|
81
|
+
# output a card (name, content, type)
|
82
|
+
@pairs << [@context, @out, @stack[-1][0], *@ex]
|
83
|
+
# restore previous context from stack
|
84
|
+
last = @stack.pop
|
85
|
+
@context, @out, @ex = last.shift, last.shift, *last
|
86
|
+
else @out << s end
|
87
|
+
end
|
88
|
+
|
89
|
+
def on_stag_empty_end(name, s=nil, h={}, *a)
|
90
|
+
if name.to_sym == @element
|
91
|
+
|
92
|
+
key= h&&h[@key.to_s]||'*no-name*'
|
93
|
+
ex = @extras.map {|e| h[e]}
|
94
|
+
@pairs << [key, [], @context, *ex]
|
95
|
+
else @out << s end
|
96
|
+
end
|
97
|
+
|
98
|
+
attr_reader :pairs, :parser
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
ARGV.each do |a|
|
103
|
+
pairs = XMLScan::XMLProcessor.process(a, {:key=>:name, :element=>:card, :extras=>[:type]}, XMLScan::ElementProcessing)
|
104
|
+
STDOUT << "Result\n"
|
105
|
+
STDOUT << pairs.map do |p| n,o,c,t = p
|
106
|
+
"#{c&&c.size>0&&"#{c}::"||''}#{n}#{t&&"[#{t}]"}=>#{o*''}"
|
107
|
+
end * "\n"
|
108
|
+
STDOUT << "\nDone\n"
|
47
109
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xmlscan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.0preb
|
5
5
|
prerelease: 5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-02-16 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &8986000 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 2.8.0
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *8986000
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rdoc
|
27
|
-
requirement: &
|
27
|
+
requirement: &8985420 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '3.12'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *8985420
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: bundler
|
38
|
-
requirement: &
|
38
|
+
requirement: &8984920 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 1.0.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *8984920
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: jeweler
|
49
|
-
requirement: &
|
49
|
+
requirement: &8984420 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
version: 1.8.3
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *8984420
|
58
58
|
description: The fastest XML parser written in 100% pure Ruby.
|
59
59
|
email: gerryg@inbox.com
|
60
60
|
executables: []
|
@@ -65,12 +65,10 @@ files:
|
|
65
65
|
- ChangeLog
|
66
66
|
- Gemfile
|
67
67
|
- Gemfile.lock
|
68
|
-
- README.processor
|
69
68
|
- README.rdoc
|
70
69
|
- Rakefile
|
71
70
|
- THANKS
|
72
71
|
- VERSION
|
73
|
-
- install.rb
|
74
72
|
- lib/xmlscan/htmlscan.rb
|
75
73
|
- lib/xmlscan/namespace.rb
|
76
74
|
- lib/xmlscan/parser.rb
|
@@ -79,8 +77,6 @@ files:
|
|
79
77
|
- lib/xmlscan/version.rb
|
80
78
|
- lib/xmlscan/visitor.rb
|
81
79
|
- lib/xmlscan/xmlchar.rb
|
82
|
-
- test.rb
|
83
|
-
- xmlcard.rb
|
84
80
|
homepage: http://github.com/GerryG/xmlformat/
|
85
81
|
licenses:
|
86
82
|
- MIT
|
@@ -100,7 +96,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
100
96
|
version: '0'
|
101
97
|
segments:
|
102
98
|
- 0
|
103
|
-
hash:
|
99
|
+
hash: 1414227114206674686
|
104
100
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
101
|
none: false
|
106
102
|
requirements:
|
data/README.processor
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
|
2
|
-
processor = XMLScan::Processor.hash(:element=>:card, :key=>:name) do |k,h,s,|
|
3
|
-
h[:transclude] || "{{#{h[:name]}}}"
|
4
|
-
end
|
5
|
-
|
6
|
-
test_cases [
|
7
|
-
[ '<card name="foo" transclude="{{foo|titled}}">Some
|
8
|
-
<card name="name">Name data</card> and < >
|
9
|
-
<p>para data<b>bold</b>
|
10
|
-
</p><br/>
|
11
|
-
more<card
|
12
|
-
name="+hello" attr=""e;foo"e;"> and <card name="+nested">nested twice data</card>
|
13
|
-
</card>
|
14
|
-
</card>
|
15
|
-
', {
|
16
|
-
'foo' => 'Some
|
17
|
-
{{name}} and < >
|
18
|
-
<p>para data<b>bold</b>
|
19
|
-
</p><br/>
|
20
|
-
more{{+hello}}
|
21
|
-
',
|
22
|
-
'name' => 'Name data',
|
23
|
-
'foo+hello' => ' and {{+nested}}
|
24
|
-
',
|
25
|
-
'foo+hello+nested' => 'nested twice data' } ],
|
26
|
-
]
|
27
|
-
|
28
|
-
test_casts.each { |p|
|
29
|
-
assert processor.call(p[0]) == p[1]
|
30
|
-
}
|
31
|
-
|
32
|
-
|
33
|
-
|
data/install.rb
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby
|
2
|
-
#
|
3
|
-
# install.rb
|
4
|
-
#
|
5
|
-
# $Id: install.rb,v 1.2 2002/12/26 21:09:38 katsu Exp $
|
6
|
-
|
7
|
-
require 'rbconfig'
|
8
|
-
require 'ftools'
|
9
|
-
require 'find'
|
10
|
-
require 'getoptlong'
|
11
|
-
|
12
|
-
DEFAULT_DESTDIR = Config::CONFIG['sitelibdir'] || Config::CONFIG['sitedir']
|
13
|
-
SRCDIR = File.dirname(__FILE__)
|
14
|
-
|
15
|
-
|
16
|
-
def install_rb(from, to)
|
17
|
-
from = SRCDIR + '/' + from
|
18
|
-
Find.find(from) { |src|
|
19
|
-
next unless File.file? src
|
20
|
-
next unless /\.rb\z/ =~ src
|
21
|
-
dst = src.sub(/\A#{Regexp.escape(from)}/, to)
|
22
|
-
File.makedirs File.dirname(dst), true
|
23
|
-
File.install src, dst, 0644, true
|
24
|
-
}
|
25
|
-
end
|
26
|
-
|
27
|
-
|
28
|
-
destdir = DEFAULT_DESTDIR
|
29
|
-
begin
|
30
|
-
GetoptLong.new([ "-d", "--destdir", GetoptLong::REQUIRED_ARGUMENT ]
|
31
|
-
).each_option { |opt, arg|
|
32
|
-
case opt
|
33
|
-
when '-d' then
|
34
|
-
destdir = arg
|
35
|
-
end
|
36
|
-
}
|
37
|
-
rescue
|
38
|
-
exit 2
|
39
|
-
end
|
40
|
-
|
41
|
-
install_rb "lib", destdir
|
data/test.rb
DELETED
data/xmlcard.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
require 'xmlscan/processor'
|
4
|
-
|
5
|
-
# need to make these into supplied blocks somehome
|
6
|
-
module CustomProcessing
|
7
|
-
def on_chardata(s) @out << s end
|
8
|
-
def on_stag_end(name, s, h, *a)
|
9
|
-
if name.to_sym == @element
|
10
|
-
# starting a new context, first output our substitute string
|
11
|
-
key= h&&h[@key.to_s]||'*no-name*'
|
12
|
-
sub = h['transclude'] || "{{#{key}}}"
|
13
|
-
@out << sub
|
14
|
-
# then push the current context and initialize this one
|
15
|
-
@stack.push([@context, @out, *@ex])
|
16
|
-
@context = key; @out = []
|
17
|
-
@ex = @extras.map {|e| h[e]}
|
18
|
-
else @out << s end # pass through tags we aren't processing
|
19
|
-
end
|
20
|
-
|
21
|
-
def on_etag(name, s=nil)
|
22
|
-
if name.to_sym == @element
|
23
|
-
# output a card (name, content, type)
|
24
|
-
@pairs << [@context, @out, @stack[-1][0], *@ex]
|
25
|
-
# restore previous context from stack
|
26
|
-
last = @stack.pop
|
27
|
-
@context, @out, @ex = last.shift, last.shift, *last
|
28
|
-
else @out << s end
|
29
|
-
end
|
30
|
-
|
31
|
-
def on_stag_empty_end(name, s=nil, h={}, *a)
|
32
|
-
if name.to_sym == @element
|
33
|
-
# I don't think we have this case, but it is simple to add later
|
34
|
-
STDERR << "empty card ???: #{name}, #{s}, #{h.inspect}\n"
|
35
|
-
else @out << s end
|
36
|
-
end
|
37
|
-
|
38
|
-
attr_reader :pairs, :parser
|
39
|
-
end
|
40
|
-
|
41
|
-
ARGV.each do |a|
|
42
|
-
pairs = XMLScan::XMLProcessor.process(a, {:key=>:name, :element=>:card, :extras=>[:type]}, CustomProcessing)
|
43
|
-
STDOUT << "Result\n"
|
44
|
-
STDOUT << pairs.map do |p| n,o,c,t = p
|
45
|
-
"#{c&&c.size>0&&"#{c}::"||''}#{n}#{t&&"[#{t}]"}=>#{o*''}"
|
46
|
-
end * "\n"
|
47
|
-
STDOUT << "\nDone\n"
|
48
|
-
end
|