csl 1.0.0.pre1 → 1.0.0.pre2
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.
- data/.gitignore +1 -0
- data/.travis.yml +10 -1
- data/Rakefile +1 -1
- data/features/locales/ordinalize.feature +109 -0
- data/features/style/loading.feature +27 -27
- data/lib/csl.rb +9 -1
- data/lib/csl/compatibility.rb +4 -0
- data/lib/csl/errors.rb +5 -2
- data/lib/csl/info.rb +32 -5
- data/lib/csl/loader.rb +3 -3
- data/lib/csl/locale.rb +19 -2
- data/lib/csl/locale/date.rb +3 -3
- data/lib/csl/locale/term.rb +14 -4
- data/lib/csl/node.rb +41 -23
- data/lib/csl/parser.rb +15 -2
- data/lib/csl/pretty_printer.rb +11 -9
- data/lib/csl/schema.rb +95 -8
- data/lib/csl/style.rb +16 -5
- data/lib/csl/style/choose.rb +16 -0
- data/lib/csl/style/date.rb +4 -4
- data/lib/csl/style/label.rb +2 -2
- data/lib/csl/style/names.rb +3 -3
- data/lib/csl/style/number.rb +2 -1
- data/lib/csl/style/text.rb +2 -2
- data/lib/csl/version.rb +1 -1
- data/spec/csl/info_spec.rb +20 -1
- data/spec/csl/locale/term_spec.rb +45 -0
- data/spec/csl/node_spec.rb +3 -1
- data/spec/csl/schema_spec.rb +37 -4
- data/spec/csl/style/{conditional_spec.rb → choose_spec.rb} +1 -1
- data/spec/csl/style_spec.rb +4 -2
- data/spec/spec_helper.rb +2 -2
- data/vendor/schema/csl-categories.rng +47 -0
- data/vendor/schema/csl-terms.rng +144 -0
- data/vendor/schema/csl-types.rng +45 -0
- data/vendor/schema/csl-variables.rng +114 -0
- data/vendor/schema/csl.rng +1750 -0
- metadata +16 -14
- data/lib/csl/style/conditional.rb +0 -11
data/spec/csl/schema_spec.rb
CHANGED
@@ -3,6 +3,10 @@ require 'spec_helper'
|
|
3
3
|
module CSL
|
4
4
|
describe 'Schema' do
|
5
5
|
|
6
|
+
it 'cannot be instantiated' do
|
7
|
+
Schema.should_not respond_to(:new)
|
8
|
+
end
|
9
|
+
|
6
10
|
describe '.version' do
|
7
11
|
it 'returns a version string' do
|
8
12
|
Schema.version.should match(/^\d+\.\d+\.\d+/)
|
@@ -54,10 +58,8 @@ module CSL
|
|
54
58
|
|
55
59
|
describe '.categories' do
|
56
60
|
it 'given a field name returns the corresponding type' do
|
57
|
-
Schema.categories
|
58
|
-
|
59
|
-
Schema.categories[:abstract].should == :text
|
60
|
-
Schema.categories[:issue].should == :number
|
61
|
+
Schema.categories.values_at(:author, :issued, :abstract, :issue).should ==
|
62
|
+
[:names, :date, :text, :number]
|
61
63
|
end
|
62
64
|
|
63
65
|
it 'accepts either string or symbol input' do
|
@@ -66,5 +68,36 @@ module CSL
|
|
66
68
|
end
|
67
69
|
end
|
68
70
|
|
71
|
+
describe '.validate' do
|
72
|
+
it 'accepts and validates a locale instance' do
|
73
|
+
Schema.validate(Locale.load('en-US')).should == []
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'accepts and validates a locale file path' do
|
77
|
+
Schema.validate(File.join(Locale.root, 'locales-en-US.xml')).should == []
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'accepts and validates a locale file' do
|
81
|
+
Schema.validate(File.open(File.join(Locale.root, 'locales-en-US.xml'))).should == []
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'accepts and validates a locale wildcard path' do
|
85
|
+
Schema.validate(File.join(Locale.root, 'locales-en-*.xml')).should == []
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'accepts and validates a style file path' do
|
89
|
+
Schema.validate(File.join(Style.root, 'apa.csl')).should == []
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'accepts and validates the xml contents of a style instance' do
|
93
|
+
Schema.validate(Style.load(:apa).pretty_print).should == []
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'accepts and validates a style instance' do
|
97
|
+
Schema.validate(Style.load(:apa)).should == []
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
|
69
102
|
end
|
70
103
|
end
|
data/spec/csl/style_spec.rb
CHANGED
@@ -3,8 +3,6 @@ require 'spec_helper'
|
|
3
3
|
module CSL
|
4
4
|
describe Style do
|
5
5
|
|
6
|
-
it { should be }
|
7
|
-
|
8
6
|
it 'has a 1.x version by default' do
|
9
7
|
Style.new[:version].should match(/1\.\d+(\.\d+)?/)
|
10
8
|
end
|
@@ -13,6 +11,10 @@ module CSL
|
|
13
11
|
it 'returns an empty style' do
|
14
12
|
Style.new.to_xml.should match(/<style[^>]*\/>/)
|
15
13
|
end
|
14
|
+
|
15
|
+
it 'supports round-trip for apa style' do
|
16
|
+
Style.parse(Style.load(:apa).to_xml).should be_a(Style)
|
17
|
+
end
|
16
18
|
end
|
17
19
|
|
18
20
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -0,0 +1,47 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0">
|
3
|
+
<div>
|
4
|
+
<a:documentation>Categories for style metadata</a:documentation>
|
5
|
+
<define name="category.citation-format">
|
6
|
+
<choice>
|
7
|
+
<value>author</value>
|
8
|
+
<value>author-date</value>
|
9
|
+
<value>label</value>
|
10
|
+
<value>note</value>
|
11
|
+
<value>numeric</value>
|
12
|
+
</choice>
|
13
|
+
</define>
|
14
|
+
<define name="category.field">
|
15
|
+
<a:documentation>Use "generic-base" for styles that are non-discipline specific, such as
|
16
|
+
APA, Harvard, etc.</a:documentation>
|
17
|
+
<choice>
|
18
|
+
<value>anthropology</value>
|
19
|
+
<value>astronomy</value>
|
20
|
+
<value>biology</value>
|
21
|
+
<value>botany</value>
|
22
|
+
<value>chemistry</value>
|
23
|
+
<value>communications</value>
|
24
|
+
<value>engineering</value>
|
25
|
+
<value>generic-base</value>
|
26
|
+
<value>geography</value>
|
27
|
+
<value>geology</value>
|
28
|
+
<value>history</value>
|
29
|
+
<value>humanities</value>
|
30
|
+
<value>law</value>
|
31
|
+
<value>linguistics</value>
|
32
|
+
<value>literature</value>
|
33
|
+
<value>math</value>
|
34
|
+
<value>medicine</value>
|
35
|
+
<value>philosophy</value>
|
36
|
+
<value>physics</value>
|
37
|
+
<value>political_science</value>
|
38
|
+
<value>psychology</value>
|
39
|
+
<value>science</value>
|
40
|
+
<value>social_science</value>
|
41
|
+
<value>sociology</value>
|
42
|
+
<value>theology</value>
|
43
|
+
<value>zoology</value>
|
44
|
+
</choice>
|
45
|
+
</define>
|
46
|
+
</div>
|
47
|
+
</grammar>
|
@@ -0,0 +1,144 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0">
|
3
|
+
<div>
|
4
|
+
<a:documentation>Terms</a:documentation>
|
5
|
+
<define name="terms">
|
6
|
+
<choice>
|
7
|
+
<ref name="category.field"/>
|
8
|
+
<ref name="terms.gender-assignable"/>
|
9
|
+
<ref name="terms.gender-variants"/>
|
10
|
+
<ref name="terms.locator"/>
|
11
|
+
<ref name="variables.names">
|
12
|
+
<a:documentation>Contributor roles</a:documentation>
|
13
|
+
</ref>
|
14
|
+
<value>editortranslator</value>
|
15
|
+
<value>accessed</value>
|
16
|
+
<a:documentation>Miscellaneous terms</a:documentation>
|
17
|
+
<value>ad</value>
|
18
|
+
<value>and</value>
|
19
|
+
<value>and others</value>
|
20
|
+
<value>anonymous</value>
|
21
|
+
<value>at</value>
|
22
|
+
<value>available at</value>
|
23
|
+
<value>bc</value>
|
24
|
+
<value>by</value>
|
25
|
+
<value>circa</value>
|
26
|
+
<value>cited</value>
|
27
|
+
<value>et-al</value>
|
28
|
+
<value>forthcoming</value>
|
29
|
+
<value>from</value>
|
30
|
+
<value>ibid</value>
|
31
|
+
<value>in</value>
|
32
|
+
<value>in press</value>
|
33
|
+
<value>internet</value>
|
34
|
+
<value>interview</value>
|
35
|
+
<value>letter</value>
|
36
|
+
<value>no date</value>
|
37
|
+
<value>online</value>
|
38
|
+
<value>presented at</value>
|
39
|
+
<value>reference</value>
|
40
|
+
<value>retrieved</value>
|
41
|
+
<value>scale</value>
|
42
|
+
<value>open-quote</value>
|
43
|
+
<a:documentation>Punctuation</a:documentation>
|
44
|
+
<value>close-quote</value>
|
45
|
+
<value>open-inner-quote</value>
|
46
|
+
<value>close-inner-quote</value>
|
47
|
+
<value>page-range-delimiter</value>
|
48
|
+
<value>season-01</value>
|
49
|
+
<a:documentation>Seasons</a:documentation>
|
50
|
+
<value>season-02</value>
|
51
|
+
<value>season-03</value>
|
52
|
+
<value>season-04</value>
|
53
|
+
</choice>
|
54
|
+
</define>
|
55
|
+
<define name="terms.gender-assignable">
|
56
|
+
<a:documentation>Terms to which a gender may be assigned</a:documentation>
|
57
|
+
<choice>
|
58
|
+
<value>month-01</value>
|
59
|
+
<a:documentation>Months</a:documentation>
|
60
|
+
<value>month-02</value>
|
61
|
+
<value>month-03</value>
|
62
|
+
<value>month-04</value>
|
63
|
+
<value>month-05</value>
|
64
|
+
<value>month-06</value>
|
65
|
+
<value>month-07</value>
|
66
|
+
<value>month-08</value>
|
67
|
+
<value>month-09</value>
|
68
|
+
<value>month-10</value>
|
69
|
+
<value>month-11</value>
|
70
|
+
<value>month-12</value>
|
71
|
+
<ref name="terms.non-locator-number-variables"/>
|
72
|
+
<ref name="terms.locator-number-variables"/>
|
73
|
+
</choice>
|
74
|
+
</define>
|
75
|
+
<define name="terms.gender-variants">
|
76
|
+
<a:documentation>Terms for which gender variants may be specified</a:documentation>
|
77
|
+
<choice>
|
78
|
+
<value>ordinal-01</value>
|
79
|
+
<a:documentation>Ordinals</a:documentation>
|
80
|
+
<value>ordinal-02</value>
|
81
|
+
<value>ordinal-03</value>
|
82
|
+
<value>ordinal-04</value>
|
83
|
+
<value>long-ordinal-01</value>
|
84
|
+
<a:documentation>Long ordinals</a:documentation>
|
85
|
+
<value>long-ordinal-02</value>
|
86
|
+
<value>long-ordinal-03</value>
|
87
|
+
<value>long-ordinal-04</value>
|
88
|
+
<value>long-ordinal-05</value>
|
89
|
+
<value>long-ordinal-06</value>
|
90
|
+
<value>long-ordinal-07</value>
|
91
|
+
<value>long-ordinal-08</value>
|
92
|
+
<value>long-ordinal-09</value>
|
93
|
+
<value>long-ordinal-10</value>
|
94
|
+
</choice>
|
95
|
+
</define>
|
96
|
+
<define name="terms.locator">
|
97
|
+
<a:documentation>Locators</a:documentation>
|
98
|
+
<choice>
|
99
|
+
<ref name="terms.locator.testable"/>
|
100
|
+
<value>sub verbo</value>
|
101
|
+
<a:documentation>"sub verbo" is recognized as "sub" & "verbo" in attribute lists; term
|
102
|
+
should be renamed to "sub-verbo"</a:documentation>
|
103
|
+
</choice>
|
104
|
+
</define>
|
105
|
+
<define name="terms.locator.testable">
|
106
|
+
<a:documentation>Locator terms that can be tested with the "locator" conditional
|
107
|
+
("sub verbo" can be tested with "sub-verbo")</a:documentation>
|
108
|
+
<choice>
|
109
|
+
<value>book</value>
|
110
|
+
<value>chapter</value>
|
111
|
+
<value>column</value>
|
112
|
+
<value>figure</value>
|
113
|
+
<value>folio</value>
|
114
|
+
<value>line</value>
|
115
|
+
<value>note</value>
|
116
|
+
<value>opus</value>
|
117
|
+
<value>page</value>
|
118
|
+
<value>paragraph</value>
|
119
|
+
<value>part</value>
|
120
|
+
<value>section</value>
|
121
|
+
<value>verse</value>
|
122
|
+
<ref name="terms.locator-number-variables"/>
|
123
|
+
</choice>
|
124
|
+
</define>
|
125
|
+
<define name="terms.locator-number-variables">
|
126
|
+
<a:documentation>Locator terms with matching number variables</a:documentation>
|
127
|
+
<choice>
|
128
|
+
<value>issue</value>
|
129
|
+
<value>volume</value>
|
130
|
+
</choice>
|
131
|
+
</define>
|
132
|
+
<define name="terms.non-locator-number-variables">
|
133
|
+
<a:documentation>Non-locator terms accompanying number variables</a:documentation>
|
134
|
+
<choice>
|
135
|
+
<value>chapter-number</value>
|
136
|
+
<value>collection-number</value>
|
137
|
+
<value>edition</value>
|
138
|
+
<value>number</value>
|
139
|
+
<value>number-of-pages</value>
|
140
|
+
<value>number-of-volumes</value>
|
141
|
+
</choice>
|
142
|
+
</define>
|
143
|
+
</div>
|
144
|
+
</grammar>
|
@@ -0,0 +1,45 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0">
|
3
|
+
<div>
|
4
|
+
<a:documentation>Item types</a:documentation>
|
5
|
+
<define name="item-types">
|
6
|
+
<choice>
|
7
|
+
<value>article</value>
|
8
|
+
<value>article-journal</value>
|
9
|
+
<value>article-magazine</value>
|
10
|
+
<value>article-newspaper</value>
|
11
|
+
<value>bill</value>
|
12
|
+
<value>book</value>
|
13
|
+
<value>broadcast</value>
|
14
|
+
<value>chapter</value>
|
15
|
+
<value>dataset</value>
|
16
|
+
<value>entry</value>
|
17
|
+
<value>entry-dictionary</value>
|
18
|
+
<value>entry-encyclopedia</value>
|
19
|
+
<value>figure</value>
|
20
|
+
<value>graphic</value>
|
21
|
+
<value>interview</value>
|
22
|
+
<value>legal_case</value>
|
23
|
+
<value>legislation</value>
|
24
|
+
<value>manuscript</value>
|
25
|
+
<value>map</value>
|
26
|
+
<value>motion_picture</value>
|
27
|
+
<value>musical_score</value>
|
28
|
+
<value>pamphlet</value>
|
29
|
+
<value>paper-conference</value>
|
30
|
+
<value>patent</value>
|
31
|
+
<value>personal_communication</value>
|
32
|
+
<value>post</value>
|
33
|
+
<value>post-weblog</value>
|
34
|
+
<value>report</value>
|
35
|
+
<value>review</value>
|
36
|
+
<value>review-book</value>
|
37
|
+
<value>song</value>
|
38
|
+
<value>speech</value>
|
39
|
+
<value>thesis</value>
|
40
|
+
<value>treaty</value>
|
41
|
+
<value>webpage</value>
|
42
|
+
</choice>
|
43
|
+
</define>
|
44
|
+
</div>
|
45
|
+
</grammar>
|
@@ -0,0 +1,114 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0">
|
3
|
+
<div>
|
4
|
+
<a:documentation>Variables</a:documentation>
|
5
|
+
<define name="variables">
|
6
|
+
<a:documentation>All variables</a:documentation>
|
7
|
+
<choice>
|
8
|
+
<ref name="variables.dates"/>
|
9
|
+
<ref name="variables.names"/>
|
10
|
+
<ref name="variables.numbers"/>
|
11
|
+
<ref name="variables.strings"/>
|
12
|
+
</choice>
|
13
|
+
</define>
|
14
|
+
<define name="variables.standard">
|
15
|
+
<a:documentation>Standard variables</a:documentation>
|
16
|
+
<choice>
|
17
|
+
<ref name="variables.numbers"/>
|
18
|
+
<ref name="variables.strings"/>
|
19
|
+
</choice>
|
20
|
+
</define>
|
21
|
+
<define name="variables.dates">
|
22
|
+
<a:documentation>Date variables</a:documentation>
|
23
|
+
<choice>
|
24
|
+
<value>accessed</value>
|
25
|
+
<value>container</value>
|
26
|
+
<value>event-date</value>
|
27
|
+
<value>issued</value>
|
28
|
+
<value>original-date</value>
|
29
|
+
<value>submitted</value>
|
30
|
+
</choice>
|
31
|
+
</define>
|
32
|
+
<define name="variables.names">
|
33
|
+
<a:documentation>Name variables</a:documentation>
|
34
|
+
<choice>
|
35
|
+
<value>author</value>
|
36
|
+
<value>collection-editor</value>
|
37
|
+
<value>composer</value>
|
38
|
+
<value>container-author</value>
|
39
|
+
<value>director</value>
|
40
|
+
<value>editor</value>
|
41
|
+
<value>editorial-director</value>
|
42
|
+
<value>illustrator</value>
|
43
|
+
<value>interviewer</value>
|
44
|
+
<value>original-author</value>
|
45
|
+
<value>recipient</value>
|
46
|
+
<value>reviewed-author</value>
|
47
|
+
<value>translator</value>
|
48
|
+
</choice>
|
49
|
+
</define>
|
50
|
+
<define name="variables.numbers">
|
51
|
+
<a:documentation>Number variables</a:documentation>
|
52
|
+
<choice>
|
53
|
+
<value>chapter-number</value>
|
54
|
+
<value>collection-number</value>
|
55
|
+
<value>edition</value>
|
56
|
+
<value>issue</value>
|
57
|
+
<value>number</value>
|
58
|
+
<value>number-of-pages</value>
|
59
|
+
<value>number-of-volumes</value>
|
60
|
+
<value>volume</value>
|
61
|
+
</choice>
|
62
|
+
</define>
|
63
|
+
<define name="variables.strings">
|
64
|
+
<a:documentation>String variables</a:documentation>
|
65
|
+
<choice>
|
66
|
+
<value>abstract</value>
|
67
|
+
<value>annote</value>
|
68
|
+
<value>archive</value>
|
69
|
+
<value>archive_location</value>
|
70
|
+
<value>archive-place</value>
|
71
|
+
<value>authority</value>
|
72
|
+
<value>call-number</value>
|
73
|
+
<value>citation-label</value>
|
74
|
+
<value>citation-number</value>
|
75
|
+
<value>collection-title</value>
|
76
|
+
<value>container-title</value>
|
77
|
+
<value>container-title-short</value>
|
78
|
+
<value>dimensions</value>
|
79
|
+
<value>DOI</value>
|
80
|
+
<value>event</value>
|
81
|
+
<value>event-place</value>
|
82
|
+
<value>first-reference-note-number</value>
|
83
|
+
<value>genre</value>
|
84
|
+
<value>ISBN</value>
|
85
|
+
<value>ISSN</value>
|
86
|
+
<value>jurisdiction</value>
|
87
|
+
<value>keyword</value>
|
88
|
+
<value>locator</value>
|
89
|
+
<value>medium</value>
|
90
|
+
<value>note</value>
|
91
|
+
<value>original-publisher</value>
|
92
|
+
<value>original-publisher-place</value>
|
93
|
+
<value>original-title</value>
|
94
|
+
<value>page</value>
|
95
|
+
<value>page-first</value>
|
96
|
+
<value>PMID</value>
|
97
|
+
<value>PMCID</value>
|
98
|
+
<value>publisher</value>
|
99
|
+
<value>publisher-place</value>
|
100
|
+
<value>references</value>
|
101
|
+
<value>reviewed-title</value>
|
102
|
+
<value>scale</value>
|
103
|
+
<value>section</value>
|
104
|
+
<value>source</value>
|
105
|
+
<value>status</value>
|
106
|
+
<value>title</value>
|
107
|
+
<value>title-short</value>
|
108
|
+
<value>URL</value>
|
109
|
+
<value>version</value>
|
110
|
+
<value>year-suffix</value>
|
111
|
+
</choice>
|
112
|
+
</define>
|
113
|
+
</div>
|
114
|
+
</grammar>
|