citeproc-ruby 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +8 -0
- data/lib/citeproc.rb +3 -5
- data/lib/citeproc/version.rb +1 -1
- data/lib/csl/nodes.rb +6 -2
- data/lib/csl/sort.rb +9 -1
- data/lib/plugins/formats/default.rb +4 -4
- data/lib/support/compatibility.rb +83 -0
- metadata +17 -27
data/README.md
CHANGED
@@ -14,11 +14,19 @@ and `citeproc-js` gems; meanwhile, however, these gems are not compatible, so if
|
|
14
14
|
you want to use the current `citeproc-ruby` gem, make sure that neither of the
|
15
15
|
other gems is installed.
|
16
16
|
|
17
|
+
Unicode support may be provided by the `unicode-utils` gem (on Ruby 1.9 only),
|
18
|
+
by ActiveSupport, by the `unicode` gem (on Ruby 1.8 only), by the Java-based
|
19
|
+
support in JRuby, or naively by the `upcase` and `downcase` methods present
|
20
|
+
in Ruby by default. These gems are not installed automatically; install one
|
21
|
+
manually if you want enhanced Unicode support.
|
22
|
+
|
17
23
|
|
18
24
|
Quickstart
|
19
25
|
----------
|
20
26
|
|
21
27
|
$ [sudo] gem install citeproc-ruby
|
28
|
+
$ [sudo] gem install unicode-utils # Ruby 1.9
|
29
|
+
$ [sudo] gem install unicode # Ruby 1.8
|
22
30
|
$ irb
|
23
31
|
>> require 'citeproc'
|
24
32
|
>> book = {
|
data/lib/citeproc.rb
CHANGED
@@ -1,17 +1,14 @@
|
|
1
1
|
$:.unshift(File.dirname(__FILE__)) unless
|
2
2
|
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
3
|
|
4
|
+
$KCODE = 'UTF-8' if RUBY_VERSION < '1.9.0' && $KCODE.nil?
|
5
|
+
|
4
6
|
require 'open-uri'
|
5
7
|
|
6
8
|
require 'logging'
|
7
9
|
require 'nokogiri'
|
8
10
|
require 'json'
|
9
11
|
|
10
|
-
#require 'activesupport'
|
11
|
-
|
12
|
-
require 'unicode_utils/upcase'
|
13
|
-
require 'unicode_utils/downcase'
|
14
|
-
|
15
12
|
module CiteProc
|
16
13
|
|
17
14
|
@log = Logging.logger[self.name]
|
@@ -39,6 +36,7 @@ end
|
|
39
36
|
require 'extensions/core'
|
40
37
|
require 'support/attributes'
|
41
38
|
require 'support/tree'
|
39
|
+
require 'support/compatibility'
|
42
40
|
|
43
41
|
require 'csl/node'
|
44
42
|
require 'csl/term'
|
data/lib/citeproc/version.rb
CHANGED
data/lib/csl/nodes.rb
CHANGED
@@ -368,7 +368,8 @@ module CSL
|
|
368
368
|
def format_page_range(value, format)
|
369
369
|
return value unless value.match(/([a-z]*)(\d+)\s*\D\s*([a-z]*)(\d+)/i)
|
370
370
|
|
371
|
-
tokens = [$1, $2, "\
|
371
|
+
tokens = [$1, $2, "\xe2\x80\x93", $3, $4]
|
372
|
+
tokens[2].force_encoding("UTF-8") if RUBY_VERSION >= '1.9.0'
|
372
373
|
|
373
374
|
# normalize page range to expanded form
|
374
375
|
f, t = tokens[1].chars.to_a, tokens[4].chars.to_a
|
@@ -620,7 +621,10 @@ module CSL
|
|
620
621
|
protected
|
621
622
|
|
622
623
|
def set_defaults
|
623
|
-
self['range-delimiter']
|
624
|
+
unless self['range-delimiter']
|
625
|
+
self['range-delimiter'] = "\xe2\x80\x93"
|
626
|
+
self['range-delimiter'].force_encoding("UTF-8") if RUBY_VERSION >= '1.9.0'
|
627
|
+
end
|
624
628
|
end
|
625
629
|
end
|
626
630
|
|
data/lib/csl/sort.rb
CHANGED
@@ -11,7 +11,15 @@ module CSL
|
|
11
11
|
keys.each do |key|
|
12
12
|
this, that = key.convert(a, processor), key.convert(b, processor)
|
13
13
|
|
14
|
-
|
14
|
+
# Duplicate Ruby 1.9's <=> behavior for nil
|
15
|
+
if this.nil? && that.nil?
|
16
|
+
comparison = 0
|
17
|
+
elsif this.nil? || that.nil?
|
18
|
+
comparison = nil
|
19
|
+
else
|
20
|
+
comparison = this <=> that
|
21
|
+
end
|
22
|
+
|
15
23
|
comparison = comparison * -1 if comparison && key.descending?
|
16
24
|
|
17
25
|
comparison = comparison ? comparison : that.nil? ? -1 : 1
|
@@ -102,14 +102,14 @@ module CiteProc
|
|
102
102
|
|
103
103
|
case text_case
|
104
104
|
when 'lowercase'
|
105
|
-
@tokens.each { |token| token.content =
|
105
|
+
@tokens.each { |token| token.content = Support.downcase(token.content) }
|
106
106
|
|
107
107
|
when 'uppercase'
|
108
|
-
@tokens.each { |token| token.content =
|
108
|
+
@tokens.each { |token| token.content = Support.upcase(token.content) }
|
109
109
|
|
110
110
|
when 'capitalize-first'
|
111
111
|
token = @tokens.detect { |token| !token.annotations.include?('nocase') }
|
112
|
-
token.content.sub!(/^./) {
|
112
|
+
token.content.sub!(/^./) { Support.upcase($&) }
|
113
113
|
|
114
114
|
when 'capitalize-all'
|
115
115
|
# @tokens.each { |token| token.content.gsub!(/\b\w/) { $&.upcase } unless token.annotations.include?('nocase') }
|
@@ -117,7 +117,7 @@ module CiteProc
|
|
117
117
|
|
118
118
|
# TODO exact specification?
|
119
119
|
when 'title'
|
120
|
-
@tokens.each { |token| token.content = token.content.split(/(\s+)/).map { |w| w.match(/^(and|of|a|an|the)$/i) ? w : w.gsub(/\b\w/) {
|
120
|
+
@tokens.each { |token| token.content = token.content.split(/(\s+)/).map { |w| w.match(/^(and|of|a|an|the)$/i) ? w : w.gsub(/\b\w/) { Support.upcase($&) } }.join.sub(/^(\w)/) {$&.upcase} unless token.annotations.include?('nocase') }
|
121
121
|
|
122
122
|
# TODO exact specification?
|
123
123
|
when 'sentence'
|
@@ -0,0 +1,83 @@
|
|
1
|
+
|
2
|
+
# Remove the 'id' and 'type' methods in Ruby 1.8, as they're used all over
|
3
|
+
# the source
|
4
|
+
if RUBY_VERSION < "1.9.0"
|
5
|
+
class Object
|
6
|
+
undef_method :id
|
7
|
+
undef_method :type
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
# Robust solutions for Unicode
|
12
|
+
if RUBY_PLATFORM == 'java'
|
13
|
+
require 'java'
|
14
|
+
|
15
|
+
module Support
|
16
|
+
def self.upcase(string)
|
17
|
+
java.lang.String.new(string).to_upper_case(java.util.Locale::ENGLISH).to_s
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.downcase(string)
|
21
|
+
java.lang.String.new(string).to_lower_case(java.util.Locale::ENGLISH).to_s
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
else
|
26
|
+
|
27
|
+
begin
|
28
|
+
require 'unicode'
|
29
|
+
|
30
|
+
module Support
|
31
|
+
def self.upcase(string)
|
32
|
+
Unicode.upcase(string)
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.downcase(string)
|
36
|
+
Unicode.downcase(string)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
rescue LoadError
|
41
|
+
begin
|
42
|
+
require 'unicode_utils'
|
43
|
+
|
44
|
+
module Support
|
45
|
+
def self.upcase(string)
|
46
|
+
UnicodeUtils.upcase(string)
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.downcase(string)
|
50
|
+
UnicodeUtils.downcase(string)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
rescue LoadError
|
55
|
+
begin
|
56
|
+
require 'active_support/multibyte/chars'
|
57
|
+
|
58
|
+
module Support
|
59
|
+
def self.upcase(string)
|
60
|
+
ActiveSupport::Multibyte::Chars.new(string).upcase.to_s
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.downcase(string)
|
64
|
+
ActiveSupport::Multibyte::Chars.new(string).downcase.to_s
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
rescue LoadError
|
69
|
+
|
70
|
+
module Support
|
71
|
+
def self.upcase(string)
|
72
|
+
string.upcase
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.downcase(string)
|
76
|
+
string.downcase
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: citeproc-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-02-01 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: logging
|
16
|
-
requirement: &
|
16
|
+
requirement: &2152765020 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '1.5'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2152765020
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: nokogiri
|
27
|
-
requirement: &
|
27
|
+
requirement: &2152764360 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,21 +32,10 @@ dependencies:
|
|
32
32
|
version: '1.4'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: unicode_utils
|
38
|
-
requirement: &2156695620 !ruby/object:Gem::Requirement
|
39
|
-
none: false
|
40
|
-
requirements:
|
41
|
-
- - ~>
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: '1.0'
|
44
|
-
type: :runtime
|
45
|
-
prerelease: false
|
46
|
-
version_requirements: *2156695620
|
35
|
+
version_requirements: *2152764360
|
47
36
|
- !ruby/object:Gem::Dependency
|
48
37
|
name: bundler
|
49
|
-
requirement: &
|
38
|
+
requirement: &2152763640 !ruby/object:Gem::Requirement
|
50
39
|
none: false
|
51
40
|
requirements:
|
52
41
|
- - ~>
|
@@ -54,10 +43,10 @@ dependencies:
|
|
54
43
|
version: '1.0'
|
55
44
|
type: :development
|
56
45
|
prerelease: false
|
57
|
-
version_requirements: *
|
46
|
+
version_requirements: *2152763640
|
58
47
|
- !ruby/object:Gem::Dependency
|
59
48
|
name: rdoc
|
60
|
-
requirement: &
|
49
|
+
requirement: &2152762940 !ruby/object:Gem::Requirement
|
61
50
|
none: false
|
62
51
|
requirements:
|
63
52
|
- - ~>
|
@@ -65,10 +54,10 @@ dependencies:
|
|
65
54
|
version: '2.5'
|
66
55
|
type: :development
|
67
56
|
prerelease: false
|
68
|
-
version_requirements: *
|
57
|
+
version_requirements: *2152762940
|
69
58
|
- !ruby/object:Gem::Dependency
|
70
59
|
name: rake
|
71
|
-
requirement: &
|
60
|
+
requirement: &2152762240 !ruby/object:Gem::Requirement
|
72
61
|
none: false
|
73
62
|
requirements:
|
74
63
|
- - ! '>='
|
@@ -76,10 +65,10 @@ dependencies:
|
|
76
65
|
version: 0.8.0
|
77
66
|
type: :development
|
78
67
|
prerelease: false
|
79
|
-
version_requirements: *
|
68
|
+
version_requirements: *2152762240
|
80
69
|
- !ruby/object:Gem::Dependency
|
81
70
|
name: rspec
|
82
|
-
requirement: &
|
71
|
+
requirement: &2152761540 !ruby/object:Gem::Requirement
|
83
72
|
none: false
|
84
73
|
requirements:
|
85
74
|
- - ~>
|
@@ -87,10 +76,10 @@ dependencies:
|
|
87
76
|
version: '2.5'
|
88
77
|
type: :development
|
89
78
|
prerelease: false
|
90
|
-
version_requirements: *
|
79
|
+
version_requirements: *2152761540
|
91
80
|
- !ruby/object:Gem::Dependency
|
92
81
|
name: cucumber
|
93
|
-
requirement: &
|
82
|
+
requirement: &2152761000 !ruby/object:Gem::Requirement
|
94
83
|
none: false
|
95
84
|
requirements:
|
96
85
|
- - ~>
|
@@ -98,7 +87,7 @@ dependencies:
|
|
98
87
|
version: '0.3'
|
99
88
|
type: :development
|
100
89
|
prerelease: false
|
101
|
-
version_requirements: *
|
90
|
+
version_requirements: *2152761000
|
102
91
|
description: A CSL (Citation Style Language) Processor
|
103
92
|
email:
|
104
93
|
- http://sylvester.keil.or.at
|
@@ -130,6 +119,7 @@ files:
|
|
130
119
|
- lib/plugins/formats/default.rb
|
131
120
|
- lib/plugins/formats/html.rb
|
132
121
|
- lib/support/attributes.rb
|
122
|
+
- lib/support/compatibility.rb
|
133
123
|
- lib/support/tree.rb
|
134
124
|
- resource/locale/locales-af-ZA.xml
|
135
125
|
- resource/locale/locales-ar-AR.xml
|