citeproc 1.0.0.pre12 → 1.0.0
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.
- checksums.yaml +7 -0
- data/.simplecov +4 -0
- data/AGPL +1 -1
- data/BSDL +2 -2
- data/Gemfile +39 -19
- data/README.md +123 -14
- data/Rakefile +22 -8
- data/cucumber.yml +1 -1
- data/features/step_definitions/processor.rb +59 -0
- data/features/support/env.rb +45 -2
- data/lib/citeproc.rb +8 -8
- data/lib/citeproc/abbreviate.rb +5 -4
- data/lib/citeproc/assets.rb +109 -109
- data/lib/citeproc/attributes.rb +11 -11
- data/lib/citeproc/bibliography.rb +107 -71
- data/lib/citeproc/citation_data.rb +175 -150
- data/lib/citeproc/compatibility.rb +5 -108
- data/lib/citeproc/date.rb +23 -12
- data/lib/citeproc/engine.rb +9 -4
- data/lib/citeproc/errors.rb +6 -6
- data/lib/citeproc/extensions.rb +66 -66
- data/lib/citeproc/item.rb +60 -2
- data/lib/citeproc/names.rb +103 -24
- data/lib/citeproc/number.rb +27 -8
- data/lib/citeproc/processor.rb +31 -41
- data/lib/citeproc/selector.rb +132 -126
- data/lib/citeproc/utilities.rb +6 -6
- data/lib/citeproc/variable.rb +5 -4
- data/lib/citeproc/version.rb +1 -1
- data/spec/citeproc/assets_spec.rb +17 -15
- data/spec/citeproc/bibliography_spec.rb +17 -17
- data/spec/citeproc/citation_data_spec.rb +90 -90
- data/spec/citeproc/engine_spec.rb +3 -4
- data/spec/citeproc/item_spec.rb +76 -68
- data/spec/citeproc/names_spec.rb +187 -148
- data/spec/citeproc/processor_spec.rb +119 -115
- data/spec/citeproc/selector_spec.rb +87 -78
- data/spec/citeproc/variable_spec.rb +30 -30
- data/spec/fixtures/locales/locales-en-US.xml +304 -0
- data/spec/spec_helper.rb +32 -1
- data/tasks/testsuite.rb +209 -0
- metadata +19 -87
- data/.gitignore +0 -6
- data/.travis.yml +0 -21
- data/citeproc.gemspec +0 -40
@@ -0,0 +1,304 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<locale xmlns="http://purl.org/net/xbiblio/csl" version="1.0" xml:lang="en-US">
|
3
|
+
<style-options punctuation-in-quote="true"/>
|
4
|
+
<date form="text">
|
5
|
+
<date-part name="month" suffix=" "/>
|
6
|
+
<date-part name="day" form="numeric-leading-zeros" suffix=", "/>
|
7
|
+
<date-part name="year"/>
|
8
|
+
</date>
|
9
|
+
<date form="numeric">
|
10
|
+
<date-part name="month" form="numeric-leading-zeros" suffix="/"/>
|
11
|
+
<date-part name="day" form="numeric-leading-zeros" suffix="/"/>
|
12
|
+
<date-part name="year"/>
|
13
|
+
</date>
|
14
|
+
<terms>
|
15
|
+
<term name="accessed">accessed</term>
|
16
|
+
<term name="and">and</term>
|
17
|
+
<term name="and others">and others</term>
|
18
|
+
<term name="anonymous">anonymous</term>
|
19
|
+
<term name="anonymous" form="short">anon.</term>
|
20
|
+
<term name="at">at</term>
|
21
|
+
<term name="by">by</term>
|
22
|
+
<term name="circa">circa</term>
|
23
|
+
<term name="circa" form="short">c.</term>
|
24
|
+
<term name="cited">cited</term>
|
25
|
+
<term name="edition">
|
26
|
+
<single>edition</single>
|
27
|
+
<multiple>editions</multiple>
|
28
|
+
</term>
|
29
|
+
<term name="edition" form="short">ed.</term>
|
30
|
+
<term name="et-al">et al.</term>
|
31
|
+
<term name="forthcoming">forthcoming</term>
|
32
|
+
<term name="from">from</term>
|
33
|
+
<term name="ibid">ibid.</term>
|
34
|
+
<term name="in">in</term>
|
35
|
+
<term name="in press">in press</term>
|
36
|
+
<term name="internet">internet</term>
|
37
|
+
<term name="interview">interview</term>
|
38
|
+
<term name="letter">letter</term>
|
39
|
+
<term name="no date">no date</term>
|
40
|
+
<term name="no date" form="short">n.d.</term>
|
41
|
+
<term name="online">online</term>
|
42
|
+
<term name="presented at">presented at the</term>
|
43
|
+
<term name="reference">
|
44
|
+
<single>reference</single>
|
45
|
+
<multiple>references</multiple>
|
46
|
+
</term>
|
47
|
+
<term name="reference" form="short">
|
48
|
+
<single>ref.</single>
|
49
|
+
<multiple>refs.</multiple>
|
50
|
+
</term>
|
51
|
+
<term name="retrieved">retrieved</term>
|
52
|
+
|
53
|
+
<!-- ANNO DOMINI; BEFORE CHRIST -->
|
54
|
+
<term name="ad">AD</term>
|
55
|
+
<term name="bc">BC</term>
|
56
|
+
|
57
|
+
<!-- QUOTES -->
|
58
|
+
<term name="open-quote">“</term>
|
59
|
+
<term name="close-quote">”</term>
|
60
|
+
<term name="open-inner-quote">‘</term>
|
61
|
+
<term name="close-inner-quote">’</term>
|
62
|
+
|
63
|
+
<!-- ORDINALS -->
|
64
|
+
<term name="ordinal-01">st</term>
|
65
|
+
<term name="ordinal-02">nd</term>
|
66
|
+
<term name="ordinal-03">rd</term>
|
67
|
+
<term name="ordinal-04">th</term>
|
68
|
+
|
69
|
+
<!-- LONG ORDINALS -->
|
70
|
+
<term name="long-ordinal-01">first</term>
|
71
|
+
<term name="long-ordinal-02">second</term>
|
72
|
+
<term name="long-ordinal-03">third</term>
|
73
|
+
<term name="long-ordinal-04">fourth</term>
|
74
|
+
<term name="long-ordinal-05">fifth</term>
|
75
|
+
<term name="long-ordinal-06">sixth</term>
|
76
|
+
<term name="long-ordinal-07">seventh</term>
|
77
|
+
<term name="long-ordinal-08">eighth</term>
|
78
|
+
<term name="long-ordinal-09">ninth</term>
|
79
|
+
<term name="long-ordinal-10">tenth</term>
|
80
|
+
|
81
|
+
<!-- CATEGORIES -->
|
82
|
+
<term name="anthropology">anthropology</term>
|
83
|
+
<term name="astronomy">astronomy</term>
|
84
|
+
<term name="biology">biology</term>
|
85
|
+
<term name="botany">botany</term>
|
86
|
+
<term name="chemistry">chemistry</term>
|
87
|
+
<term name="engineering">engineering</term>
|
88
|
+
<term name="generic-base">generic base</term>
|
89
|
+
<term name="geography">geography</term>
|
90
|
+
<term name="geology">geology</term>
|
91
|
+
<term name="history">history</term>
|
92
|
+
<term name="humanities">humanities</term>
|
93
|
+
<term name="linguistics">linguistics</term>
|
94
|
+
<term name="literature">literature</term>
|
95
|
+
<term name="math">math</term>
|
96
|
+
<term name="medicine">medicine</term>
|
97
|
+
<term name="philosophy">philosophy</term>
|
98
|
+
<term name="physics">physics</term>
|
99
|
+
<term name="psychology">psychology</term>
|
100
|
+
<term name="sociology">sociology</term>
|
101
|
+
<term name="science">science</term>
|
102
|
+
<term name="political_science">political science</term>
|
103
|
+
<term name="social_science">social science</term>
|
104
|
+
<term name="theology">theology</term>
|
105
|
+
<term name="zoology">zoology</term>
|
106
|
+
|
107
|
+
<!-- LONG LOCATOR FORMS -->
|
108
|
+
<term name="book">
|
109
|
+
<single>book</single>
|
110
|
+
<multiple>books</multiple>
|
111
|
+
</term>
|
112
|
+
<term name="chapter">
|
113
|
+
<single>chapter</single>
|
114
|
+
<multiple>chapters</multiple>
|
115
|
+
</term>
|
116
|
+
<term name="column">
|
117
|
+
<single>column</single>
|
118
|
+
<multiple>columns</multiple>
|
119
|
+
</term>
|
120
|
+
<term name="figure">
|
121
|
+
<single>figure</single>
|
122
|
+
<multiple>figures</multiple>
|
123
|
+
</term>
|
124
|
+
<term name="folio">
|
125
|
+
<single>folio</single>
|
126
|
+
<multiple>folios</multiple>
|
127
|
+
</term>
|
128
|
+
<term name="issue">
|
129
|
+
<single>number</single>
|
130
|
+
<multiple>numbers</multiple>
|
131
|
+
</term>
|
132
|
+
<term name="line">
|
133
|
+
<single>line</single>
|
134
|
+
<multiple>lines</multiple>
|
135
|
+
</term>
|
136
|
+
<term name="note">
|
137
|
+
<single>note</single>
|
138
|
+
<multiple>notes</multiple>
|
139
|
+
</term>
|
140
|
+
<term name="opus">
|
141
|
+
<single>opus</single>
|
142
|
+
<multiple>opera</multiple>
|
143
|
+
</term>
|
144
|
+
<term name="page">
|
145
|
+
<single>page</single>
|
146
|
+
<multiple>pages</multiple>
|
147
|
+
</term>
|
148
|
+
<term name="paragraph">
|
149
|
+
<single>paragraph</single>
|
150
|
+
<multiple>paragraph</multiple>
|
151
|
+
</term>
|
152
|
+
<term name="part">
|
153
|
+
<single>part</single>
|
154
|
+
<multiple>parts</multiple>
|
155
|
+
</term>
|
156
|
+
<term name="section">
|
157
|
+
<single>section</single>
|
158
|
+
<multiple>sections</multiple>
|
159
|
+
</term>
|
160
|
+
<term name="sub verbo">
|
161
|
+
<single>sub verbo</single>
|
162
|
+
<multiple>sub verbis</multiple>
|
163
|
+
</term>
|
164
|
+
<term name="verse">
|
165
|
+
<single>verse</single>
|
166
|
+
<multiple>verses</multiple>
|
167
|
+
</term>
|
168
|
+
<term name="volume">
|
169
|
+
<single>volume</single>
|
170
|
+
<multiple>volumes</multiple>
|
171
|
+
</term>
|
172
|
+
|
173
|
+
<!-- SHORT LOCATOR FORMS -->
|
174
|
+
<term name="book" form="short">bk.</term>
|
175
|
+
<term name="chapter" form="short">chap.</term>
|
176
|
+
<term name="column" form="short">col.</term>
|
177
|
+
<term name="figure" form="short">fig.</term>
|
178
|
+
<term name="folio" form="short">f.</term>
|
179
|
+
<term name="issue" form="short">no.</term>
|
180
|
+
<term name="opus" form="short">op.</term>
|
181
|
+
<term name="page" form="short">
|
182
|
+
<single>p.</single>
|
183
|
+
<multiple>pp.</multiple>
|
184
|
+
</term>
|
185
|
+
<term name="paragraph" form="short">para.</term>
|
186
|
+
<term name="part" form="short">pt.</term>
|
187
|
+
<term name="section" form="short">sec.</term>
|
188
|
+
<term name="sub verbo" form="short">
|
189
|
+
<single>s.v.</single>
|
190
|
+
<multiple>s.vv.</multiple>
|
191
|
+
</term>
|
192
|
+
<term name="verse" form="short">
|
193
|
+
<single>v.</single>
|
194
|
+
<multiple>vv.</multiple>
|
195
|
+
</term>
|
196
|
+
<term name="volume" form="short">
|
197
|
+
<single>vol.</single>
|
198
|
+
<multiple>vols.</multiple>
|
199
|
+
</term>
|
200
|
+
|
201
|
+
<!-- SYMBOL LOCATOR FORMS -->
|
202
|
+
<term name="paragraph" form="symbol">
|
203
|
+
<single>¶</single>
|
204
|
+
<multiple>¶¶</multiple>
|
205
|
+
</term>
|
206
|
+
<term name="section" form="symbol">
|
207
|
+
<single>§</single>
|
208
|
+
<multiple>§§</multiple>
|
209
|
+
</term>
|
210
|
+
|
211
|
+
<!-- LONG ROLE FORMS -->
|
212
|
+
<term name="author">
|
213
|
+
<single>author</single>
|
214
|
+
<multiple>authors</multiple>
|
215
|
+
</term>
|
216
|
+
<term name="editor">
|
217
|
+
<single>editor</single>
|
218
|
+
<multiple>editors</multiple>
|
219
|
+
</term>
|
220
|
+
<term name="editorial-director">
|
221
|
+
<single>editor</single>
|
222
|
+
<multiple>editors</multiple>
|
223
|
+
</term>
|
224
|
+
<term name="translator">
|
225
|
+
<single>translator</single>
|
226
|
+
<multiple>translators</multiple>
|
227
|
+
</term>
|
228
|
+
<term name="editortranslator">
|
229
|
+
<single>editor & translator</single>
|
230
|
+
<multiple>editors & translators</multiple>
|
231
|
+
</term>
|
232
|
+
|
233
|
+
<!-- SHORT ROLE FORMS -->
|
234
|
+
<term name="author" form="short">
|
235
|
+
<single/>
|
236
|
+
<multiple/>
|
237
|
+
</term>
|
238
|
+
<term name="editor" form="short">
|
239
|
+
<single>ed.</single>
|
240
|
+
<multiple>eds.</multiple>
|
241
|
+
</term>
|
242
|
+
<term name="editorial-director" form="short">
|
243
|
+
<single>ed.</single>
|
244
|
+
<multiple>eds.</multiple>
|
245
|
+
</term>
|
246
|
+
<term name="translator" form="short">
|
247
|
+
<single>tran.</single>
|
248
|
+
<multiple>trans.</multiple>
|
249
|
+
</term>
|
250
|
+
<term name="editortranslator" form="short">
|
251
|
+
<single>ed. & tran.</single>
|
252
|
+
<multiple>eds. & trans.</multiple>
|
253
|
+
</term>
|
254
|
+
|
255
|
+
<!-- VERB ROLE FORMS -->
|
256
|
+
<term name="editor" form="verb">edited by</term>
|
257
|
+
<term name="editorial-director" form="verb">edited by</term>
|
258
|
+
<term name="translator" form="verb">translated by</term>
|
259
|
+
<term name="editortranslator" form="verb">edited & translated by</term>
|
260
|
+
<term name="recipient" form="verb">to</term>
|
261
|
+
<term name="interviewer" form="verb">interview by</term>
|
262
|
+
|
263
|
+
<!-- SHORT VERB ROLE FORMS -->
|
264
|
+
<term name="container-author" form="verb-short">by</term>
|
265
|
+
<term name="editor" form="verb-short">ed.</term>
|
266
|
+
<term name="editorial-director" form="verb-short">ed.</term>
|
267
|
+
<term name="translator" form="verb-short">trans.</term>
|
268
|
+
<term name="editortranslator" form="verb-short">ed. & trans. by</term>
|
269
|
+
|
270
|
+
<!-- LONG MONTH FORMS -->
|
271
|
+
<term name="month-01">January</term>
|
272
|
+
<term name="month-02">February</term>
|
273
|
+
<term name="month-03">March</term>
|
274
|
+
<term name="month-04">April</term>
|
275
|
+
<term name="month-05">May</term>
|
276
|
+
<term name="month-06">June</term>
|
277
|
+
<term name="month-07">July</term>
|
278
|
+
<term name="month-08">August</term>
|
279
|
+
<term name="month-09">September</term>
|
280
|
+
<term name="month-10">October</term>
|
281
|
+
<term name="month-11">November</term>
|
282
|
+
<term name="month-12">December</term>
|
283
|
+
|
284
|
+
<!-- SHORT MONTH FORMS -->
|
285
|
+
<term name="month-01" form="short">Jan.</term>
|
286
|
+
<term name="month-02" form="short">Feb.</term>
|
287
|
+
<term name="month-03" form="short">Mar.</term>
|
288
|
+
<term name="month-04" form="short">Apr.</term>
|
289
|
+
<term name="month-05" form="short">May</term>
|
290
|
+
<term name="month-06" form="short">Jun.</term>
|
291
|
+
<term name="month-07" form="short">Jul.</term>
|
292
|
+
<term name="month-08" form="short">Aug.</term>
|
293
|
+
<term name="month-09" form="short">Sep.</term>
|
294
|
+
<term name="month-10" form="short">Oct.</term>
|
295
|
+
<term name="month-11" form="short">Nov.</term>
|
296
|
+
<term name="month-12" form="short">Dec.</term>
|
297
|
+
|
298
|
+
<!-- SEASONS -->
|
299
|
+
<term name="season-01">Spring</term>
|
300
|
+
<term name="season-02">Summer</term>
|
301
|
+
<term name="season-03">Autumn</term>
|
302
|
+
<term name="season-04">Winter</term>
|
303
|
+
</terms>
|
304
|
+
</locale>
|
data/spec/spec_helper.rb
CHANGED
@@ -1,10 +1,25 @@
|
|
1
1
|
begin
|
2
2
|
require 'simplecov'
|
3
|
-
require '
|
3
|
+
require 'coveralls' if ENV['CI']
|
4
4
|
rescue LoadError
|
5
5
|
# ignore
|
6
6
|
end
|
7
7
|
|
8
|
+
begin
|
9
|
+
case
|
10
|
+
when RUBY_PLATFORM < 'java'
|
11
|
+
require 'debug'
|
12
|
+
Debugger.start
|
13
|
+
when defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
|
14
|
+
require 'rubinius/debugger'
|
15
|
+
else
|
16
|
+
require 'debugger'
|
17
|
+
end
|
18
|
+
rescue LoadError
|
19
|
+
# ignore
|
20
|
+
end
|
21
|
+
|
22
|
+
|
8
23
|
$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
9
24
|
$:.unshift(File.dirname(__FILE__))
|
10
25
|
|
@@ -12,3 +27,19 @@ require 'tempfile'
|
|
12
27
|
|
13
28
|
require 'rspec'
|
14
29
|
require 'citeproc'
|
30
|
+
require 'citeproc/ruby'
|
31
|
+
|
32
|
+
require 'csl'
|
33
|
+
require 'csl/styles'
|
34
|
+
|
35
|
+
module Fixtures
|
36
|
+
PATH = File.expand_path('../fixtures', __FILE__)
|
37
|
+
|
38
|
+
Dir[File.join(PATH, '*.rb')].each do |fixture|
|
39
|
+
require fixture
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
RSpec.configure do |config|
|
44
|
+
config.include(Fixtures)
|
45
|
+
end
|
data/tasks/testsuite.rb
ADDED
@@ -0,0 +1,209 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'json'
|
3
|
+
require 'cucumber'
|
4
|
+
|
5
|
+
module CSL
|
6
|
+
module TestSuite
|
7
|
+
|
8
|
+
NON_STANDARD = %{
|
9
|
+
quotes_PunctuationWithInnerQuote # replaces single quotes and apostrophes
|
10
|
+
sort_SubstituteTitle # ---
|
11
|
+
substitute_SuppressOrdinaryVariable # citeproc-js bug?
|
12
|
+
sort_VariousNameMacros1 # ---
|
13
|
+
sort_VariousNameMacros2 # ---
|
14
|
+
sort_VariousNameMacros3 # ---
|
15
|
+
sort_FamilyOnly # invalid CSL (no layout) / ANZ after Aardvark?
|
16
|
+
name_ParticleCaps3 # " in family name
|
17
|
+
testers_SecondAutoGeneratedZoteroPluginTest # uses <sc> for small-caps
|
18
|
+
name_ParticleCaps2 # capitalizes particle of first name
|
19
|
+
parallel_HackedChicago # combines legal cases
|
20
|
+
parallel_Bibliography # ---
|
21
|
+
magic_SecondFieldAlign #
|
22
|
+
magic_CitationLabelInBibliography # Citation labels
|
23
|
+
locale_TermInSort # MLZ
|
24
|
+
label_EditorTranslator1 # ?
|
25
|
+
display_SecondFieldAlignMigratePunctuation # format
|
26
|
+
bibsection_Select # categories / collection variable
|
27
|
+
flipflop_ItalicsWithOk # HTML in input
|
28
|
+
flipflow_ItalicsWithOkAndTextcase # ---
|
29
|
+
variables_TitleShortOnShortTitleNoTitle # converts shortTitle to title-short
|
30
|
+
textcase_Uppercase # no-case input markup
|
31
|
+
textcase_TitleCapitalization # ---
|
32
|
+
textcase_SentenceCapitalization # ---
|
33
|
+
textcase_Lowercase # ---
|
34
|
+
textcase_CapitalizeFirstWithDecor # ---
|
35
|
+
textcase_CapitalizeFirst # ---
|
36
|
+
textcase_CapitalizeAll # ---
|
37
|
+
textcase_SkipNameParticlesInTitleCase #
|
38
|
+
}
|
39
|
+
|
40
|
+
module_function
|
41
|
+
|
42
|
+
def load(file)
|
43
|
+
JSON.parse(File.open(file, 'r:UTF-8').read)
|
44
|
+
end
|
45
|
+
|
46
|
+
def tags_for(json, feature, name)
|
47
|
+
tags = []
|
48
|
+
|
49
|
+
tags << "@#{json['mode']}"
|
50
|
+
tags << "@#{feature}"
|
51
|
+
|
52
|
+
tags << '@bibsection' if json['bibsection']
|
53
|
+
tags << '@bibentries' if json['bibentries']
|
54
|
+
tags << '@citations' if json['citations']
|
55
|
+
tags << '@citation-items' if json['citation_items']
|
56
|
+
|
57
|
+
if NON_STANDARD.include? "#{feature}_#{name}" || feature == 'display'
|
58
|
+
tags << '@non-standard'
|
59
|
+
end
|
60
|
+
|
61
|
+
tags.uniq
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
namespace :test do
|
68
|
+
|
69
|
+
desc 'Fetch the citeproc-test repository and generate the JSON test files'
|
70
|
+
task :init => [:clean] do
|
71
|
+
system "hg clone https://bitbucket.org/bdarcus/citeproc-test test"
|
72
|
+
system "cd test && python2.7 processor.py --grind"
|
73
|
+
end
|
74
|
+
|
75
|
+
desc 'Remove the citeproc-test repository'
|
76
|
+
task :clean do
|
77
|
+
system "rm -rf test"
|
78
|
+
end
|
79
|
+
|
80
|
+
desc 'Delete all generated CSL feature tests'
|
81
|
+
task :clear do
|
82
|
+
Dir['features/**/*'].sort.reverse.each do |path|
|
83
|
+
unless path =~ /features\/(support|step_definitions)/
|
84
|
+
if File.directory?(path)
|
85
|
+
system "rmdir #{path}"
|
86
|
+
else
|
87
|
+
system "rm #{path}"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
desc 'Convert the processor tests to Cucumber features'
|
94
|
+
task :convert => [:clear] do
|
95
|
+
features = Dir['test/processor-tests/machines/*.json'].group_by { |path|
|
96
|
+
File.basename(path).split(/_/, 2)[0]
|
97
|
+
}
|
98
|
+
|
99
|
+
features.each_key do |feature|
|
100
|
+
system "mkdir features/#{feature}"
|
101
|
+
|
102
|
+
features[feature].each do |file|
|
103
|
+
json, name = CSL::TestSuite.load(file), File.basename(file, '.json').split(/_/, 2)[-1]
|
104
|
+
|
105
|
+
tags = CSL::TestSuite.tags_for(json, feature, name)
|
106
|
+
|
107
|
+
# Apply some filters
|
108
|
+
json['result'].gsub!('&', '&')
|
109
|
+
|
110
|
+
File.open("features/#{feature}/#{name}.feature", 'w:UTF-8') do |out|
|
111
|
+
out << "Feature: #{feature}\n"
|
112
|
+
out << " As a CSL cite processor hacker\n"
|
113
|
+
out << " I want the test #{File.basename(file, '.json')} to pass\n\n"
|
114
|
+
out << " " << tags.join(' ') << "\n"
|
115
|
+
out << " Scenario: #{name.gsub(/([[:lower:]])([[:upper:]])/, '\1 \2')}\n"
|
116
|
+
|
117
|
+
out << " Given the following style:\n"
|
118
|
+
out << " \"\"\"\n"
|
119
|
+
|
120
|
+
json['csl'].each_line do |line|
|
121
|
+
out << ' ' << line
|
122
|
+
end
|
123
|
+
out << "\n \"\"\"\n"
|
124
|
+
|
125
|
+
out << " And the following input:\n"
|
126
|
+
out << " \"\"\"\n"
|
127
|
+
out << " " << JSON.dump(json['input']) << "\n"
|
128
|
+
out << " \"\"\"\n"
|
129
|
+
|
130
|
+
|
131
|
+
if json['abbreviations']
|
132
|
+
out << " And the following abbreviations:\n"
|
133
|
+
out << " \"\"\"\n"
|
134
|
+
out << " " << JSON.dump(json['abbreviations']) << "\n"
|
135
|
+
out << " \"\"\"\n"
|
136
|
+
end
|
137
|
+
|
138
|
+
if json['bibentries']
|
139
|
+
out << " And the following items have been cited:\n"
|
140
|
+
out << " \"\"\"\n"
|
141
|
+
out << " " << JSON.dump(json['bibentries'][-1]) << "\n"
|
142
|
+
out << " \"\"\"\n"
|
143
|
+
end
|
144
|
+
|
145
|
+
case json['mode']
|
146
|
+
when 'citation'
|
147
|
+
if json['citations'] # TODO
|
148
|
+
out << " And I have a citations input\n"
|
149
|
+
end
|
150
|
+
|
151
|
+
if json['citation_items']
|
152
|
+
out << " When I cite the following items:\n"
|
153
|
+
out << " \"\"\"\n"
|
154
|
+
out << " " << JSON.dump(json['citation_items']) << "\n"
|
155
|
+
out << " \"\"\"\n"
|
156
|
+
out << " Then the results should be:\n"
|
157
|
+
|
158
|
+
lines = json['result'].each_line.to_a
|
159
|
+
padding = lines.max.length
|
160
|
+
|
161
|
+
lines.each do |line|
|
162
|
+
out << (" | %-#{padding}s |\n" % line.strip)
|
163
|
+
end
|
164
|
+
|
165
|
+
else
|
166
|
+
out << " When I cite all items\n"
|
167
|
+
out << " Then the result should be:\n"
|
168
|
+
out << " \"\"\"\n"
|
169
|
+
json['result'].each_line do |line|
|
170
|
+
out << " " << line.strip << "\n"
|
171
|
+
end
|
172
|
+
out << " \"\"\"\n"
|
173
|
+
end
|
174
|
+
|
175
|
+
|
176
|
+
when 'bibliography-header'
|
177
|
+
out << " When I render the entire bibliography\n"
|
178
|
+
out << " Then the bibliography's options should match:\n"
|
179
|
+
|
180
|
+
headers = Hash[json['result'].each_line.map { |s| s.split(/:\s*/, 2) }]
|
181
|
+
|
182
|
+
out << " | entry-spacing | line-spacing |\n"
|
183
|
+
out << (" | %s | %s |\n" % [headers['entryspacing'].strip, headers['linespacing'].strip])
|
184
|
+
|
185
|
+
when 'bibliography'
|
186
|
+
|
187
|
+
if json['bibsection']
|
188
|
+
out << " When I render the following bibliography selection:\n"
|
189
|
+
out << " \"\"\"\n"
|
190
|
+
out << " " << JSON.dump(json['bibsection']) << "\n"
|
191
|
+
out << " \"\"\"\n"
|
192
|
+
else
|
193
|
+
out << " When I render the entire bibliography\n"
|
194
|
+
end
|
195
|
+
|
196
|
+
out << " Then the bibliography should be:\n"
|
197
|
+
out << " \"\"\"\n"
|
198
|
+
json['result'].each_line do |line|
|
199
|
+
out << ' ' << line
|
200
|
+
end
|
201
|
+
out << "\n \"\"\"\n"
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
|
209
|
+
end
|