@@ -189,17 +189,19 @@ def as_dict(self, include_empty=True):
189
189
d [m ] = val
190
190
return d
191
191
192
- def __process_initial__ (self , name_part ):
192
+ def __process_initial__ (self , name_part , firstname = False ):
193
193
"""
194
194
Name parts may include prefixes or conjuctions. This function filters these from the name unless it is
195
195
a first name, since first names cannot be conjunctions or prefixes.
196
196
"""
197
197
parts = name_part .split (" " )
198
- parsed = ""
199
- if len (parts ) and not (name_part == 'first' and (self .is_prefix (parts ) or self .is_conjunction (parts ))):
200
- parsed = " " .join (parts )
201
- if len (parsed ) > 0 :
202
- return parsed [0 ]
198
+ initials = []
199
+ if len (parts ) and isinstance (parts , list ):
200
+ for part in parts :
201
+ if not (self .is_prefix (part ) or self .is_conjunction (part )) or firstname == True :
202
+ initials .append (part [0 ])
203
+ if len (initials ) > 0 :
204
+ return " " .join (initials )
203
205
else :
204
206
return self .C .empty_attribute_default
205
207
@@ -216,7 +218,7 @@ def initials_list(self):
216
218
>>> name.initials_list()
217
219
["J", "D"]
218
220
"""
219
- first_initials_list = [self .__process_initial__ (name ) for name in self .first_list if name ]
221
+ first_initials_list = [self .__process_initial__ (name , True ) for name in self .first_list if name ]
220
222
middle_initials_list = [self .__process_initial__ (name ) for name in self .middle_list if name ]
221
223
last_initials_list = [self .__process_initial__ (name ) for name in self .last_list if name ]
222
224
return first_initials_list + middle_initials_list + last_initials_list
@@ -238,7 +240,7 @@ def initials(self):
238
240
"B. A."
239
241
"""
240
242
241
- first_initials_list = [self .__process_initial__ (name ) for name in self .first_list if name ]
243
+ first_initials_list = [self .__process_initial__ (name , True ) for name in self .first_list if name ]
242
244
middle_initials_list = [self .__process_initial__ (name ) for name in self .middle_list if name ]
243
245
last_initials_list = [self .__process_initial__ (name ) for name in self .last_list if name ]
244
246
@@ -378,14 +380,24 @@ def is_title(self, value):
378
380
379
381
def is_conjunction (self , piece ):
380
382
"""Is in the conjunctions set and not :py:func:`is_an_initial()`."""
381
- return piece .lower () in self .C .conjunctions and not self .is_an_initial (piece )
383
+ if isinstance (piece , list ):
384
+ for item in piece :
385
+ if self .is_conjunction (item ):
386
+ return True
387
+ else :
388
+ return piece .lower () in self .C .conjunctions and not self .is_an_initial (piece )
382
389
383
390
def is_prefix (self , piece ):
384
391
"""
385
392
Lowercase and no periods version of piece is in the
386
393
:py:data:`~nameparser.config.prefixes.PREFIXES` set.
387
394
"""
388
- return lc (piece ) in self .C .prefixes
395
+ if isinstance (piece , list ):
396
+ for item in piece :
397
+ if self .is_prefix (item ):
398
+ return True
399
+ else :
400
+ return lc (piece ) in self .C .prefixes
389
401
390
402
def is_roman_numeral (self , value ):
391
403
"""
@@ -403,9 +415,14 @@ def is_suffix(self, piece):
403
415
`C.suffix_acronyms`.
404
416
"""
405
417
# suffixes may have periods inside them like "M.D."
406
- return ((lc (piece ).replace ('.' , '' ) in self .C .suffix_acronyms )
407
- or (lc (piece ) in self .C .suffix_not_acronyms )) \
408
- and not self .is_an_initial (piece )
418
+ if isinstance (piece , list ):
419
+ for piece in pieces :
420
+ if self .is_suffix (piece ):
421
+ return True
422
+ else :
423
+ return ((lc (piece ).replace ('.' , '' ) in self .C .suffix_acronyms )
424
+ or (lc (piece ) in self .C .suffix_not_acronyms )) \
425
+ and not self .is_an_initial (piece )
409
426
410
427
def are_suffixes (self , pieces ):
411
428
"""Return True if all pieces are suffixes."""
0 commit comments