csl 1.0.0.pre1 → 1.0.0.pre2
Sign up to get free protection for your applications and to get access to all the features.
- 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>
|