csl 1.0.0.pre23 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 23b9a4f1447a95e1b46a96a403ff301b1ab93f32
4
- data.tar.gz: 0355a94ad1f0be978d1a8e243c99aa6ad4d9ee5e
3
+ metadata.gz: 74e127a1013d127c41a6347da7c25756a0d3814d
4
+ data.tar.gz: 2f318db850403ee396c43e39dfb7be716559ac69
5
5
  SHA512:
6
- metadata.gz: 41f1534aea931e42092073d7408b3105805f30a4e7656b53b63504e80b3eae1d4d5c0e08a704c7e3181b49a8482e0303a176a9561a4c097f196e7f14ce40e306
7
- data.tar.gz: 0fd8a4e0eada2d438c213ff18495dfa6f8e153f2a079217f87e9d971c1fc31d4d30853999404396b7556800f92182e7f9e48b146404020390d0003f5086cbf3a
6
+ metadata.gz: 7ecf845a872d83a9393cca66ce068575cc314931521cb3fd4009eced2b1ada5a7caa8d48ff39ae89cf7b878a538e59cd7ae5b7523b1e295dda47d4c43c25565a
7
+ data.tar.gz: 5496e604da7d3a7130959161fe09ebac68d6a6cd2d652036dabc9a2adbe234f3288510be89f9a35f2607dd7f9874a01e70f1ca31cb9788efb3ab51511760aaaa
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  CSL-Ruby
2
2
  ========
3
- CSL-Ruby is a Ruby parser and library for the Citation Style Language (CSL),
4
- an XML-based format to describe the formatting of citations, notes and
5
- bibliographies.
3
+ CSL-Ruby provides a Ruby parser and a comprehensive API for the
4
+ [Citation Style Language](http://citationstyles.org) (CSL), an XML-based
5
+ format to describe the formatting of citations, notes and bibliographies.
6
6
 
7
7
  [![Build Status](https://secure.travis-ci.org/inukshuk/csl-ruby.png?branch=master)](http://travis-ci.org/inukshuk/csl-ruby)
8
8
 
@@ -20,7 +20,94 @@ You can change these locations by changing the value of `CSL::Style.root` and
20
20
  `CSL::Locale.root` respectively.
21
21
 
22
22
  Alternatively, you can `gem install csl-styles` to install all official CSL
23
- styles and locales.
23
+ styles and locales. To make the styles and locales available, simply
24
+ `require 'csl/styles`.
25
+
26
+ Usage
27
+ -----
28
+ CSL-Ruby is broadly aimed at two very different usage scenarios: on the one
29
+ hand, you can use the parser to load existing styles and locales and
30
+ manipulate, query or otherwise work with them using a dedicated API: that is
31
+ to say, you do not have to resort to XML-related methods of access, but can
32
+ make use of a large set of library methods which are specific to CSL. This
33
+ is useful, primarily, for citation processors like
34
+ [CiteProc-Ruby](https://github.com/inukshuk/citeproc-ruby).
35
+
36
+ On the other hand, CSL-Ruby makes it easy to create new styles and locales
37
+ using Ruby; this is useful, for example, if you need to change or adapt
38
+ styles on-the-fly or for writing an interactive style editor.
39
+
40
+ To get you started, here are a few usage examples; for the full set of
41
+ available features, please consult the
42
+ [API documentation](http://rubydoc.info/gems/csl/).
43
+
44
+ require 'csl'
45
+
46
+ # Load a style from the Zotero style repository
47
+ jps = CSL::Style.load 'http://zotero.org/styles/american-journal-of-political-science'
48
+
49
+ # Query style information
50
+ jps.title #-> "American Journal of Political Science"
51
+ jps.independent? #-> true
52
+ jps.citation_format #-> :"author-date"
53
+
54
+ # Validate style against the CSL schema
55
+ jps.valid? #-> true
56
+
57
+ # Load another style
58
+ amc = CSL::Style.load 'http://zotero.org/styles/applied-mathematics-and-computation'
59
+
60
+ amc.independent? #-> false
61
+
62
+ # Load the independent parent style
63
+ parent = amc.independent_parent
64
+ parent.title #-> "Elsevier (numeric, with titles)"
65
+
66
+ # Load standard CSL styles and locales from csl-styles gem
67
+ # Requires you to gem install csl-styles
68
+ require 'csl/styles'
69
+
70
+ # Load a locally installed style
71
+ apa = CSL::Style.load :apa
72
+
73
+ # Fetch the a macro
74
+ authors = apa.macros['authors'].children[0]
75
+ #-> #<CSL::Style::Names variable="author" children=[2]>
76
+
77
+ # Load a locally installed locale
78
+ fr = CSL::Locale.load :fr
79
+
80
+ # Translate a term
81
+ fr.translate 'editor' #-> "éditeur"
82
+ fr.translate 'editor', plural: true #-> "éditeurs"
83
+ fr.translate 'editor', form: 'short' #-> "éd."
84
+
85
+ # Ordinalize a number
86
+ fr.ordinalize 42 #=> "42ᵉ"
87
+ fr.ordinalize 3, form: 'long' => "troisième"
88
+
89
+ # Create a new style
90
+ style = CSL::Style.new
91
+
92
+ style.id = 'http://www.zotero.org/styles/my-style'
93
+ style.title = 'My Style'
94
+
95
+ # Add the default license for CSL styles
96
+ style.default_license!
97
+
98
+ # Access the style as XML
99
+ style.to_xml
100
+
101
+ # Access the style as XML (pretty printed)
102
+ style.to_s
103
+
104
+ Dependencies
105
+ ------------
106
+ CSL-Ruby was written with portability in mind. For performance reasons it
107
+ will use [Nokogiri ](http://nokogiri.org) for XML parsing and validation
108
+ if available; however, CSL-Ruby will fallback to REXML from the Ruby standard
109
+ library. In order to use Nokogiri, simply `gem install nokogiri` or add it
110
+ to your Gemfile.
24
111
 
25
112
  Development
26
113
  -----------
@@ -28,7 +115,7 @@ The CSL-Ruby source code is [hosted on GitHub](https://github.com/inukshuk/csl-r
28
115
  You can check out a copy of the latest code using Git:
29
116
 
30
117
  $ git clone https://github.com/inukshuk/csl-ruby.git
31
-
118
+
32
119
  To get started, install the development dependencies and run all tests:
33
120
 
34
121
  $ cd csl-ruby
@@ -43,10 +130,10 @@ example, fix the bug and submit a pull request.
43
130
 
44
131
  Copyright
45
132
  ---------
46
- Copyright 2012 President and Fellows of Harvard College.
47
-
48
133
  Copyright 2009-2013 Sylvester Keil. All rights reserved.
49
134
 
135
+ Copyright 2012 President and Fellows of Harvard College.
136
+
50
137
  License
51
138
  -------
52
- CiteProc is dual licensed under the AGPL and the FreeBSD license.
139
+ CSL-Ruby is dual licensed under the AGPL and the FreeBSD license.
@@ -14,7 +14,7 @@ Gem::Specification.new do |s|
14
14
  s.summary = 'A Ruby CSL parser and library'
15
15
  s.description =
16
16
  """
17
- A Ruby parser and library for the Citation Style Language (CSL),
17
+ A Ruby parser and full API for the Citation Style Language (CSL),
18
18
  an open XML-based language to describe the formatting of citations
19
19
  and bibliographies.
20
20
  """
@@ -22,7 +22,7 @@ Gem::Specification.new do |s|
22
22
  s.license = 'AGPL'
23
23
  s.date = Time.now.strftime('%Y-%m-%d')
24
24
 
25
- s.add_dependency('namae', ['~>0.3'])
25
+ s.add_dependency('namae', ['~>0.7'])
26
26
 
27
27
  s.files = `git ls-files`.split("\n")
28
28
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -3,9 +3,27 @@ class Symbol
3
3
  include Comparable
4
4
 
5
5
  def <=>(other)
6
- return unless other.kind_of? Symbol
6
+ return unless other.kind_of?(Symbol)
7
7
  to_s <=> other.to_s
8
8
  end
9
+
10
+ def match(pattern)
11
+ str = to_s
12
+
13
+ case pattern
14
+ when Regexp
15
+ match_data = pattern.search_region(str, 0, str.bytesize, true)
16
+ Regexp.last_match = match_data
17
+ return match_data.full[0] if match_data
18
+ when String
19
+ raise TypeError, "type mismatch: String given"
20
+ else
21
+ pattern =~ str
22
+ end
23
+ end
24
+
25
+ alias =~ match
26
+
9
27
  end unless Symbol.is_a?(Comparable)
10
28
 
11
29
  class Module
@@ -156,7 +156,7 @@ module CSL
156
156
 
157
157
  def default_license?
158
158
  has_rights? && rights[:license] == Schema.default_license &&
159
- rights.to_s == Schema.default_rights_string
159
+ rights.text == Schema.default_rights_string
160
160
  end
161
161
 
162
162
  def default_license!
@@ -54,7 +54,7 @@ module CSL
54
54
  has_no_children
55
55
 
56
56
  attr_struct :name, :form, :'range-delimiter',
57
- *Schema.attr(:formatting, :periods)
57
+ :'strip-periods', *Schema.attr(:formatting)
58
58
 
59
59
  include CSL::DatePart
60
60
  end
@@ -10,8 +10,7 @@ module CSL
10
10
 
11
11
  @default_license = 'http://creativecommons.org/licenses/by-sa/3.0/'
12
12
  @default_rights_string =
13
- "This work is licensed under a Creative Commons Attribution-Share Alike 3.0 License: #{@default_license}"
14
-
13
+ 'This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License'
15
14
 
16
15
  @types = %w{ article article-journal article-magazine article-newspaper
17
16
  bill book broadcast chapter entry entry-dictionary entry-encyclopedia
@@ -69,18 +68,9 @@ module CSL
69
68
  :delimiter => %w{
70
69
  delimiter
71
70
  },
72
- :display => %w{
73
- block left-margin right-inline indent
74
- },
75
71
  :font => %w{
76
72
  font-style font-variant font-weight text-decoration vertical-align
77
73
  },
78
- :quotes => %w{
79
- quotes
80
- },
81
- :periods => %w{
82
- strip-periods
83
- },
84
74
  :name => %w{
85
75
  name-form name-delimiter and delimiter-precedes-et-al initialize-with
86
76
  delimiter-precedes-last et-al-min et-al-use-first et-al-subsequent-min
@@ -103,7 +93,7 @@ module CSL
103
93
 
104
94
  @attributes.each_value { |v| v.map!(&:to_sym).freeze }
105
95
 
106
- @attributes[:formatting] = [:'text-case'].concat(
96
+ @attributes[:formatting] = [:'text-case', :display].concat(
107
97
  @attributes.values_at(:affixes, :font).flatten)
108
98
 
109
99
  @attributes.freeze
@@ -21,7 +21,7 @@ module CSL
21
21
  end
22
22
 
23
23
  def matcher(match = attributes[:match])
24
- case match
24
+ case match.to_s
25
25
  when 'any'
26
26
  :any?
27
27
  when 'none'
@@ -37,8 +37,9 @@ module CSL
37
37
  type, match = attribute.to_s.split(/-(any|all|none)$/, 2)
38
38
 
39
39
  # subtle: if the default matcher is :none? and there
40
- # is no override we to use :any? in the nested lists
41
- # to avoid double negation during evaluation
40
+ # is no override we want to use :any? inside the nested
41
+ # lists to avoid double negation during evaluation of
42
+ # the entire expression!
42
43
 
43
44
  if match.nil?
44
45
  match = matcher
@@ -4,8 +4,8 @@ module CSL
4
4
  class Date < Node
5
5
  attr_defaults :'date-parts' => 'year-month-day'
6
6
 
7
- attr_struct :name, :form, :'range-delimiter', :'date-parts', :variable,
8
- *Schema.attr(:display, :formatting, :delimiter)
7
+ attr_struct :name, :form, :'range-delimiter', :'date-parts',
8
+ :variable, *Schema.attr(:formatting, :delimiter)
9
9
 
10
10
  attr_children :'date-part'
11
11
 
@@ -49,11 +49,11 @@ module CSL
49
49
  end
50
50
 
51
51
  def numeric?
52
- attributes[:form].to_s =~ /^numeric$/i
52
+ form =~ /^numeric$/i
53
53
  end
54
54
 
55
55
  def text?
56
- attributes[:form].to_s =~ /^text$/i
56
+ form =~ /^text$/i
57
57
  end
58
58
 
59
59
  def has_date_parts?
@@ -69,8 +69,8 @@ module CSL
69
69
  class DatePart < Node
70
70
  has_no_children
71
71
 
72
- attr_struct :name, :form, :'range-delimiter',
73
- *Schema.attr(:formatting, :periods)
72
+ attr_struct :name, :form, :'range-delimiter', :'strip-periods',
73
+ *Schema.attr(:formatting)
74
74
 
75
75
  include CSL::DatePart
76
76
  end
@@ -13,7 +13,7 @@ module CSL
13
13
  # the Group calls a variable (either directly or via a macro), and
14
14
  # b) all variables that are called are empty.
15
15
  class Group < Node
16
- attr_struct(*Schema.attr(:formatting, :affixes, :display, :delimiter))
16
+ attr_struct(*Schema.attr(:formatting, :affixes, :delimiter))
17
17
 
18
18
  def delimiter
19
19
  attributes.fetch(:delimiter, '')
@@ -11,8 +11,8 @@ module CSL
11
11
  # is used instead of the local attribute.
12
12
  class Label < Node
13
13
 
14
- attr_struct :variable, :form, :plural,
15
- *Schema.attr(:formatting, :periods)
14
+ attr_struct :variable, :form, :plural, :'strip-periods',
15
+ *Schema.attr(:formatting)
16
16
 
17
17
  has_no_children
18
18
 
@@ -57,11 +57,11 @@ module CSL
57
57
  end
58
58
 
59
59
  def always_pluralize?
60
- attributes[:plural].to_s =~ /^always$/i
60
+ attribute?(:plural) && attributes[:plural] =~ /^always$/i
61
61
  end
62
62
 
63
63
  def never_pluralize?
64
- attributes[:plural].to_s =~ /^never$/i
64
+ attribute?(:plural) && attributes[:plural] =~ /^never$/i
65
65
  end
66
66
 
67
67
  # @return [Boolean] whether or not the {Label} is inside a {Names} node
@@ -3,7 +3,7 @@ module CSL
3
3
 
4
4
  class Names < Node
5
5
 
6
- attr_struct :variable, *Schema.attr(:names, :delimiter, :affixes, :display, :font)
6
+ attr_struct :variable, *Schema.attr(:names, :delimiter, :affixes, :font)
7
7
 
8
8
  attr_children :name, :'et-al', :label, :substitute
9
9
 
@@ -4,8 +4,7 @@ module CSL
4
4
  # Numbers are CSL rendering elements which output the number variable
5
5
  # selected with the required variable attribute.
6
6
  class Number < Node
7
- attr_struct :variable, :form, :'text-case',
8
- *Schema.attr(:affixes, :display, :font)
7
+ attr_struct :variable, :form, *Schema.attr(:formatting)
9
8
 
10
9
  has_no_children
11
10
 
@@ -22,29 +21,29 @@ module CSL
22
21
  end
23
22
 
24
23
  def form
25
- attributes[:form]
24
+ attributes[:form].to_s
26
25
  end
27
26
 
28
27
  # @return [Boolean] whether or not the number's format is set to
29
28
  # :numeric; also returns true if the number's form attribute is not
30
29
  # set or nil.
31
30
  def numeric?
32
- !has_form? || form.to_sym == :numeric
31
+ !has_form? || form == 'numeric'
33
32
  end
34
33
 
35
- # @return [Boolean] whether or not the number's format is set to :ordinal
34
+ # @return [Boolean] whether or not the number's format is set to 'ordinal
36
35
  def ordinal?
37
- has_form? && form.to_sym == :ordinal
36
+ has_form? && form == 'ordinal'
38
37
  end
39
38
 
40
- # @return [Boolean] whether or not the number's format is set to :'long-ordinal'
39
+ # @return [Boolean] whether or not the number's format is set to 'long-ordinal'
41
40
  def long_ordinal?
42
- has_form? && form.to_sym == :'long-ordinal'
41
+ has_form? && form == 'long-ordinal'
43
42
  end
44
43
 
45
- # @return [Boolean] whether or not the number's format is set to :roman
44
+ # @return [Boolean] whether or not the number's format is set to 'roman'
46
45
  def roman?
47
- has_form? && form.to_sym == :roman
46
+ has_form? && form == 'roman'
48
47
  end
49
48
  end
50
49
 
@@ -3,7 +3,7 @@ module CSL
3
3
 
4
4
  class Text < Node
5
5
  attr_struct :variable, :macro, :term, :form, :plural, :value,
6
- *Schema.attr(:formatting, :display, :quotes, :periods)
6
+ :quotes, :'strip-periods', *Schema.attr(:formatting)
7
7
 
8
8
  has_no_children
9
9
 
@@ -1,3 +1,3 @@
1
1
  module CSL
2
- VERSION = '1.0.0.pre23'.freeze
2
+ VERSION = '1.0.0'.freeze
3
3
  end
@@ -52,6 +52,7 @@ module CSL
52
52
 
53
53
  it 'returns false if the form attribute is set to :ordinal' do
54
54
  Style::Number.new(:form => 'ordinal').should be_ordinal
55
+ Style::Number.new(:form => :ordinal).should be_ordinal
55
56
  end
56
57
  end
57
58
 
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.0.0.pre23
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sylvester Keil
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-04-14 00:00:00.000000000 Z
11
+ date: 2013-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: namae
@@ -16,15 +16,15 @@ dependencies:
16
16
  requirements:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: '0.3'
19
+ version: '0.7'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: '0.3'
27
- description: "\n\t\tA Ruby parser and library for the Citation Style Language (CSL),\n\t\tan
26
+ version: '0.7'
27
+ description: "\n\t\tA Ruby parser and full API for the Citation Style Language (CSL),\n\t\tan
28
28
  open XML-based language to describe the formatting of citations\n\t\tand bibliographies.\n\t\t"
29
29
  email:
30
30
  - http://sylvester.keil.or.at
@@ -132,9 +132,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
132
132
  version: '0'
133
133
  required_rubygems_version: !ruby/object:Gem::Requirement
134
134
  requirements:
135
- - - '>'
135
+ - - '>='
136
136
  - !ruby/object:Gem::Version
137
- version: 1.3.1
137
+ version: '0'
138
138
  requirements: []
139
139
  rubyforge_project:
140
140
  rubygems_version: 2.0.3