citeproc 0.0.8 → 0.0.9

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.
@@ -1,49 +1,14 @@
1
-
2
1
  module CiteProc
3
2
 
4
- # = Bibliography
5
- #
6
- # Typically a Bibliography is returned by the Processor. It contains a list
7
- # of references and formatting options.
3
+ # Typically a {Bibliography} is returned by a {Processor} instance. It
4
+ # contains a list of references and formatting options.
8
5
  #
9
6
  # A Bibliography can be created from (and exported to) CiteProc JSON
10
- # bibliographies; these consist of a two-element list, composed of a
7
+ # bibliographies; these consist of a two-element list, composed of a
11
8
  # JavaScript array containing certain formatting parameters, and a list of
12
9
  # strings representing bibliography entries.
13
10
  #
14
- # == Bibliography Formatting Options
15
- #
16
- # :offset => 0
17
- # Some citation styles apply a label (either a number or an alphanumeric
18
- # code) to each bibliography entry, and use this label to cite
19
- # bibliography items in the main text. In the bibliography, the labels
20
- # may either be hung in the margin, or they may be set flush to the
21
- # margin, with the citations indented by a uniform amount to the right.
22
- # In the latter case, the amount of indentation needed depends on the
23
- # maximum width of any label. The :offset option gives the maximum
24
- # number of characters that appear in any label used in the
25
- # bibliography. The client that controls the final rendering of the
26
- # bibliography string should use this value to calculate and apply a
27
- # suitable indentation length.
28
- #
29
- # :entry_spacing => 0
30
- # An integer representing the spacing between entries in the
31
- # bibliography.
32
- #
33
- # :line_spacing => 0
34
- # An integer representing the spacing between the lines within each
35
- # bibliography entry.
36
- #
37
- # :indent => 0
38
- # The number of em-spaces to apply in hanging indents within the
39
- # bibliography.
40
- #
41
- # :align => false
42
- # When the second-field-align CSL option is set, this returns either
43
- # "flush" or "margin". The calling application should align text in
44
- # bibliography output as described in the CSL specification. Where
45
- # second-field-align is not set, this return value is set to false.
46
- #
11
+ # See {.defaults} for the default formatting options.
47
12
  class Bibliography
48
13
 
49
14
  @defaults = {
@@ -72,7 +37,46 @@ module CiteProc
72
37
 
73
38
  class << self
74
39
 
75
- attr_reader :defaults, :cp2rb, :rb2cp
40
+ # @!attribute [r] defaults
41
+ # @example Default Formatting Options
42
+ # {
43
+ # :offset => 0,
44
+ # # Some citation styles apply a label (either a number or an
45
+ # # alphanumeric code) to each bibliography entry, and use this
46
+ # # label to cite bibliography items in the main text. In the
47
+ # # bibliography, the labels may either be hung in the margin,
48
+ # # or they may be set flush to the margin, with the citations
49
+ # # indented by a uniform amount to the right. In the latter case,
50
+ # # the amount of indentation needed depends on the maximum width
51
+ # # of any label. The :offset option gives the maximum number of
52
+ # # characters that appear in any label used in the bibliography.
53
+ # # The client that controls the final rendering of the bibliography
54
+ # # string should use this value to calculate and apply a suitable
55
+ # # indentation length.
56
+ #
57
+ # :entry_spacing => 0,
58
+ # # An integer representing the spacing between entries in the
59
+ # # bibliography.
60
+ #
61
+ # :line_spacing => 0,
62
+ # # An integer representing the spacing between the lines within
63
+ # # each bibliography entry.
64
+ #
65
+ # :indent => 0,
66
+ # # The number of em-spaces to apply in hanging indents within the
67
+ # # bibliography.
68
+ #
69
+ # :align => false
70
+ # # When the second-field-align CSL option is set, this returns
71
+ # # either "flush" or "margin". The calling application should
72
+ # # align text in the bibliography output as described by the CSL
73
+ # # specification. Where second-field-align is not set, this
74
+ # # return value is set to false.
75
+ # }
76
+ # @return [Hash] default formatting options
77
+ attr_reader :defaults
78
+
79
+ attr_reader :cp2rb, :rb2cp
76
80
 
77
81
  # Create a new Bibliography from the passed-in string or array, or nil
78
82
  # if the input cannot be parsed.
@@ -115,10 +119,29 @@ module CiteProc
115
119
 
116
120
  extend Forwardable
117
121
 
118
- attr_reader :options, :errors, :references
122
+ # @!attribute [r] refrences
123
+ # @return [Array<String>] the list of references
124
+ attr_reader :references
125
+
126
+ # @!attribute [r] options
127
+ # @see .defaults
128
+ # @return [Hash] the current formatting options
129
+ attr_reader :options
130
+
131
+ # @!attribute [r] errors
132
+ # @todo not implemented yet
133
+ # @return [Array<String>] a list of errors
134
+ attr_reader :errors
119
135
 
136
+ # @!attribute prefix
137
+ # @return [String] content included before the reference list
120
138
  attr_accessor :prefix, :suffix
121
139
 
140
+ # @!attribute suffix
141
+ # @return [String] content included after the reference list
142
+ attr_accessor :suffix
143
+
144
+
122
145
  # Bibliographies quack sorta like an Array
123
146
  def_delegators :@references, :length, :empty?, :[], :include?, :index
124
147
 
@@ -150,7 +173,7 @@ module CiteProc
150
173
  alias errors? has_errors?
151
174
 
152
175
  def join(connector = "\n")
153
- [prefix, references.join(connector), suffix].join
176
+ [prefix, references.join(connector), suffix].compact.join
154
177
  end
155
178
 
156
179
  def each
@@ -190,6 +213,7 @@ module CiteProc
190
213
  MultiJson.encode(to_citeproc)
191
214
  end
192
215
 
216
+ # @return [String] a human-readable representation of the bibliography
193
217
  def inspect
194
218
  "#<CiteProc::Bibliography @references=[#{references.length}], @errors=[#{errors.length}]>"
195
219
  end
@@ -1,29 +1,9 @@
1
1
  module CiteProc
2
2
 
3
- # CitationItems consititue the main input elements to CiteProc's processing
4
- # methods. In order to be processed correctly, an item must contain a valid
5
- # id attribute used to retrieve the item's bibliographic data. Additionally,
6
- # an item may include the following, optional, attributes:
7
- #
8
- # * locator: a string identifying a page number or other pinpoint location
9
- # or range within the resource;
10
- #
11
- # * label: a label type, indicating whether the locator is to a page, a
12
- # chapter, or other subdivision of the target resource. Valid labels are
13
- # defined in CitationItem.labels
14
- #
15
- # * suppress-author: if true, author names will not be included in the
16
- # citation output for this cite;
17
- #
18
- # * author-only: if true, only the author name will be included in the
19
- # citation output for this cite -- this optional parameter provides a
20
- # means for certain demanding styles that require the processor output
21
- # to be divided between the main text and a footnote.
22
- #
23
- # * prefix: a string to print before this cite item;
24
- #
25
- # * suffix: a string to print after this cite item.
26
- #
3
+ # A {CitationItem} consititues the main input elements to CiteProc's
4
+ # processing methods. In order to be processed correctly, an item must
5
+ # have a valid {#id} attribute used to retrieve the correpsonding {Item}
6
+ # containing the actual bibliographic data.
27
7
  class CitationItem
28
8
 
29
9
  include Attributes
@@ -37,27 +17,58 @@ module CiteProc
37
17
  attr_reader :labels
38
18
  end
39
19
 
20
+ # @!attribute id
21
+ # @return [Symbol,String] the id of the corresponding resource
22
+
23
+ # @!attribute locator
24
+ # @return [String] a string identifying a page number or similar to mark
25
+ # a location or range within the resource
26
+
27
+ # @!attribute label
28
+ # Labels indicate whether the current locator is to a page, a chapter,
29
+ # or other subdivision of the target resource. Valid labels are defined
30
+ # by {.labels}.
31
+ # @return [Symbol,String] the label type
32
+
33
+ # @!attribute suppress_author
34
+ # @return [Boolean] whether or not author names will not be included
35
+ # in the citation output for this cite
36
+
37
+ # @!attribute author_only
38
+ # This optional parameter provides a means for certain demanding styles
39
+ # that require the processor output to be divided between the main text
40
+ # and a footnote.
41
+ # @return [Boolean] whether or not only the author name will be included
42
+ # in the citation output for this cite
43
+
44
+ # @!attribute prefix
45
+ # @return [String] a string to print before cites produced for this item
46
+
47
+ # @!attribute suffix
48
+ # @return [String] a string to print after cites produced for this item
49
+
40
50
  attr_predicates :id, :locator, :label, :'suppress-author',
41
51
  :'author-only', :prefix, :suffix
42
-
43
- # Added by processor
52
+
53
+ # Attributes added by processor
44
54
  attr_predicates :sortkeys, :postion, :'first-reference-note-number',
45
55
  :'near-note', :unsorted
46
-
56
+
47
57
  attr_accessor :data
48
-
58
+
49
59
  def initialize(attributes = nil)
50
60
  merge(attributes)
51
61
  end
52
-
62
+
53
63
  def initialize_copy(other)
54
64
  @attributes = other.attributes.deep_copy
55
65
  end
56
-
66
+
67
+ # @return [String] a human-readable representation of the citation item
57
68
  def inspect
58
- "#<CiteProc::CitationItem #{id.to_s}, #{locator.to_s} >"
69
+ "#<CiteProc::CitationItem #{id.to_s.inspect}, #{locator.to_s.inspect}>"
59
70
  end
60
-
71
+
61
72
  end
62
73
 
63
74
 
@@ -102,17 +113,7 @@ module CiteProc
102
113
  self
103
114
  end
104
115
  end
105
-
106
- def each
107
- if block_given?
108
- items.each(&Proc.new)
109
- self
110
- else
111
- to_enum
112
- end
113
- end
114
-
115
-
116
+
116
117
  def initialize(attributes = nil, options = {})
117
118
  @options = CitationData.defaults.merge(options)
118
119
  @items, @sorted_items = [], []
@@ -125,7 +126,7 @@ module CiteProc
125
126
  @sorted_items = other.items.map(&:dup)
126
127
  @id = other.id.dup if other.processed?
127
128
  end
128
-
129
+
129
130
  def merge(other)
130
131
  return self if other.nil?
131
132
 
@@ -151,16 +152,25 @@ module CiteProc
151
152
  options.merge!(convert_from_citeproc(Hash[properties])) unless properties.nil?
152
153
 
153
154
  @id = other[:id] if other.has_key?(:id)
154
-
155
+
155
156
  self
156
157
  end
157
158
 
158
159
  alias update merge
159
160
 
161
+ def each
162
+ if block_given?
163
+ items.each(&Proc.new)
164
+ self
165
+ else
166
+ to_enum
167
+ end
168
+ end
169
+
160
170
  def processed?
161
171
  !!id
162
172
  end
163
-
173
+
164
174
  def index
165
175
  options[:footnote]
166
176
  end
@@ -186,6 +196,7 @@ module CiteProc
186
196
 
187
197
  alias to_s to_json
188
198
 
199
+ # @return [String] a human-readable representation of the citation data
189
200
  def inspect
190
201
  "#<CiteProc::CitationData items=[#{length}]>"
191
202
  end
@@ -1,10 +1,12 @@
1
+ # -*- coding: utf-8 -*-
2
+
1
3
  unless Symbol.is_a?(Comparable)
2
4
  class Symbol
3
5
  include Comparable
4
-
5
- def =~(pattern)
6
- to_s =~ pattern
7
- end
6
+
7
+ def =~(pattern)
8
+ to_s =~ pattern
9
+ end
8
10
 
9
11
  def <=>(other)
10
12
  return nil unless other.is_a?(Symbol)
@@ -12,3 +14,158 @@ unless Symbol.is_a?(Comparable)
12
14
  end
13
15
  end
14
16
  end
17
+
18
+
19
+
20
+ if RUBY_VERSION < '1.9'
21
+ require 'enumerator'
22
+
23
+ $KCODE = 'u'
24
+ require 'jcode'
25
+
26
+ module CiteProc
27
+
28
+ def to_unicode(string)
29
+ string.gsub(/\\?u([\da-f]{4})/i) { |m| [$1.to_i(16)].pack('U') }
30
+ end
31
+
32
+ def ruby_18
33
+ yield
34
+ end
35
+
36
+ def ruby_19
37
+ false
38
+ end
39
+
40
+ begin
41
+ require 'oniguruma'
42
+
43
+ def oniguruma
44
+ Oniguruma::ORegexp.new(yield, :syntax => Oniguruma::SYNTAX_JAVA, :encoding => Oniguruma::ENCODING_UTF8)
45
+ end
46
+
47
+ def oniguruma?
48
+ true
49
+ end
50
+ rescue LoadError
51
+ def oniguruma
52
+ false
53
+ end
54
+ alias oniguruma? oniguruma
55
+ end
56
+ end
57
+
58
+ # Remove the 'id' and 'type' methods in Ruby 1.8
59
+ class Object
60
+ undef_method :id
61
+ undef_method :type
62
+ end
63
+
64
+ else
65
+
66
+ module CiteProc
67
+ def to_unicode(string)
68
+ string
69
+ end
70
+
71
+ def ruby_18
72
+ false
73
+ end
74
+
75
+ def ruby_19
76
+ yield
77
+ end
78
+
79
+ def oniguruma
80
+ Regexp.new(yield)
81
+ end
82
+
83
+ def oniguruma?
84
+ true
85
+ end
86
+ end
87
+ end
88
+
89
+ #
90
+ # Robust unicode upcase/downcase
91
+ #
92
+
93
+ if RUBY_PLATFORM == 'java'
94
+ require 'java'
95
+
96
+ puts java.lang.System.getProperty('file.encoding')
97
+
98
+ module CiteProc
99
+ def upcase(string)
100
+ java.lang.String.new(string).to_upper_case(java.util.Locale::ENGLISH).to_s
101
+ end
102
+
103
+ def downcase(string)
104
+ java.lang.String.new(string).to_lower_case(java.util.Locale::ENGLISH).to_s
105
+ end
106
+
107
+ # def oniguruma
108
+ # Regexp.new(yield)
109
+ # end
110
+ #
111
+ # def oniguruma?
112
+ # true
113
+ # end
114
+ end
115
+
116
+ else
117
+
118
+ module CiteProc
119
+ private
120
+
121
+ begin
122
+ require 'unicode'
123
+
124
+ def upcase(string)
125
+ Unicode.upcase(string)
126
+ end
127
+
128
+ def downcase(string)
129
+ Unicode.downcase(string)
130
+ end
131
+ rescue LoadError
132
+ begin
133
+ require 'unicode_utils'
134
+
135
+ def upcase(string)
136
+ UnicodeUtils.upcase(string)
137
+ end
138
+
139
+ def downcase(string)
140
+ UnicodeUtils.downcase(string)
141
+ end
142
+ rescue LoadError
143
+ begin
144
+ require 'active_support/multibyte/chars'
145
+
146
+ def upcase(string)
147
+ ActiveSupport::Multibyte::Chars.new(string).upcase.to_s
148
+ end
149
+
150
+ def downcase(string)
151
+ ActiveSupport::Multibyte::Chars.new(string).downcase.to_s
152
+ end
153
+ rescue LoadError
154
+
155
+ def upcase(string)
156
+ string.upcase
157
+ end
158
+
159
+ def downcase(string)
160
+ string.downcase
161
+ end
162
+ end
163
+ end
164
+ end
165
+ end
166
+ end
167
+
168
+ module CiteProc
169
+ module_function :ruby_18, :ruby_19, :oniguruma, :oniguruma?,
170
+ :to_unicode, :upcase, :downcase
171
+ end