citeproc-js 0.0.2 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +13 -5
- data/README.md +5 -2
- data/auto.watchr +2 -0
- data/citeproc-js.gemspec +2 -2
- data/lib/citeproc/js.rb +1 -4
- data/lib/citeproc/js/engine.rb +59 -61
- data/lib/citeproc/js/version.rb +1 -1
- data/spec/citeproc/js/engine_spec.rb +88 -89
- data/spec/fixtures/items/items.json +2 -2
- metadata +64 -109
- data/lib/citeproc/js/assets.rb +0 -68
- data/spec/citeproc/js/assets_spec.rb +0 -62
data/Gemfile
CHANGED
@@ -1,10 +1,18 @@
|
|
1
1
|
source :rubygems
|
2
2
|
gemspec
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
gem '
|
4
|
+
|
5
|
+
platforms :ruby_19 do
|
6
|
+
gem 'johnson', '~>2.0.0.pre3'
|
7
|
+
gem 'ruby-debug19', :require => 'ruby-debug', :group => :debug
|
8
|
+
end
|
9
|
+
|
10
|
+
platforms :ruby_18 do
|
11
|
+
# gem 'johnson', '~>1.2'
|
12
|
+
gem 'ruby-debug', :group => :debug
|
7
13
|
end
|
8
14
|
|
9
|
-
|
10
|
-
gem '
|
15
|
+
platforms :jruby do
|
16
|
+
gem 'therubyrhino', '~>1.72', :require => 'rhino'
|
17
|
+
gem 'ruby-debug', :group => :debug
|
18
|
+
end
|
data/README.md
CHANGED
@@ -3,7 +3,7 @@ CiteProc::JS Engine
|
|
3
3
|
|
4
4
|
CiteProc::JS Engine is a CSL 1.0 compatible engine for
|
5
5
|
[citeproc](http://rubygems.org/gems/citeproc); it is implemented as a
|
6
|
-
thin Ruby wrapper around Frank G.
|
6
|
+
thin Ruby wrapper around Frank G. Bennett's awesome
|
7
7
|
[citeproc-js](https://bitbucket.org/fbennett/citeproc-js/overview).
|
8
8
|
|
9
9
|
|
@@ -13,7 +13,10 @@ Requirements
|
|
13
13
|
In addition to the dependencies defined by the gem, please make sure to
|
14
14
|
your environment meets the following requirements depending on your platform;
|
15
15
|
|
16
|
-
* For Ruby 1.
|
16
|
+
* For Ruby 1.9, please install this [experimental branch of johnson](https://github.com/inukshuk/johnson):
|
17
|
+
download/clone the repository and run `rake compile` followed by `rake gem`;
|
18
|
+
find and install the pre-release gem in the `pkg` directory.
|
19
|
+
* For Ruby 1.8.7, please install stable [johnson](https://github.com/jbarnette/johnson).
|
17
20
|
* For JRuby, please install [therubyrhino](https://github.com/cowboyd/therubyrhino).
|
18
21
|
|
19
22
|
Support for other platforms is still in development.
|
data/auto.watchr
CHANGED
data/citeproc-js.gemspec
CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.description = 'A citeproc engine based on the citeproc-js CSL (Citation Style Language) processor.'
|
16
16
|
s.license = 'AGPLv3'
|
17
17
|
|
18
|
-
s.add_runtime_dependency('citeproc', ['~>0.0'])
|
18
|
+
s.add_runtime_dependency('citeproc', ['~>0.0.5'])
|
19
19
|
s.add_runtime_dependency('execjs', ['>=1.2.4', '<1.3.0'])
|
20
20
|
|
21
21
|
s.add_development_dependency('cucumber', ['>=1.0.2'])
|
@@ -27,7 +27,7 @@ Gem::Specification.new do |s|
|
|
27
27
|
s.executables = []
|
28
28
|
s.require_path = 'lib'
|
29
29
|
|
30
|
-
s.rdoc_options = %w{--line-numbers --inline-source --title "CiteProc-JS
|
30
|
+
s.rdoc_options = %w{--line-numbers --inline-source --title "CiteProc-JS" --main README.md --webcvs=http://github.com/inukshuk/citeproc-js/tree/master/}
|
31
31
|
s.extra_rdoc_files = %w{README.md}
|
32
32
|
|
33
33
|
end
|
data/lib/citeproc/js.rb
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
|
2
2
|
require 'citeproc/js/compatibility'
|
3
3
|
|
4
|
-
|
5
|
-
ENV['EXECJS_RUNTIME'] = 'Johnson'
|
6
|
-
end
|
4
|
+
ENV['EXECJS_RUNTIME'] = 'Johnson'
|
7
5
|
|
8
6
|
jruby do
|
9
7
|
ENV['EXECJS_RUNTIME'] = 'RubyRhino'
|
@@ -22,5 +20,4 @@ require 'forwardable'
|
|
22
20
|
require 'citeproc'
|
23
21
|
|
24
22
|
require 'citeproc/js/version'
|
25
|
-
require 'citeproc/js/assets'
|
26
23
|
require 'citeproc/js/engine'
|
data/lib/citeproc/js/engine.rb
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
|
2
2
|
module CiteProc
|
3
3
|
module JS
|
4
|
-
|
4
|
+
|
5
5
|
class Engine < CiteProc::Engine
|
6
6
|
|
7
7
|
@name = 'citeproc-js'.freeze
|
8
8
|
@type = 'CSL'.freeze
|
9
9
|
@version = '1.0'
|
10
10
|
@priority = 0
|
11
|
-
|
11
|
+
|
12
12
|
@path = File.expand_path('../support', __FILE__)
|
13
13
|
|
14
14
|
class << self
|
15
|
-
|
15
|
+
|
16
16
|
attr_reader :path
|
17
|
-
|
17
|
+
|
18
18
|
def parser
|
19
19
|
ExecJS.runtime.name =~ /rhino|spidermonkey/i ? 'xmle4x.js' : 'xmldom.js'
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
# Returns the citeproc-js JavaScript code.
|
23
23
|
def source
|
24
24
|
@source || reload
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
# Forces a reload citeproc-js JavaScript code. Returns the source
|
28
28
|
# code.
|
29
29
|
def reload
|
@@ -33,7 +33,7 @@ module CiteProc
|
|
33
33
|
end
|
34
34
|
|
35
35
|
private
|
36
|
-
|
36
|
+
|
37
37
|
def attr_context(*arguments)
|
38
38
|
arguments.flatten.each do |m|
|
39
39
|
define_method(underscore(m)) do
|
@@ -41,7 +41,7 @@ module CiteProc
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
44
|
-
|
44
|
+
|
45
45
|
def delegate_context(*arguments)
|
46
46
|
arguments.flatten.each do |m|
|
47
47
|
define_method(underscore(m)) do |*args|
|
@@ -49,7 +49,7 @@ module CiteProc
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
end
|
52
|
-
|
52
|
+
|
53
53
|
def underscore(javascript_method)
|
54
54
|
word = javascript_method.to_s.split(/\./)[-1]
|
55
55
|
word.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
@@ -58,20 +58,9 @@ module CiteProc
|
|
58
58
|
word
|
59
59
|
end
|
60
60
|
end
|
61
|
-
|
62
61
|
|
63
|
-
#
|
64
|
-
# instance methods
|
65
|
-
#
|
66
62
|
|
67
|
-
|
68
|
-
@style = Style.load(style.to_s)
|
69
|
-
end
|
70
|
-
|
71
|
-
def locales=(locale)
|
72
|
-
@locales = { locale.to_sym => Locale.load(locale.to_s) }
|
73
|
-
end
|
74
|
-
|
63
|
+
|
75
64
|
attr_context :processor_version, :csl_version, :opt
|
76
65
|
|
77
66
|
alias flags opt
|
@@ -79,75 +68,84 @@ module CiteProc
|
|
79
68
|
delegate_context %w{ setOutputFormat updateItems updateUncitedItems
|
80
69
|
makeBibliography appendCitationCluster processCitationCluster
|
81
70
|
previewCitationCluster registry.getSortedRegistryItems }
|
82
|
-
|
71
|
+
|
83
72
|
alias format= set_output_format
|
84
|
-
alias bibliography make_bibliography
|
85
73
|
|
86
74
|
alias sorted_registry_items get_sorted_registry_items
|
87
75
|
|
88
76
|
%w{ append process preview }.each do |m|
|
89
77
|
alias_method m, "#{m}_citation_cluster"
|
90
78
|
end
|
91
|
-
|
79
|
+
|
80
|
+
# Don't expose all delegates to public interface
|
81
|
+
private :opt, :append_citation_cluster, :process_citation_cluster,
|
82
|
+
:set_output_format, :make_bibliography, :preview_citation_cluster,
|
83
|
+
:get_sorted_registry_items
|
84
|
+
|
92
85
|
def registry
|
93
86
|
@registry ||= Hash.new { |h,k| delegate "citeproc.registry.#{k}" }
|
94
87
|
end
|
95
|
-
|
88
|
+
|
96
89
|
def citation_registry
|
97
90
|
@citation_registry ||= Hash.new { |h,k| registry["citationreg.#{k}"] }
|
98
91
|
end
|
99
|
-
|
100
|
-
def language; options[:locale]; end
|
101
|
-
|
102
|
-
def start
|
103
|
-
return if started?
|
104
|
-
super
|
105
|
-
|
106
|
-
self.style = processor.options[:style] if @style.nil?
|
107
|
-
self.locales = processor.options[:locale] if @locales.nil?
|
108
92
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
self
|
116
|
-
rescue => e
|
117
|
-
stop
|
118
|
-
raise EngineError.new('failed to start engine', e)
|
93
|
+
# The processor's items converted to citeproc-js format
|
94
|
+
def items
|
95
|
+
Hash[*processor.items.map { |id, item|
|
96
|
+
[id.to_s, item.respond_to?(:to_citeproc) ? item.to_citeproc : item.to_s]
|
97
|
+
}.flatten]
|
119
98
|
end
|
120
99
|
|
121
|
-
|
122
|
-
|
123
|
-
|
100
|
+
# The locale put into a hash to make citeproc-js happy
|
101
|
+
def locales
|
102
|
+
{ locale.name => locale.to_s }
|
124
103
|
end
|
125
104
|
|
126
|
-
|
105
|
+
# Sets the abbreviation's namespace, both in Ruby and JS land
|
106
|
+
def namespace=(namespace)
|
127
107
|
delegate "citeproc.setAbbreviations(#{ namespace.to_s.inspect })"
|
128
|
-
@
|
108
|
+
@namespace = namespace.to_sym
|
129
109
|
end
|
130
110
|
|
131
|
-
|
111
|
+
def bibliography(selector = Selector.new)
|
112
|
+
Bibliography(make_bibliography(selector.to_citeproc))
|
113
|
+
end
|
114
|
+
|
115
|
+
def append(citation)
|
116
|
+
append_citation_cluster(citation.to_citeproc, false)
|
117
|
+
end
|
132
118
|
|
133
119
|
private
|
134
120
|
|
121
|
+
def context
|
122
|
+
@context || compile_context
|
123
|
+
end
|
124
|
+
|
125
|
+
def compile_context
|
126
|
+
@context = ExecJS.compile(Engine.source)
|
127
|
+
update_system(:abbreviations, :items, :locales)
|
128
|
+
|
129
|
+
delegate "citeproc = new CSL.Engine(system, #{style.to_s.inspect}, #{locale.name.inspect})", :exec
|
130
|
+
set_output_format(options[:format])
|
131
|
+
|
132
|
+
@context
|
133
|
+
rescue => e
|
134
|
+
raise EngineError, "failed to compile engine context: #{e.message}"
|
135
|
+
end
|
136
|
+
|
135
137
|
def update_system(*arguments)
|
136
|
-
arguments = [
|
137
|
-
delegate "system.update(#{ MultiJson.encode(Hash[*arguments.flatten
|
138
|
+
arguments = arguments.flatten.map { |a| [a, send(a)] }
|
139
|
+
delegate "system.update(#{ MultiJson.encode(Hash[*arguments.flatten]) })"
|
138
140
|
end
|
139
|
-
|
141
|
+
|
140
142
|
def delegate(script, method = :eval)
|
141
|
-
|
142
|
-
@context.send(method, script)
|
143
|
-
else
|
144
|
-
warn "not executing script: engine has not been started"
|
145
|
-
end
|
143
|
+
context.send(method, script)
|
146
144
|
rescue => e
|
147
|
-
raise EngineError
|
145
|
+
raise EngineError, "failed to execute javascript: #{e.message}"
|
148
146
|
end
|
149
|
-
|
147
|
+
|
150
148
|
end
|
151
|
-
|
149
|
+
|
152
150
|
end
|
153
151
|
end
|
data/lib/citeproc/js/version.rb
CHANGED
@@ -1,132 +1,131 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
module CiteProc
|
4
6
|
module JS
|
5
7
|
describe 'Engine' do
|
8
|
+
|
9
|
+
let(:items) { load_items('items') }
|
10
|
+
|
11
|
+
let(:processor) do
|
12
|
+
p = Processor.new(:style => 'apa')
|
13
|
+
p.update(items)
|
14
|
+
p
|
15
|
+
end
|
16
|
+
|
6
17
|
before(:all) do
|
7
18
|
Style.root = File.expand_path('../../../fixtures/styles', __FILE__)
|
8
19
|
Locale.root = File.expand_path('../../../fixtures/locales', __FILE__)
|
9
20
|
end
|
10
|
-
|
11
|
-
let(:
|
12
|
-
Engine.new
|
13
|
-
p = double(:processor)
|
14
|
-
p.stub(:options).and_return { Processor.defaults }
|
15
|
-
p.stub(:items).and_return { load_items('items') }
|
16
|
-
e.processor = p
|
17
|
-
end
|
21
|
+
|
22
|
+
let(:engine) do
|
23
|
+
processor.engine = Engine.new(processor)
|
18
24
|
end
|
19
|
-
|
25
|
+
|
20
26
|
it { should_not be nil }
|
21
|
-
|
22
|
-
|
23
|
-
let(:apa) { load_style('apa') }
|
24
|
-
it 'accepts a style name' do
|
25
|
-
subject.style = :apa
|
26
|
-
subject.style.to_s.should == apa
|
27
|
-
end
|
28
|
-
it 'accepts a style name with extension' do
|
29
|
-
subject.style = 'apa.csl'
|
30
|
-
subject.style.to_s.should == apa
|
31
|
-
end
|
32
|
-
it 'accepts a full style' do
|
33
|
-
subject.style = apa
|
34
|
-
subject.style.to_s.should == apa
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
27
|
+
|
28
|
+
|
38
29
|
describe '#version' do
|
39
30
|
it 'returns a 1.x version string' do
|
40
|
-
|
31
|
+
engine.version.should =~ /^1\.[\d\.]+/
|
41
32
|
end
|
42
33
|
end
|
43
34
|
|
44
35
|
describe '#name' do
|
45
36
|
it 'returns "citeproc-js"' do
|
46
|
-
|
37
|
+
engine.name.should == 'citeproc-js'
|
47
38
|
end
|
48
39
|
end
|
49
|
-
|
40
|
+
|
50
41
|
describe '#type' do
|
51
42
|
it 'returns "CSL"' do
|
52
|
-
|
43
|
+
engine.type.should == 'CSL'
|
53
44
|
end
|
54
45
|
end
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
p.stub(:options).and_return { Processor.defaults }
|
61
|
-
p.stub(:items).and_return { load_items('items') }
|
62
|
-
e.processor = p
|
63
|
-
e.style = :apa
|
64
|
-
e.locales = :'en-US'
|
65
|
-
e.start
|
66
|
-
end
|
46
|
+
|
47
|
+
|
48
|
+
describe '#processor_version' do
|
49
|
+
it 'returns the citeproc-js version' do
|
50
|
+
engine.processor_version.should =~ /^[\d\.]+$/
|
67
51
|
end
|
52
|
+
end
|
68
53
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
end
|
54
|
+
describe '#flags' do
|
55
|
+
it 'returns a hash of flags' do
|
56
|
+
engine.flags.should have_key('sort_citations')
|
73
57
|
end
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
58
|
+
end
|
59
|
+
|
60
|
+
describe '#namespace=' do
|
61
|
+
it 'sets the abbreviation namespace' do
|
62
|
+
lambda { engine.namespace = :default }.should_not raise_error
|
79
63
|
end
|
64
|
+
end
|
80
65
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
end
|
66
|
+
describe '#registry' do
|
67
|
+
it 'is a hash' do
|
68
|
+
engine.registry.should be_a(Hash)
|
85
69
|
end
|
70
|
+
end
|
86
71
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
72
|
+
describe '#update_items' do
|
73
|
+
it 'given a list of ids, loads the corresponding items into the engine' do
|
74
|
+
expect { engine.update_items(['ITEM-1']) }.to
|
75
|
+
change { engine.registry[:inserts].length }.by(1)
|
91
76
|
end
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe '#bibliography' do
|
80
|
+
it 'returns an empty bibliography by default' do
|
81
|
+
engine.bibliography.should be_empty
|
98
82
|
end
|
99
83
|
|
100
|
-
describe '
|
101
|
-
|
102
|
-
subject.bibliography[1].should be_empty
|
103
|
-
end
|
84
|
+
describe 'when items were updated' do
|
85
|
+
before(:each) { engine.update_items(['ITEM-1']) }
|
104
86
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
it 'returns the bibliography when at least one item was processed' do
|
109
|
-
subject.bibliography[1].should_not be_empty
|
110
|
-
end
|
87
|
+
it 'returns the bibliography when at least one item was processed' do
|
88
|
+
engine.bibliography.should_not be_empty
|
111
89
|
end
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
it 'returns an empty bibliography by default' do
|
116
|
-
subject.sorted_registry_items.should be_empty
|
90
|
+
|
91
|
+
it 'the bibliography contains the processed items' do
|
92
|
+
engine.bibliography[0].should match(/Boundaries of Dissent/)
|
117
93
|
end
|
94
|
+
end
|
95
|
+
end
|
118
96
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
97
|
+
describe '#append' do
|
98
|
+
|
99
|
+
it 'returns the citation id and string for the item' do
|
100
|
+
engine.append(CitationData.new([{:id => 'ITEM-1'}]))[0][1].should == '(D’Arcus, 2006)'
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'increases the citation index on subsequent calls' do
|
104
|
+
x = engine.append(CitationData.new([{:id => 'ITEM-1'}]))[0][0]
|
105
|
+
engine.append(CitationData.new([{:id => 'ITEM-1'}]))[0][0].should > x
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'includes the locator' do
|
109
|
+
engine.append(CitationData.new([{:id => 'ITEM-1', :locator => 'PAGE'}]))[0][1].should match(/PAGE/)
|
126
110
|
end
|
127
111
|
|
128
112
|
end
|
129
113
|
|
130
|
-
|
131
|
-
|
114
|
+
describe '#sorted_registry_items' do
|
115
|
+
it 'returns an empty bibliography by default' do
|
116
|
+
engine.sorted_registry_items.should be_empty
|
117
|
+
end
|
118
|
+
|
119
|
+
describe 'when items were processed' do
|
120
|
+
before(:each) { engine.update_items(['ITEM-1']) }
|
121
|
+
|
122
|
+
it 'returns the bibliography when at least one item was processed' do
|
123
|
+
engine.sorted_registry_items.should_not be_empty
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
132
131
|
end
|
@@ -9,9 +9,9 @@
|
|
9
9
|
"static-ordering": false
|
10
10
|
}
|
11
11
|
],
|
12
|
-
|
12
|
+
"note":"The apostrophe in Bruce's name appears in proper typeset form.",
|
13
13
|
"publisher": "Routledge",
|
14
|
-
|
14
|
+
"publisher-place": "New York",
|
15
15
|
"issued": {
|
16
16
|
"date-parts":[
|
17
17
|
[2006]
|
metadata
CHANGED
@@ -1,118 +1,83 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: citeproc-js
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 2
|
10
|
-
version: 0.0.2
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Sylvester Keil
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-11-06 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: citeproc
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &2153050420 !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
18
|
+
requirements:
|
26
19
|
- - ~>
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
- 0
|
32
|
-
version: "0.0"
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.0.5
|
33
22
|
type: :runtime
|
34
|
-
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: execjs
|
37
23
|
prerelease: false
|
38
|
-
|
24
|
+
version_requirements: *2153050420
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: execjs
|
27
|
+
requirement: &2153048140 !ruby/object:Gem::Requirement
|
39
28
|
none: false
|
40
|
-
requirements:
|
41
|
-
- -
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
hash: 23
|
44
|
-
segments:
|
45
|
-
- 1
|
46
|
-
- 2
|
47
|
-
- 4
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
48
32
|
version: 1.2.4
|
49
33
|
- - <
|
50
|
-
- !ruby/object:Gem::Version
|
51
|
-
hash: 27
|
52
|
-
segments:
|
53
|
-
- 1
|
54
|
-
- 3
|
55
|
-
- 0
|
34
|
+
- !ruby/object:Gem::Version
|
56
35
|
version: 1.3.0
|
57
36
|
type: :runtime
|
58
|
-
version_requirements: *id002
|
59
|
-
- !ruby/object:Gem::Dependency
|
60
|
-
name: cucumber
|
61
37
|
prerelease: false
|
62
|
-
|
38
|
+
version_requirements: *2153048140
|
39
|
+
- !ruby/object:Gem::Dependency
|
40
|
+
name: cucumber
|
41
|
+
requirement: &2153046920 !ruby/object:Gem::Requirement
|
63
42
|
none: false
|
64
|
-
requirements:
|
65
|
-
- -
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
hash: 19
|
68
|
-
segments:
|
69
|
-
- 1
|
70
|
-
- 0
|
71
|
-
- 2
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
72
46
|
version: 1.0.2
|
73
47
|
type: :development
|
74
|
-
version_requirements: *id003
|
75
|
-
- !ruby/object:Gem::Dependency
|
76
|
-
name: rspec
|
77
48
|
prerelease: false
|
78
|
-
|
49
|
+
version_requirements: *2153046920
|
50
|
+
- !ruby/object:Gem::Dependency
|
51
|
+
name: rspec
|
52
|
+
requirement: &2153046100 !ruby/object:Gem::Requirement
|
79
53
|
none: false
|
80
|
-
requirements:
|
81
|
-
- -
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
hash: 23
|
84
|
-
segments:
|
85
|
-
- 2
|
86
|
-
- 6
|
87
|
-
- 0
|
54
|
+
requirements:
|
55
|
+
- - ! '>='
|
56
|
+
- !ruby/object:Gem::Version
|
88
57
|
version: 2.6.0
|
89
58
|
type: :development
|
90
|
-
version_requirements: *id004
|
91
|
-
- !ruby/object:Gem::Dependency
|
92
|
-
name: watchr
|
93
59
|
prerelease: false
|
94
|
-
|
60
|
+
version_requirements: *2153046100
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: watchr
|
63
|
+
requirement: &2153042660 !ruby/object:Gem::Requirement
|
95
64
|
none: false
|
96
|
-
requirements:
|
97
|
-
- -
|
98
|
-
- !ruby/object:Gem::Version
|
99
|
-
|
100
|
-
segments:
|
101
|
-
- 0
|
102
|
-
- 7
|
103
|
-
version: "0.7"
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.7'
|
104
69
|
type: :development
|
105
|
-
|
106
|
-
|
107
|
-
|
70
|
+
prerelease: false
|
71
|
+
version_requirements: *2153042660
|
72
|
+
description: A citeproc engine based on the citeproc-js CSL (Citation Style Language)
|
73
|
+
processor.
|
74
|
+
email:
|
108
75
|
- http://sylvester.keil.or.at
|
109
76
|
executables: []
|
110
|
-
|
111
77
|
extensions: []
|
112
|
-
|
113
|
-
extra_rdoc_files:
|
78
|
+
extra_rdoc_files:
|
114
79
|
- README.md
|
115
|
-
files:
|
80
|
+
files:
|
116
81
|
- .gitignore
|
117
82
|
- .rspec
|
118
83
|
- Gemfile
|
@@ -121,7 +86,6 @@ files:
|
|
121
86
|
- auto.watchr
|
122
87
|
- citeproc-js.gemspec
|
123
88
|
- lib/citeproc/js.rb
|
124
|
-
- lib/citeproc/js/assets.rb
|
125
89
|
- lib/citeproc/js/compatibility.rb
|
126
90
|
- lib/citeproc/js/engine.rb
|
127
91
|
- lib/citeproc/js/support/citeproc.js
|
@@ -129,53 +93,44 @@ files:
|
|
129
93
|
- lib/citeproc/js/support/xmldom.js
|
130
94
|
- lib/citeproc/js/support/xmle4x.js
|
131
95
|
- lib/citeproc/js/version.rb
|
132
|
-
- spec/citeproc/js/assets_spec.rb
|
133
96
|
- spec/citeproc/js/engine_spec.rb
|
134
97
|
- spec/fixtures/items/items.json
|
135
98
|
- spec/fixtures/locales/locales-en-US.xml
|
136
99
|
- spec/fixtures/styles/apa.csl
|
137
100
|
- spec/spec_helper.rb
|
138
101
|
homepage: http://inukshuk.github.com/citeproc-js
|
139
|
-
licenses:
|
102
|
+
licenses:
|
140
103
|
- AGPLv3
|
141
104
|
post_install_message:
|
142
|
-
rdoc_options:
|
105
|
+
rdoc_options:
|
143
106
|
- --line-numbers
|
144
107
|
- --inline-source
|
145
108
|
- --title
|
146
|
-
- "
|
109
|
+
- ! '"CiteProc-JS"'
|
147
110
|
- --main
|
148
111
|
- README.md
|
149
112
|
- --webcvs=http://github.com/inukshuk/citeproc-js/tree/master/
|
150
|
-
require_paths:
|
113
|
+
require_paths:
|
151
114
|
- lib
|
152
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
115
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
153
116
|
none: false
|
154
|
-
requirements:
|
155
|
-
- -
|
156
|
-
- !ruby/object:Gem::Version
|
157
|
-
|
158
|
-
|
159
|
-
- 0
|
160
|
-
version: "0"
|
161
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - ! '>='
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
121
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
162
122
|
none: false
|
163
|
-
requirements:
|
164
|
-
- -
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
|
167
|
-
segments:
|
168
|
-
- 0
|
169
|
-
version: "0"
|
123
|
+
requirements:
|
124
|
+
- - ! '>='
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
170
127
|
requirements: []
|
171
|
-
|
172
128
|
rubyforge_project:
|
173
|
-
rubygems_version: 1.8.
|
129
|
+
rubygems_version: 1.8.10
|
174
130
|
signing_key:
|
175
131
|
specification_version: 3
|
176
132
|
summary: A citeproc engine based on citeproc-js.
|
177
|
-
test_files:
|
178
|
-
- spec/citeproc/js/assets_spec.rb
|
133
|
+
test_files:
|
179
134
|
- spec/citeproc/js/engine_spec.rb
|
180
135
|
- spec/fixtures/items/items.json
|
181
136
|
- spec/fixtures/locales/locales-en-US.xml
|
data/lib/citeproc/js/assets.rb
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
require 'uri'
|
2
|
-
|
3
|
-
module CiteProc
|
4
|
-
module JS
|
5
|
-
module Asset
|
6
|
-
|
7
|
-
def self.included(base)
|
8
|
-
base.extend(ClassMethods)
|
9
|
-
end
|
10
|
-
|
11
|
-
attr_accessor :asset
|
12
|
-
|
13
|
-
alias to_s asset
|
14
|
-
|
15
|
-
def inspect
|
16
|
-
to_s.inspect
|
17
|
-
end
|
18
|
-
|
19
|
-
module ClassMethods
|
20
|
-
|
21
|
-
attr_accessor :root, :extension, :prefix
|
22
|
-
|
23
|
-
def load(asset)
|
24
|
-
instance = new
|
25
|
-
case
|
26
|
-
when File.exists?(asset)
|
27
|
-
instance.asset = read(asset)
|
28
|
-
when File.exists?(File.join(root.to_s, extend_name(asset)))
|
29
|
-
instance.asset = read(File.join(root.to_s, extend_name(asset)))
|
30
|
-
else
|
31
|
-
instance.asset = asset
|
32
|
-
end
|
33
|
-
instance
|
34
|
-
end
|
35
|
-
|
36
|
-
private
|
37
|
-
|
38
|
-
def read(name)
|
39
|
-
io = open(name, 'r:UTF-8')
|
40
|
-
io.read
|
41
|
-
ensure
|
42
|
-
io.close
|
43
|
-
end
|
44
|
-
|
45
|
-
def extend_name(file)
|
46
|
-
file = File.extname(file).empty? ? [file, extension].compact.join : file
|
47
|
-
file = file.start_with?(prefix.to_s) ? file : [prefix,file].join
|
48
|
-
file
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
53
|
-
|
54
|
-
class Style
|
55
|
-
include Asset
|
56
|
-
@root = '/usr/local/share/citation-style-language/styles'.freeze
|
57
|
-
@extension = '.csl'.freeze
|
58
|
-
end
|
59
|
-
|
60
|
-
class Locale
|
61
|
-
include Asset
|
62
|
-
@root = '/usr/local/share/citation-style-language/locales'.freeze
|
63
|
-
@extension = '.xml'.freeze
|
64
|
-
@prefix = 'locales-'
|
65
|
-
end
|
66
|
-
|
67
|
-
end
|
68
|
-
end
|
@@ -1,62 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'tempfile'
|
3
|
-
|
4
|
-
module CiteProc
|
5
|
-
module JS
|
6
|
-
|
7
|
-
describe 'Assets' do
|
8
|
-
let(:file) { Tempfile.new('asset') }
|
9
|
-
let(:root) { File.dirname(file.path) }
|
10
|
-
let(:name) { File.basename(file.path) }
|
11
|
-
let(:extension) { File.extname(name) }
|
12
|
-
|
13
|
-
before(:all) do
|
14
|
-
file.write("asset content\n")
|
15
|
-
file.close
|
16
|
-
end
|
17
|
-
|
18
|
-
after(:all) { file.unlink }
|
19
|
-
|
20
|
-
describe 'Style' do
|
21
|
-
|
22
|
-
before(:all) do
|
23
|
-
@default_root = Style.root
|
24
|
-
@default_extension = Style.extension
|
25
|
-
Style.root = root
|
26
|
-
Style.extension = extension
|
27
|
-
end
|
28
|
-
|
29
|
-
after(:all) do
|
30
|
-
Style.root = @default_root
|
31
|
-
Style.extension = @default_extension
|
32
|
-
end
|
33
|
-
|
34
|
-
describe '.load' do
|
35
|
-
|
36
|
-
it 'accepts an absolute file name' do
|
37
|
-
Style.load(file.path).to_s.should == "asset content\n"
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'accepts a file name' do
|
41
|
-
Style.load(name).to_s.should == "asset content\n"
|
42
|
-
end
|
43
|
-
|
44
|
-
# it 'accepts a file name without extension' do
|
45
|
-
# Style.load(name.sub(/#{extension}$/,'')).to_s.should == "asset content\n"
|
46
|
-
# end
|
47
|
-
#
|
48
|
-
#
|
49
|
-
# it 'accepts a uri' do
|
50
|
-
# pending
|
51
|
-
# end
|
52
|
-
|
53
|
-
it 'returns the given string if it is neither file nor uri' do
|
54
|
-
Style.load('foo bar!').to_s.should == 'foo bar!'
|
55
|
-
end
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|