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