csl 1.2.0 → 1.2.1
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.
- checksums.yaml +4 -4
- data/csl.gemspec +7 -1
- data/lib/csl/loader.rb +34 -31
- data/lib/csl/parser.rb +22 -4
- data/lib/csl/treelike.rb +4 -0
- data/lib/csl/version.rb +1 -1
- data/spec/csl/parser_spec.rb +20 -0
- metadata +3 -5
- data/.coveralls.yml +0 -1
- data/.travis.yml +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0dd57180de9ed4d48bb5ce00393929be63df55fe
|
4
|
+
data.tar.gz: c20b280f2e9ec6f596d0453fc4862e23cbf50dec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4d3ddca5ec5ab21e0d9e4ec973356e76f4abae8bf6b75868d7d4ffa7a10bd3853f510f280497302f3cc36f342a58f5238ab3650dc180085d36a595d21a2de4bc
|
7
|
+
data.tar.gz: 2a6911020b2bedc729617cb95c88db7184c5447d897f52d8ebc6ac84dbfd5f92b12a6cba54f78fe871f361eb48b37b4abc3a44b379493c6cb99000595a6d04da
|
data/csl.gemspec
CHANGED
@@ -4,6 +4,12 @@ $:.unshift lib unless $:.include?(lib)
|
|
4
4
|
|
5
5
|
require 'csl/version'
|
6
6
|
|
7
|
+
EXCLUDES = %w{
|
8
|
+
.coveralls.yml
|
9
|
+
.travis.yml
|
10
|
+
.csl.gemspec
|
11
|
+
}
|
12
|
+
|
7
13
|
Gem::Specification.new do |s|
|
8
14
|
s.name = 'csl'
|
9
15
|
s.version = CSL::VERSION.dup
|
@@ -26,7 +32,7 @@ Gem::Specification.new do |s|
|
|
26
32
|
|
27
33
|
s.add_dependency('namae', ['~>0.7'])
|
28
34
|
|
29
|
-
s.files = `git ls-files`.split("\n")
|
35
|
+
s.files = `git ls-files`.split("\n") - EXCLUDES
|
30
36
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
31
37
|
s.executables = []
|
32
38
|
s.require_path = 'lib'
|
data/lib/csl/loader.rb
CHANGED
@@ -18,45 +18,17 @@ module CSL
|
|
18
18
|
# Locale.load('http://example.com/de.xml') -> locale
|
19
19
|
#
|
20
20
|
# Resolves the passed-in path/name or string and loads the asset data.
|
21
|
-
# The data will be passed on to the #parse method of the base class.
|
21
|
+
# The data will be passed on to the #parse! method of the base class.
|
22
22
|
# Typically, this will return a new instance of the class.
|
23
23
|
#
|
24
24
|
# @note
|
25
|
-
# The base class is expected to define a #parse method.
|
25
|
+
# The base class is expected to define a #parse! method.
|
26
26
|
#
|
27
27
|
# @raise ParseError
|
28
28
|
#
|
29
29
|
# @return [Style, Locale] the parsed CSL resource
|
30
30
|
def load(input)
|
31
|
-
|
32
|
-
when input.respond_to?(:read)
|
33
|
-
data = input.read
|
34
|
-
when input.to_s =~ /^\s*</
|
35
|
-
data = input.to_s
|
36
|
-
else
|
37
|
-
|
38
|
-
input = input.to_s
|
39
|
-
|
40
|
-
case
|
41
|
-
when File.exists?(input)
|
42
|
-
location = input
|
43
|
-
when File.exists?(extend_name(input))
|
44
|
-
location = extend_name(input)
|
45
|
-
when File.exists?(extend_path(input))
|
46
|
-
location = extend_path(input)
|
47
|
-
else
|
48
|
-
location = input
|
49
|
-
end
|
50
|
-
|
51
|
-
Kernel.open(location, 'r:UTF-8') do |io|
|
52
|
-
data = io.read
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
parse(data)
|
57
|
-
|
58
|
-
rescue => e
|
59
|
-
raise ParseError, "failed to load #{input.inspect}: #{e.message}"
|
31
|
+
parse! extract_data_from(input)
|
60
32
|
end
|
61
33
|
|
62
34
|
def list
|
@@ -86,6 +58,37 @@ module CSL
|
|
86
58
|
|
87
59
|
name
|
88
60
|
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
def extract_data_from(input)
|
65
|
+
case
|
66
|
+
when input.respond_to?(:read)
|
67
|
+
input.read
|
68
|
+
when input.to_s =~ /^\s*</
|
69
|
+
input.to_s
|
70
|
+
else
|
71
|
+
|
72
|
+
input = input.to_s
|
73
|
+
|
74
|
+
case
|
75
|
+
when File.exists?(input)
|
76
|
+
location = input
|
77
|
+
when File.exists?(extend_name(input))
|
78
|
+
location = extend_name(input)
|
79
|
+
when File.exists?(extend_path(input))
|
80
|
+
location = extend_path(input)
|
81
|
+
else
|
82
|
+
location = input
|
83
|
+
end
|
84
|
+
|
85
|
+
Kernel.open(location, 'r:UTF-8') do |io|
|
86
|
+
io.read
|
87
|
+
end
|
88
|
+
end
|
89
|
+
rescue => e
|
90
|
+
raise ParseError, "failed to extract CSL data from #{input.inspect}: #{e.message}"
|
91
|
+
end
|
89
92
|
end
|
90
93
|
|
91
94
|
end
|
data/lib/csl/parser.rb
CHANGED
@@ -11,7 +11,9 @@ module CSL
|
|
11
11
|
@engines = {
|
12
12
|
:nokogiri => lambda { |source|
|
13
13
|
Nokogiri::XML::Document.parse(source, nil, nil,
|
14
|
-
Nokogiri::XML::ParseOptions::DEFAULT_XML |
|
14
|
+
Nokogiri::XML::ParseOptions::DEFAULT_XML |
|
15
|
+
Nokogiri::XML::ParseOptions::NOBLANKS |
|
16
|
+
Nokogiri::XML::ParseOptions::NOENT)
|
15
17
|
},
|
16
18
|
:default => lambda { |source|
|
17
19
|
REXML::Document.new(source, :compress_whitespace => :all, :ignore_whitespace_nodes => :all)
|
@@ -68,7 +70,7 @@ module CSL
|
|
68
70
|
scope = specialize_scope(root, scope)
|
69
71
|
|
70
72
|
node.children.each do |child|
|
71
|
-
root << parse_tree(child, scope) unless
|
73
|
+
root << parse_tree(child, scope) unless skip?(child)
|
72
74
|
end unless root.textnode?
|
73
75
|
|
74
76
|
root
|
@@ -79,7 +81,12 @@ module CSL
|
|
79
81
|
node.has_text? && node.text
|
80
82
|
else
|
81
83
|
child = node.children[0]
|
82
|
-
child && child.respond_to?(:text?) && child.text?
|
84
|
+
return unless child && child.respond_to?(:text?) && child.text?
|
85
|
+
|
86
|
+
text = child.text
|
87
|
+
return if text.to_s.strip.empty?
|
88
|
+
|
89
|
+
text
|
83
90
|
end
|
84
91
|
end
|
85
92
|
|
@@ -88,7 +95,18 @@ module CSL
|
|
88
95
|
node.respond_to?(:node_type) &&
|
89
96
|
[:comment, :xmldecl, :processing_instruction, 7].include?(node.node_type)
|
90
97
|
end
|
91
|
-
|
98
|
+
|
99
|
+
def text?(node)
|
100
|
+
if defined?(Nokogiri)
|
101
|
+
node.is_a?(Nokogiri::XML::Text)
|
102
|
+
else
|
103
|
+
false
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def skip?(node)
|
108
|
+
comment?(node) || text?(node)
|
109
|
+
end
|
92
110
|
|
93
111
|
def specialize_scope(root, scope = Node)
|
94
112
|
case root
|
data/lib/csl/treelike.rb
CHANGED
data/lib/csl/version.rb
CHANGED
data/spec/csl/parser_spec.rb
CHANGED
@@ -36,6 +36,26 @@ module CSL
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
+
describe 'for an empty name node' do
|
40
|
+
['<name/>', '<name></name>', '<name> </name>'].each do |source|
|
41
|
+
it "returns a Style::Name for #{source.inspect} by default" do
|
42
|
+
Parser.instance.parse!(source).should be_a(Style::Name)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "returns a Style::Name for #{source.inspect} for Style scope" do
|
46
|
+
Parser.instance.parse!(source, Style).should be_a(Style::Name)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "returns a Node for #{source.inspect} for Locale scope" do
|
50
|
+
Parser.instance.parse!(source, Locale).should be_a(Node)
|
51
|
+
end
|
52
|
+
|
53
|
+
it "returns an Info::Name for #{source.inspect} for Info scope" do
|
54
|
+
Parser.instance.parse!(source, Info).should be_a(Info::Name)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
39
59
|
describe 'for <foo bar="x"/>' do
|
40
60
|
let(:source) { '<foo bar="x"/>' }
|
41
61
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: csl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sylvester Keil
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-05-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: namae
|
@@ -32,12 +32,10 @@ executables: []
|
|
32
32
|
extensions: []
|
33
33
|
extra_rdoc_files: []
|
34
34
|
files:
|
35
|
-
- .coveralls.yml
|
36
35
|
- .document
|
37
36
|
- .gitignore
|
38
37
|
- .rspec
|
39
38
|
- .simplecov
|
40
|
-
- .travis.yml
|
41
39
|
- .yardopts
|
42
40
|
- AGPL
|
43
41
|
- BSDL
|
@@ -141,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
141
139
|
version: '0'
|
142
140
|
requirements: []
|
143
141
|
rubyforge_project:
|
144
|
-
rubygems_version: 2.
|
142
|
+
rubygems_version: 2.2.2
|
145
143
|
signing_key:
|
146
144
|
specification_version: 4
|
147
145
|
summary: A Ruby CSL parser and library
|
data/.coveralls.yml
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
service_name: travis-ci
|
data/.travis.yml
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
bundler_args: --without debug extra
|
3
|
-
script: bundle exec rake test_with_coveralls
|
4
|
-
rvm:
|
5
|
-
- 2.1.0
|
6
|
-
- 2.0.0
|
7
|
-
- 1.9.3
|
8
|
-
- jruby-19mode
|
9
|
-
- jruby-head
|
10
|
-
- rbx
|
11
|
-
notifications:
|
12
|
-
email:
|
13
|
-
recipients:
|
14
|
-
- sylvester@keil.or.at
|
15
|
-
on_success: change
|
16
|
-
on_failure: always
|