@@ -189,17 +189,19 @@ def as_dict(self, include_empty=True):
189189 d [m ] = val
190190 return d
191191
192- def __process_initial__ (self , name_part ):
192+ def __process_initial__ (self , name_part , firstname = False ):
193193 """
194194 Name parts may include prefixes or conjuctions. This function filters these from the name unless it is
195195 a first name, since first names cannot be conjunctions or prefixes.
196196 """
197197 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 )
203205 else :
204206 return self .C .empty_attribute_default
205207
@@ -216,7 +218,7 @@ def initials_list(self):
216218 >>> name.initials_list()
217219 ["J", "D"]
218220 """
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 ]
220222 middle_initials_list = [self .__process_initial__ (name ) for name in self .middle_list if name ]
221223 last_initials_list = [self .__process_initial__ (name ) for name in self .last_list if name ]
222224 return first_initials_list + middle_initials_list + last_initials_list
@@ -238,7 +240,7 @@ def initials(self):
238240 "B. A."
239241 """
240242
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 ]
242244 middle_initials_list = [self .__process_initial__ (name ) for name in self .middle_list if name ]
243245 last_initials_list = [self .__process_initial__ (name ) for name in self .last_list if name ]
244246
@@ -378,14 +380,24 @@ def is_title(self, value):
378380
379381 def is_conjunction (self , piece ):
380382 """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 )
382389
383390 def is_prefix (self , piece ):
384391 """
385392 Lowercase and no periods version of piece is in the
386393 :py:data:`~nameparser.config.prefixes.PREFIXES` set.
387394 """
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
389401
390402 def is_roman_numeral (self , value ):
391403 """
@@ -403,9 +415,14 @@ def is_suffix(self, piece):
403415 `C.suffix_acronyms`.
404416 """
405417 # 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 )
409426
410427 def are_suffixes (self , pieces ):
411428 """Return True if all pieces are suffixes."""
0 commit comments