namae 0.9.2 → 0.9.3
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 +4 -4
- data/Gemfile +4 -3
- data/features/examples.feature +7 -0
- data/features/support/env.rb +4 -1
- data/features/title.feature +17 -0
- data/lib/namae/parser.rb +146 -118
- data/lib/namae/parser.y +14 -6
- data/lib/namae/version.rb +1 -1
- data/namae.gemspec +5 -4
- data/spec/namae/parser_spec.rb +24 -0
- data/spec/spec_helper.rb +4 -1
- metadata +21 -20
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9c35acb2595cb60e9256141f209a97ebe717c5fd
|
|
4
|
+
data.tar.gz: ce3c39facdf1b12051b56edb8330376f777eb2d8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e3e158d44f41686c75eadb19b9a4ef984db05b57d7e2be63aa4db7b8c62bb119216ddbd6a7a1c2bc28d6068f6a7df7a7cbb2cb8f176903b43e54e2af07df21f5
|
|
7
|
+
data.tar.gz: e440237a7f090dc85cbb1e68f1388831147823794b305fcc0e6ae131fe4cb26692d841ca0f9a2facf3bcf65f5ab6ac79fe0ec492a2adeb9e8cb6eac427435eb8
|
data/Gemfile
CHANGED
|
@@ -8,10 +8,10 @@ end
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
group :development do
|
|
11
|
-
gem 'simplecov', '~>0.8', :require => false, :platforms =>
|
|
11
|
+
gem 'simplecov', '~>0.8', :require => false, :platforms => :ruby
|
|
12
12
|
gem 'rubinius-coverage', '~>2.0', :platform => :rbx
|
|
13
13
|
gem 'coveralls', '~>0.7', :require => false
|
|
14
|
-
gem 'racc', '1.4.9', :platform =>
|
|
14
|
+
gem 'racc', '1.4.9', :platform => :ruby
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
group :optional do
|
|
@@ -21,7 +21,8 @@ group :optional do
|
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
group :debug do
|
|
24
|
-
gem 'debugger', '~>1.6', :platform => [:mri_20, :
|
|
24
|
+
gem 'debugger', '~>1.6', :platform => [:mri_20, :mri_19]
|
|
25
|
+
gem 'byebug', '~>3.5', :platform => [:mri_21, :mri_22]
|
|
25
26
|
gem 'rubinius-compiler', '~>2.0', :platform => :rbx
|
|
26
27
|
gem 'rubinius-debugger', '~>2.0', :platform => :rbx
|
|
27
28
|
end
|
data/features/examples.feature
CHANGED
|
@@ -25,3 +25,10 @@ Feature: Parse the names in the Readme file
|
|
|
25
25
|
Scenarios: Readme examples (sort-order)
|
|
26
26
|
| name | given | particle | family | suffix | title | appellation | nick |
|
|
27
27
|
| Carreño Quiñones, María-Jose | María-Jose | | Carreño Quiñones | | | | |
|
|
28
|
+
|
|
29
|
+
@issues @appellation @nick @suffix
|
|
30
|
+
Scenarios: Nicknames Appellations and Suffices
|
|
31
|
+
| name | given | particle | family | suffix | title | appellation | nick |
|
|
32
|
+
| Mr. Yukihiro "Matz" Matsumoto | Yukihiro | | Matsumoto | | | Mr. | Matz |
|
|
33
|
+
| Yukihiro "Matz" Matsumoto Sr. | Yukihiro | | Matsumoto | Sr. | | | Matz |
|
|
34
|
+
| Mr. Yukihiro "Matz" Matsumoto Sr. | Yukihiro | | Matsumoto | Sr. | | Mr. | Matz |
|
data/features/support/env.rb
CHANGED
|
@@ -15,8 +15,11 @@ rescue LoadError
|
|
|
15
15
|
end unless RUBY_VERSION < '1.9'
|
|
16
16
|
|
|
17
17
|
begin
|
|
18
|
-
|
|
18
|
+
case
|
|
19
|
+
when defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
|
|
19
20
|
require 'rubinius/debugger'
|
|
21
|
+
when RUBY_VERSION > '2.0'
|
|
22
|
+
require 'byebug'
|
|
20
23
|
else
|
|
21
24
|
require 'debugger'
|
|
22
25
|
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Feature: Parse names with a title
|
|
2
|
+
As a hacker who works with Namae
|
|
3
|
+
I want to be able to parse names with a title
|
|
4
|
+
|
|
5
|
+
Scenario Outline: Names with titles
|
|
6
|
+
|
|
7
|
+
When I parse the name "<name>"
|
|
8
|
+
Then the parts should be:
|
|
9
|
+
| given | particle | family | suffix | title | appellation | nick |
|
|
10
|
+
| <given> | <particle> | <family> | <suffix> | <title> | <appellation> | <nick> |
|
|
11
|
+
|
|
12
|
+
@names @title
|
|
13
|
+
Scenarios: Names with titles
|
|
14
|
+
| name | given | particle | family | suffix | title |
|
|
15
|
+
# | Bernado Franecki, PhD | Bernado | | Franecki | | PhD |
|
|
16
|
+
# | Dr. John Smith, Ph.D. | John | | Smith | | Dr. Ph.D. |
|
|
17
|
+
|
data/lib/namae/parser.rb
CHANGED
|
@@ -12,7 +12,7 @@ require 'strscan'
|
|
|
12
12
|
module Namae
|
|
13
13
|
class Parser < Racc::Parser
|
|
14
14
|
|
|
15
|
-
module_eval(<<'...end parser.y/module_eval...', 'parser.y',
|
|
15
|
+
module_eval(<<'...end parser.y/module_eval...', 'parser.y', 107)
|
|
16
16
|
|
|
17
17
|
include Singleton
|
|
18
18
|
|
|
@@ -180,72 +180,78 @@ module_eval(<<'...end parser.y/module_eval...', 'parser.y', 99)
|
|
|
180
180
|
##### State transition tables begin ###
|
|
181
181
|
|
|
182
182
|
racc_action_table = [
|
|
183
|
-
-
|
|
184
|
-
-
|
|
185
|
-
-22, -34,
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
15, 24,
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
183
|
+
-39, 16, 32, 30, -40, 31, 33, -39, 17, -39,
|
|
184
|
+
-39, -40, 67, -40, -40, 66, 53, 52, 54, -38,
|
|
185
|
+
59, -22, 39, -34, 45, 58, -38, 53, 52, 54,
|
|
186
|
+
53, 52, 54, 59, 39, 39, 62, 39, 53, 52,
|
|
187
|
+
54, 14, 12, 15, 68, 39, 7, 8, 14, 12,
|
|
188
|
+
15, 58, 39, 7, 8, 14, 22, 15, 24, 14,
|
|
189
|
+
22, 15, 24, 14, 22, 15, 30, 28, 31, 30,
|
|
190
|
+
28, 31, -19, -19, -19, 30, 42, 31, 30, 28,
|
|
191
|
+
31, -20, -20, -20, 30, 46, 31, 30, 28, 31,
|
|
192
|
+
30, 28, 31, -19, -19, -19, 53, 52, 54, 53,
|
|
193
|
+
52, 54, 39, 58, 59 ]
|
|
193
194
|
|
|
194
195
|
racc_action_check = [
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
20, 20,
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
196
|
+
14, 1, 11, 43, 15, 43, 16, 14, 1, 14,
|
|
197
|
+
14, 15, 50, 15, 15, 49, 49, 49, 49, 12,
|
|
198
|
+
50, 12, 23, 49, 27, 37, 12, 32, 32, 32,
|
|
199
|
+
45, 45, 45, 38, 32, 40, 44, 45, 62, 62,
|
|
200
|
+
62, 0, 0, 0, 57, 62, 0, 0, 17, 17,
|
|
201
|
+
17, 60, 61, 17, 17, 9, 9, 9, 9, 20,
|
|
202
|
+
20, 20, 20, 5, 5, 5, 10, 10, 10, 21,
|
|
203
|
+
21, 21, 22, 22, 22, 24, 24, 24, 25, 25,
|
|
204
|
+
25, 28, 28, 28, 29, 29, 29, 35, 35, 35,
|
|
205
|
+
41, 41, 41, 42, 42, 42, 67, 67, 67, 73,
|
|
206
|
+
73, 73, 64, 70, 72 ]
|
|
205
207
|
|
|
206
208
|
racc_action_pointer = [
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
nil, nil,
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
209
|
+
38, 1, nil, nil, nil, 60, nil, nil, nil, 52,
|
|
210
|
+
63, 0, 19, nil, 0, 4, 6, 45, nil, nil,
|
|
211
|
+
56, 66, 69, 12, 72, 75, nil, 22, 78, 81,
|
|
212
|
+
nil, nil, 24, nil, nil, 84, nil, 16, 23, nil,
|
|
213
|
+
25, 87, 90, 0, 34, 27, nil, nil, nil, 13,
|
|
214
|
+
10, nil, nil, nil, nil, nil, nil, 35, nil, nil,
|
|
215
|
+
42, 42, 35, nil, 92, nil, nil, 93, nil, nil,
|
|
216
|
+
94, nil, 94, 96, nil ]
|
|
214
217
|
|
|
215
218
|
racc_action_default = [
|
|
216
|
-
-1, -
|
|
217
|
-
-
|
|
218
|
-
-
|
|
219
|
-
-30, -31, -36,
|
|
220
|
-
-
|
|
221
|
-
-26, -32, -38, -39, -40, -14, -
|
|
222
|
-
-45, -33, -35, -
|
|
219
|
+
-1, -49, -2, -4, -5, -49, -8, -9, -10, -23,
|
|
220
|
+
-49, -49, -19, -28, -30, -31, -49, -49, -6, -7,
|
|
221
|
+
-49, -49, -38, -41, -49, -49, -29, -15, -22, -23,
|
|
222
|
+
-30, -31, -36, 75, -3, -49, -15, -45, -42, -43,
|
|
223
|
+
-41, -49, -22, -23, -14, -36, -21, -16, -24, -37,
|
|
224
|
+
-26, -32, -38, -39, -40, -14, -11, -46, -47, -44,
|
|
225
|
+
-45, -41, -36, -17, -49, -33, -35, -49, -48, -12,
|
|
226
|
+
-45, -18, -25, -27, -13 ]
|
|
223
227
|
|
|
224
228
|
racc_goto_table = [
|
|
225
|
-
3,
|
|
226
|
-
|
|
227
|
-
23,
|
|
228
|
-
43,
|
|
229
|
-
|
|
229
|
+
3, 37, 26, 50, 56, 18, 2, 9, 47, 23,
|
|
230
|
+
1, 19, 20, 26, 73, 27, 50, 3, 60, 64,
|
|
231
|
+
23, 63, 26, 34, 9, nil, 36, 69, 21, 40,
|
|
232
|
+
44, 43, 25, 50, nil, 72, 26, 74, 71, 70,
|
|
233
|
+
55, nil, nil, 35, nil, nil, 61, 41, nil, 65,
|
|
230
234
|
nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
|
|
231
|
-
nil, nil, nil, nil, nil, nil,
|
|
235
|
+
nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
|
|
236
|
+
nil, nil, nil, 65 ]
|
|
232
237
|
|
|
233
238
|
racc_goto_check = [
|
|
234
|
-
3,
|
|
235
|
-
|
|
236
|
-
3,
|
|
237
|
-
7,
|
|
238
|
-
|
|
239
|
+
3, 8, 17, 16, 9, 3, 2, 7, 12, 3,
|
|
240
|
+
1, 4, 7, 17, 14, 10, 16, 3, 8, 15,
|
|
241
|
+
3, 12, 17, 2, 7, nil, 10, 9, 11, 10,
|
|
242
|
+
10, 7, 11, 16, nil, 16, 17, 9, 12, 8,
|
|
243
|
+
10, nil, nil, 11, nil, nil, 10, 11, nil, 3,
|
|
244
|
+
nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
|
|
239
245
|
nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
|
|
240
|
-
nil, nil, nil,
|
|
246
|
+
nil, nil, nil, 3 ]
|
|
241
247
|
|
|
242
248
|
racc_goto_pointer = [
|
|
243
|
-
nil,
|
|
244
|
-
|
|
249
|
+
nil, 10, 6, 0, 6, nil, nil, 7, -22, -33,
|
|
250
|
+
5, 23, -24, nil, -53, -30, -29, -7, nil ]
|
|
245
251
|
|
|
246
252
|
racc_goto_default = [
|
|
247
|
-
nil, nil, nil, 51, 4, 5, 6, 29, nil,
|
|
248
|
-
10, nil, 48, 49, nil,
|
|
253
|
+
nil, nil, nil, 51, 4, 5, 6, 29, nil, nil,
|
|
254
|
+
11, 10, nil, 48, 49, nil, 38, 13, 57 ]
|
|
249
255
|
|
|
250
256
|
racc_reduce_table = [
|
|
251
257
|
0, 0, :racc_error,
|
|
@@ -259,44 +265,48 @@ racc_reduce_table = [
|
|
|
259
265
|
1, 13, :_reduce_none,
|
|
260
266
|
1, 16, :_reduce_9,
|
|
261
267
|
1, 16, :_reduce_10,
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
268
|
+
4, 15, :_reduce_11,
|
|
269
|
+
5, 15, :_reduce_12,
|
|
270
|
+
6, 15, :_reduce_13,
|
|
265
271
|
3, 15, :_reduce_14,
|
|
266
272
|
2, 15, :_reduce_15,
|
|
267
273
|
3, 17, :_reduce_16,
|
|
268
274
|
4, 17, :_reduce_17,
|
|
269
275
|
5, 17, :_reduce_18,
|
|
276
|
+
1, 22, :_reduce_none,
|
|
277
|
+
2, 22, :_reduce_20,
|
|
278
|
+
3, 22, :_reduce_21,
|
|
270
279
|
1, 21, :_reduce_none,
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
1,
|
|
275
|
-
|
|
276
|
-
3, 22, :_reduce_25,
|
|
277
|
-
1, 22, :_reduce_26,
|
|
278
|
-
3, 22, :_reduce_27,
|
|
280
|
+
1, 21, :_reduce_none,
|
|
281
|
+
1, 23, :_reduce_24,
|
|
282
|
+
3, 23, :_reduce_25,
|
|
283
|
+
1, 23, :_reduce_26,
|
|
284
|
+
3, 23, :_reduce_27,
|
|
279
285
|
1, 18, :_reduce_none,
|
|
280
286
|
2, 18, :_reduce_29,
|
|
281
|
-
1,
|
|
282
|
-
1,
|
|
283
|
-
1, 24, :_reduce_none,
|
|
284
|
-
2, 24, :_reduce_33,
|
|
285
|
-
0, 25, :_reduce_none,
|
|
287
|
+
1, 28, :_reduce_none,
|
|
288
|
+
1, 28, :_reduce_none,
|
|
286
289
|
1, 25, :_reduce_none,
|
|
287
|
-
|
|
288
|
-
|
|
290
|
+
2, 25, :_reduce_33,
|
|
291
|
+
0, 26, :_reduce_none,
|
|
292
|
+
1, 26, :_reduce_none,
|
|
293
|
+
0, 24, :_reduce_none,
|
|
294
|
+
1, 24, :_reduce_none,
|
|
289
295
|
1, 14, :_reduce_none,
|
|
290
296
|
1, 14, :_reduce_none,
|
|
291
297
|
1, 14, :_reduce_none,
|
|
292
298
|
0, 19, :_reduce_none,
|
|
293
299
|
1, 19, :_reduce_none,
|
|
294
|
-
1,
|
|
295
|
-
2,
|
|
300
|
+
1, 27, :_reduce_none,
|
|
301
|
+
2, 27, :_reduce_44,
|
|
302
|
+
0, 20, :_reduce_none,
|
|
303
|
+
1, 20, :_reduce_none,
|
|
304
|
+
1, 29, :_reduce_none,
|
|
305
|
+
2, 29, :_reduce_48 ]
|
|
296
306
|
|
|
297
|
-
racc_reduce_n =
|
|
307
|
+
racc_reduce_n = 49
|
|
298
308
|
|
|
299
|
-
racc_shift_n =
|
|
309
|
+
racc_shift_n = 75
|
|
300
310
|
|
|
301
311
|
racc_token_table = {
|
|
302
312
|
false => 0,
|
|
@@ -352,6 +362,7 @@ Racc_token_to_s_table = [
|
|
|
352
362
|
"sort_order",
|
|
353
363
|
"u_words",
|
|
354
364
|
"opt_suffices",
|
|
365
|
+
"opt_titles",
|
|
355
366
|
"last",
|
|
356
367
|
"von",
|
|
357
368
|
"first",
|
|
@@ -359,7 +370,8 @@ Racc_token_to_s_table = [
|
|
|
359
370
|
"words",
|
|
360
371
|
"opt_comma",
|
|
361
372
|
"suffices",
|
|
362
|
-
"u_word"
|
|
373
|
+
"u_word",
|
|
374
|
+
"titles" ]
|
|
363
375
|
|
|
364
376
|
Racc_debug_parser = false
|
|
365
377
|
|
|
@@ -369,28 +381,28 @@ Racc_debug_parser = false
|
|
|
369
381
|
|
|
370
382
|
module_eval(<<'.,.,', 'parser.y', 11)
|
|
371
383
|
def _reduce_1(val, _values, result)
|
|
372
|
-
result = []
|
|
384
|
+
result = []
|
|
373
385
|
result
|
|
374
386
|
end
|
|
375
387
|
.,.,
|
|
376
388
|
|
|
377
389
|
module_eval(<<'.,.,', 'parser.y', 12)
|
|
378
390
|
def _reduce_2(val, _values, result)
|
|
379
|
-
result = [val[0]]
|
|
391
|
+
result = [val[0]]
|
|
380
392
|
result
|
|
381
393
|
end
|
|
382
394
|
.,.,
|
|
383
395
|
|
|
384
396
|
module_eval(<<'.,.,', 'parser.y', 13)
|
|
385
397
|
def _reduce_3(val, _values, result)
|
|
386
|
-
result = val[0] << val[2]
|
|
398
|
+
result = val[0] << val[2]
|
|
387
399
|
result
|
|
388
400
|
end
|
|
389
401
|
.,.,
|
|
390
402
|
|
|
391
403
|
module_eval(<<'.,.,', 'parser.y', 15)
|
|
392
404
|
def _reduce_4(val, _values, result)
|
|
393
|
-
result = Name.new(:given => val[0])
|
|
405
|
+
result = Name.new(:given => val[0])
|
|
394
406
|
result
|
|
395
407
|
end
|
|
396
408
|
.,.,
|
|
@@ -399,14 +411,14 @@ module_eval(<<'.,.,', 'parser.y', 15)
|
|
|
399
411
|
|
|
400
412
|
module_eval(<<'.,.,', 'parser.y', 17)
|
|
401
413
|
def _reduce_6(val, _values, result)
|
|
402
|
-
result = val[0].merge(:family => val[1])
|
|
414
|
+
result = val[0].merge(:family => val[1])
|
|
403
415
|
result
|
|
404
416
|
end
|
|
405
417
|
.,.,
|
|
406
418
|
|
|
407
419
|
module_eval(<<'.,.,', 'parser.y', 18)
|
|
408
420
|
def _reduce_7(val, _values, result)
|
|
409
|
-
result = val[1].merge(val[0])
|
|
421
|
+
result = val[1].merge(val[0])
|
|
410
422
|
result
|
|
411
423
|
end
|
|
412
424
|
.,.,
|
|
@@ -415,99 +427,102 @@ module_eval(<<'.,.,', 'parser.y', 18)
|
|
|
415
427
|
|
|
416
428
|
module_eval(<<'.,.,', 'parser.y', 21)
|
|
417
429
|
def _reduce_9(val, _values, result)
|
|
418
|
-
result = Name.new(:appellation => val[0])
|
|
430
|
+
result = Name.new(:appellation => val[0])
|
|
419
431
|
result
|
|
420
432
|
end
|
|
421
433
|
.,.,
|
|
422
434
|
|
|
423
435
|
module_eval(<<'.,.,', 'parser.y', 22)
|
|
424
436
|
def _reduce_10(val, _values, result)
|
|
425
|
-
result = Name.new(:title => val[0])
|
|
437
|
+
result = Name.new(:title => val[0])
|
|
426
438
|
result
|
|
427
439
|
end
|
|
428
440
|
.,.,
|
|
429
441
|
|
|
430
442
|
module_eval(<<'.,.,', 'parser.y', 26)
|
|
431
443
|
def _reduce_11(val, _values, result)
|
|
432
|
-
result = Name.new(:given => val[0], :family => val[1],
|
|
433
|
-
|
|
444
|
+
result = Name.new(:given => val[0], :family => val[1],
|
|
445
|
+
:suffix => val[2], :title => val[3])
|
|
446
|
+
|
|
434
447
|
result
|
|
435
448
|
end
|
|
436
449
|
.,.,
|
|
437
450
|
|
|
438
|
-
module_eval(<<'.,.,', 'parser.y',
|
|
451
|
+
module_eval(<<'.,.,', 'parser.y', 31)
|
|
439
452
|
def _reduce_12(val, _values, result)
|
|
440
|
-
result = Name.new(:given => val[0], :nick => val[1],
|
|
441
|
-
|
|
453
|
+
result = Name.new(:given => val[0], :nick => val[1],
|
|
454
|
+
:family => val[2], :suffix => val[3], :title => val[4])
|
|
455
|
+
|
|
442
456
|
result
|
|
443
457
|
end
|
|
444
458
|
.,.,
|
|
445
459
|
|
|
446
|
-
module_eval(<<'.,.,', 'parser.y',
|
|
460
|
+
module_eval(<<'.,.,', 'parser.y', 36)
|
|
447
461
|
def _reduce_13(val, _values, result)
|
|
448
462
|
result = Name.new(:given => val[0], :nick => val[1],
|
|
449
|
-
:particle => val[2], :family => val[3]
|
|
450
|
-
|
|
463
|
+
:particle => val[2], :family => val[3],
|
|
464
|
+
:suffix => val[4], :title => val[5])
|
|
465
|
+
|
|
451
466
|
result
|
|
452
467
|
end
|
|
453
468
|
.,.,
|
|
454
469
|
|
|
455
|
-
module_eval(<<'.,.,', 'parser.y',
|
|
470
|
+
module_eval(<<'.,.,', 'parser.y', 42)
|
|
456
471
|
def _reduce_14(val, _values, result)
|
|
457
472
|
result = Name.new(:given => val[0], :particle => val[1],
|
|
458
473
|
:family => val[2])
|
|
459
|
-
|
|
474
|
+
|
|
460
475
|
result
|
|
461
476
|
end
|
|
462
477
|
.,.,
|
|
463
478
|
|
|
464
|
-
module_eval(<<'.,.,', 'parser.y',
|
|
479
|
+
module_eval(<<'.,.,', 'parser.y', 47)
|
|
465
480
|
def _reduce_15(val, _values, result)
|
|
466
481
|
result = Name.new(:particle => val[0], :family => val[1])
|
|
467
|
-
|
|
482
|
+
|
|
468
483
|
result
|
|
469
484
|
end
|
|
470
485
|
.,.,
|
|
471
486
|
|
|
472
|
-
module_eval(<<'.,.,', 'parser.y',
|
|
487
|
+
module_eval(<<'.,.,', 'parser.y', 52)
|
|
473
488
|
def _reduce_16(val, _values, result)
|
|
474
489
|
result = Name.new({ :family => val[0], :suffix => val[2][0],
|
|
475
490
|
:given => val[2][1] }, !!val[2][0])
|
|
476
|
-
|
|
491
|
+
|
|
477
492
|
result
|
|
478
493
|
end
|
|
479
494
|
.,.,
|
|
480
495
|
|
|
481
|
-
module_eval(<<'.,.,', 'parser.y',
|
|
496
|
+
module_eval(<<'.,.,', 'parser.y', 57)
|
|
482
497
|
def _reduce_17(val, _values, result)
|
|
483
498
|
result = Name.new({ :particle => val[0], :family => val[1],
|
|
484
499
|
:suffix => val[3][0], :given => val[3][1] }, !!val[3][0])
|
|
485
|
-
|
|
500
|
+
|
|
486
501
|
result
|
|
487
502
|
end
|
|
488
503
|
.,.,
|
|
489
504
|
|
|
490
|
-
module_eval(<<'.,.,', 'parser.y',
|
|
505
|
+
module_eval(<<'.,.,', 'parser.y', 62)
|
|
491
506
|
def _reduce_18(val, _values, result)
|
|
492
507
|
result = Name.new({ :particle => val[0,2].join(' '), :family => val[2],
|
|
493
508
|
:suffix => val[4][0], :given => val[4][1] }, !!val[4][0])
|
|
494
|
-
|
|
509
|
+
|
|
495
510
|
result
|
|
496
511
|
end
|
|
497
512
|
.,.,
|
|
498
513
|
|
|
499
514
|
# reduce 19 omitted
|
|
500
515
|
|
|
501
|
-
module_eval(<<'.,.,', 'parser.y',
|
|
516
|
+
module_eval(<<'.,.,', 'parser.y', 68)
|
|
502
517
|
def _reduce_20(val, _values, result)
|
|
503
|
-
result = val.join(' ')
|
|
518
|
+
result = val.join(' ')
|
|
504
519
|
result
|
|
505
520
|
end
|
|
506
521
|
.,.,
|
|
507
522
|
|
|
508
|
-
module_eval(<<'.,.,', 'parser.y',
|
|
523
|
+
module_eval(<<'.,.,', 'parser.y', 69)
|
|
509
524
|
def _reduce_21(val, _values, result)
|
|
510
|
-
result = val.join(' ')
|
|
525
|
+
result = val.join(' ')
|
|
511
526
|
result
|
|
512
527
|
end
|
|
513
528
|
.,.,
|
|
@@ -516,39 +531,39 @@ module_eval(<<'.,.,', 'parser.y', 66)
|
|
|
516
531
|
|
|
517
532
|
# reduce 23 omitted
|
|
518
533
|
|
|
519
|
-
module_eval(<<'.,.,', 'parser.y',
|
|
534
|
+
module_eval(<<'.,.,', 'parser.y', 73)
|
|
520
535
|
def _reduce_24(val, _values, result)
|
|
521
|
-
result = [nil,val[0]]
|
|
536
|
+
result = [nil,val[0]]
|
|
522
537
|
result
|
|
523
538
|
end
|
|
524
539
|
.,.,
|
|
525
540
|
|
|
526
|
-
module_eval(<<'.,.,', 'parser.y',
|
|
541
|
+
module_eval(<<'.,.,', 'parser.y', 74)
|
|
527
542
|
def _reduce_25(val, _values, result)
|
|
528
|
-
result = [val[2],val[0]]
|
|
543
|
+
result = [val[2],val[0]]
|
|
529
544
|
result
|
|
530
545
|
end
|
|
531
546
|
.,.,
|
|
532
547
|
|
|
533
|
-
module_eval(<<'.,.,', 'parser.y',
|
|
548
|
+
module_eval(<<'.,.,', 'parser.y', 75)
|
|
534
549
|
def _reduce_26(val, _values, result)
|
|
535
|
-
result = [val[0],nil]
|
|
550
|
+
result = [val[0],nil]
|
|
536
551
|
result
|
|
537
552
|
end
|
|
538
553
|
.,.,
|
|
539
554
|
|
|
540
|
-
module_eval(<<'.,.,', 'parser.y',
|
|
555
|
+
module_eval(<<'.,.,', 'parser.y', 76)
|
|
541
556
|
def _reduce_27(val, _values, result)
|
|
542
|
-
result = [val[0],val[2]]
|
|
557
|
+
result = [val[0],val[2]]
|
|
543
558
|
result
|
|
544
559
|
end
|
|
545
560
|
.,.,
|
|
546
561
|
|
|
547
562
|
# reduce 28 omitted
|
|
548
563
|
|
|
549
|
-
module_eval(<<'.,.,', 'parser.y',
|
|
564
|
+
module_eval(<<'.,.,', 'parser.y', 79)
|
|
550
565
|
def _reduce_29(val, _values, result)
|
|
551
|
-
result = val.join(' ')
|
|
566
|
+
result = val.join(' ')
|
|
552
567
|
result
|
|
553
568
|
end
|
|
554
569
|
.,.,
|
|
@@ -559,9 +574,9 @@ module_eval(<<'.,.,', 'parser.y', 76)
|
|
|
559
574
|
|
|
560
575
|
# reduce 32 omitted
|
|
561
576
|
|
|
562
|
-
module_eval(<<'.,.,', 'parser.y',
|
|
577
|
+
module_eval(<<'.,.,', 'parser.y', 84)
|
|
563
578
|
def _reduce_33(val, _values, result)
|
|
564
|
-
result = val.join(' ')
|
|
579
|
+
result = val.join(' ')
|
|
565
580
|
result
|
|
566
581
|
end
|
|
567
582
|
.,.,
|
|
@@ -586,9 +601,22 @@ module_eval(<<'.,.,', 'parser.y', 81)
|
|
|
586
601
|
|
|
587
602
|
# reduce 43 omitted
|
|
588
603
|
|
|
589
|
-
module_eval(<<'.,.,', 'parser.y',
|
|
604
|
+
module_eval(<<'.,.,', 'parser.y', 94)
|
|
590
605
|
def _reduce_44(val, _values, result)
|
|
591
|
-
result = val.join(' ')
|
|
606
|
+
result = val.join(' ')
|
|
607
|
+
result
|
|
608
|
+
end
|
|
609
|
+
.,.,
|
|
610
|
+
|
|
611
|
+
# reduce 45 omitted
|
|
612
|
+
|
|
613
|
+
# reduce 46 omitted
|
|
614
|
+
|
|
615
|
+
# reduce 47 omitted
|
|
616
|
+
|
|
617
|
+
module_eval(<<'.,.,', 'parser.y', 99)
|
|
618
|
+
def _reduce_48(val, _values, result)
|
|
619
|
+
result = val.join(' ')
|
|
592
620
|
result
|
|
593
621
|
end
|
|
594
622
|
.,.,
|
data/lib/namae/parser.y
CHANGED
|
@@ -22,18 +22,21 @@ rule
|
|
|
22
22
|
honorific : APPELLATION { result = Name.new(:appellation => val[0]) }
|
|
23
23
|
| TITLE { result = Name.new(:title => val[0]) }
|
|
24
24
|
|
|
25
|
-
display_order : u_words word opt_suffices
|
|
25
|
+
display_order : u_words word opt_suffices opt_titles
|
|
26
26
|
{
|
|
27
|
-
result = Name.new(:given => val[0], :family => val[1],
|
|
27
|
+
result = Name.new(:given => val[0], :family => val[1],
|
|
28
|
+
:suffix => val[2], :title => val[3])
|
|
28
29
|
}
|
|
29
|
-
| u_words NICK last
|
|
30
|
+
| u_words NICK last opt_suffices opt_titles
|
|
30
31
|
{
|
|
31
|
-
result = Name.new(:given => val[0], :nick => val[1],
|
|
32
|
+
result = Name.new(:given => val[0], :nick => val[1],
|
|
33
|
+
:family => val[2], :suffix => val[3], :title => val[4])
|
|
32
34
|
}
|
|
33
|
-
| u_words NICK von last
|
|
35
|
+
| u_words NICK von last opt_suffices opt_titles
|
|
34
36
|
{
|
|
35
37
|
result = Name.new(:given => val[0], :nick => val[1],
|
|
36
|
-
:particle => val[2], :family => val[3]
|
|
38
|
+
:particle => val[2], :family => val[3],
|
|
39
|
+
:suffix => val[4], :title => val[5])
|
|
37
40
|
}
|
|
38
41
|
| u_words von last
|
|
39
42
|
{
|
|
@@ -91,6 +94,11 @@ rule
|
|
|
91
94
|
suffices : SUFFIX
|
|
92
95
|
| suffices SUFFIX { result = val.join(' ') }
|
|
93
96
|
|
|
97
|
+
opt_titles : /* empty */ | titles
|
|
98
|
+
|
|
99
|
+
titles : TITLE
|
|
100
|
+
| titles TITLE { result = val.join(' ') }
|
|
101
|
+
|
|
94
102
|
---- header
|
|
95
103
|
require 'singleton'
|
|
96
104
|
require 'strscan'
|
data/lib/namae/version.rb
CHANGED
data/namae.gemspec
CHANGED
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
|
5
|
-
# stub: namae 0.9.
|
|
5
|
+
# stub: namae 0.9.3 ruby lib
|
|
6
6
|
|
|
7
7
|
Gem::Specification.new do |s|
|
|
8
8
|
s.name = "namae"
|
|
9
|
-
s.version = "0.9.
|
|
9
|
+
s.version = "0.9.3"
|
|
10
10
|
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
12
12
|
s.require_paths = ["lib"]
|
|
13
13
|
s.authors = ["Sylvester Keil", "Dan Collis-Puro"]
|
|
14
|
-
s.date = "
|
|
14
|
+
s.date = "2015-01-19"
|
|
15
15
|
s.description = " Namae (\u{540d}\u{524d}) is a parser for human names. It recognizes personal names of various cultural backgrounds and tries to split them into their component parts (e.g., given and family names, honorifics etc.). "
|
|
16
16
|
s.email = ["sylvester@keil.or.at", "dan@collispuro.com"]
|
|
17
17
|
s.extra_rdoc_files = [
|
|
@@ -37,6 +37,7 @@ Gem::Specification.new do |s|
|
|
|
37
37
|
"features/step_definitions/namae_steps.rb",
|
|
38
38
|
"features/suffix.feature",
|
|
39
39
|
"features/support/env.rb",
|
|
40
|
+
"features/title.feature",
|
|
40
41
|
"lib/namae.rb",
|
|
41
42
|
"lib/namae/name.rb",
|
|
42
43
|
"lib/namae/parser.rb",
|
|
@@ -51,7 +52,7 @@ Gem::Specification.new do |s|
|
|
|
51
52
|
]
|
|
52
53
|
s.homepage = "https://github.com/berkmancenter/namae"
|
|
53
54
|
s.licenses = ["AGPL"]
|
|
54
|
-
s.rubygems_version = "2.
|
|
55
|
+
s.rubygems_version = "2.4.5"
|
|
55
56
|
s.summary = "Namae (\u{540d}\u{524d}) parses personal names and splits them into their component parts."
|
|
56
57
|
|
|
57
58
|
if s.respond_to? :specification_version then
|
data/spec/namae/parser_spec.rb
CHANGED
|
@@ -73,6 +73,18 @@ module Namae
|
|
|
73
73
|
end
|
|
74
74
|
end
|
|
75
75
|
|
|
76
|
+
%w{Ph.D. PhD PHD Dr. Dr Prof.}.each do |title|
|
|
77
|
+
describe "the next token is #{title.inspect}" do
|
|
78
|
+
before { parser.send(:input).string = title }
|
|
79
|
+
it 'returns a TITLE token' do
|
|
80
|
+
expect(parser.send(:next_token)).to eq([:TITLE, title])
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it 'the input matches the suffix pattern' do
|
|
84
|
+
expect(parser.title).to match(title)
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
76
88
|
end
|
|
77
89
|
|
|
78
90
|
describe '#parse!' do
|
|
@@ -106,6 +118,14 @@ module Namae
|
|
|
106
118
|
expect(parser.parse!('Yukihiro "Matz" Matsumoto')[0].values_at(:given, :family, :nick)).to eq(%w{Yukihiro Matsumoto Matz})
|
|
107
119
|
end
|
|
108
120
|
|
|
121
|
+
it 'parses appellation and nick in \'Mr. Yukihiro "Matz" Matsumoto\'' do
|
|
122
|
+
expect(parser.parse!('Mr. Yukihiro "Matz" Matsumoto')[0].values_at(:appellation, :nick)).to eq(%w{Mr. Matz})
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it 'parses suffix and nick in \'Yukihiro "Matz" Matsumoto Jr.\'' do
|
|
126
|
+
expect(parser.parse!('Yukihiro "Matz" Matsumoto Jr.')[0].values_at(:suffix, :nick)).to eq(%w{Jr. Matz})
|
|
127
|
+
end
|
|
128
|
+
|
|
109
129
|
it 'parses given and family name in "Poe, Edgar A."' do
|
|
110
130
|
expect(parser.parse!('Poe, Edgar A.')[0].values_at(:given, :family)).to eq(['Edgar A.', 'Poe'])
|
|
111
131
|
end
|
|
@@ -125,6 +145,10 @@ module Namae
|
|
|
125
145
|
expect(parser.parse!('Ken Griffey Jr.')[0].values_at(:given, :family, :suffix)).to eq(['Ken', 'Griffey', 'Jr.'])
|
|
126
146
|
end
|
|
127
147
|
|
|
148
|
+
it 'parses Ph.D. title suffix in display order' do
|
|
149
|
+
expect(parser.parse!('Bernado Franecki Ph.D.')[0].values_at(:given, :family, :title)).to eq(['Bernado', 'Franecki', 'Ph.D.'])
|
|
150
|
+
#expect(parser.parse!('Bernado Franecki, Ph.D.')[0].values_at(:given, :family, :title)).to eq(['Bernado', 'Franecki', 'Ph.D.'])
|
|
151
|
+
end
|
|
128
152
|
end
|
|
129
153
|
end
|
|
130
154
|
|
data/spec/spec_helper.rb
CHANGED
|
@@ -6,8 +6,11 @@ rescue LoadError
|
|
|
6
6
|
end unless RUBY_VERSION < '1.9'
|
|
7
7
|
|
|
8
8
|
begin
|
|
9
|
-
|
|
9
|
+
case
|
|
10
|
+
when defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
|
|
10
11
|
require 'rubinius/debugger'
|
|
12
|
+
when RUBY_VERSION > '2.0'
|
|
13
|
+
require 'byebug'
|
|
11
14
|
else
|
|
12
15
|
require 'debugger'
|
|
13
16
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: namae
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.9.
|
|
4
|
+
version: 0.9.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sylvester Keil
|
|
@@ -9,48 +9,48 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date:
|
|
12
|
+
date: 2015-01-19 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: simplecov
|
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
|
17
17
|
requirements:
|
|
18
|
-
- - ~>
|
|
18
|
+
- - "~>"
|
|
19
19
|
- !ruby/object:Gem::Version
|
|
20
20
|
version: '0.8'
|
|
21
21
|
type: :development
|
|
22
22
|
prerelease: false
|
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
|
24
24
|
requirements:
|
|
25
|
-
- - ~>
|
|
25
|
+
- - "~>"
|
|
26
26
|
- !ruby/object:Gem::Version
|
|
27
27
|
version: '0.8'
|
|
28
28
|
- !ruby/object:Gem::Dependency
|
|
29
29
|
name: rubinius-coverage
|
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
|
31
31
|
requirements:
|
|
32
|
-
- - ~>
|
|
32
|
+
- - "~>"
|
|
33
33
|
- !ruby/object:Gem::Version
|
|
34
34
|
version: '2.0'
|
|
35
35
|
type: :development
|
|
36
36
|
prerelease: false
|
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
|
38
38
|
requirements:
|
|
39
|
-
- - ~>
|
|
39
|
+
- - "~>"
|
|
40
40
|
- !ruby/object:Gem::Version
|
|
41
41
|
version: '2.0'
|
|
42
42
|
- !ruby/object:Gem::Dependency
|
|
43
43
|
name: coveralls
|
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
|
45
45
|
requirements:
|
|
46
|
-
- - ~>
|
|
46
|
+
- - "~>"
|
|
47
47
|
- !ruby/object:Gem::Version
|
|
48
48
|
version: '0.7'
|
|
49
49
|
type: :development
|
|
50
50
|
prerelease: false
|
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
|
52
52
|
requirements:
|
|
53
|
-
- - ~>
|
|
53
|
+
- - "~>"
|
|
54
54
|
- !ruby/object:Gem::Version
|
|
55
55
|
version: '0.7'
|
|
56
56
|
- !ruby/object:Gem::Dependency
|
|
@@ -67,9 +67,9 @@ dependencies:
|
|
|
67
67
|
- - '='
|
|
68
68
|
- !ruby/object:Gem::Version
|
|
69
69
|
version: 1.4.9
|
|
70
|
-
description:
|
|
70
|
+
description: " Namae (名前) is a parser for human names. It recognizes personal names
|
|
71
71
|
of various cultural backgrounds and tries to split them into their component parts
|
|
72
|
-
(e.g., given and family names, honorifics etc.).
|
|
72
|
+
(e.g., given and family names, honorifics etc.). "
|
|
73
73
|
email:
|
|
74
74
|
- sylvester@keil.or.at
|
|
75
75
|
- dan@collispuro.com
|
|
@@ -78,13 +78,13 @@ extensions: []
|
|
|
78
78
|
extra_rdoc_files:
|
|
79
79
|
- README.md
|
|
80
80
|
files:
|
|
81
|
-
- .autotest
|
|
82
|
-
- .coveralls.yml
|
|
83
|
-
- .document
|
|
84
|
-
- .rspec
|
|
85
|
-
- .simplecov
|
|
86
|
-
- .travis.yml
|
|
87
|
-
- .yardopts
|
|
81
|
+
- ".autotest"
|
|
82
|
+
- ".coveralls.yml"
|
|
83
|
+
- ".document"
|
|
84
|
+
- ".rspec"
|
|
85
|
+
- ".simplecov"
|
|
86
|
+
- ".travis.yml"
|
|
87
|
+
- ".yardopts"
|
|
88
88
|
- AGPL
|
|
89
89
|
- BSDL
|
|
90
90
|
- Gemfile
|
|
@@ -97,6 +97,7 @@ files:
|
|
|
97
97
|
- features/step_definitions/namae_steps.rb
|
|
98
98
|
- features/suffix.feature
|
|
99
99
|
- features/support/env.rb
|
|
100
|
+
- features/title.feature
|
|
100
101
|
- lib/namae.rb
|
|
101
102
|
- lib/namae/name.rb
|
|
102
103
|
- lib/namae/parser.rb
|
|
@@ -118,17 +119,17 @@ require_paths:
|
|
|
118
119
|
- lib
|
|
119
120
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
120
121
|
requirements:
|
|
121
|
-
- -
|
|
122
|
+
- - ">="
|
|
122
123
|
- !ruby/object:Gem::Version
|
|
123
124
|
version: '0'
|
|
124
125
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
125
126
|
requirements:
|
|
126
|
-
- -
|
|
127
|
+
- - ">="
|
|
127
128
|
- !ruby/object:Gem::Version
|
|
128
129
|
version: '0'
|
|
129
130
|
requirements: []
|
|
130
131
|
rubyforge_project:
|
|
131
|
-
rubygems_version: 2.
|
|
132
|
+
rubygems_version: 2.4.5
|
|
132
133
|
signing_key:
|
|
133
134
|
specification_version: 4
|
|
134
135
|
summary: Namae (名前) parses personal names and splits them into their component parts.
|