+ String capitalWord = NonViralNameParserImplRegExBase.capitalWord;
+ String autNam = "(" + capitalWord + "( in "+capitalWord+")?|Schuurmans Stekhoven|Winiszewska-Ślipińska|Fürst von Lieven|de Coninck|de Man|de Ley|de Grisse|"
+ + "van der Linde|Pschorn-Walcher|van der Berg|J. Goddey)";
+ if (isNotBlank(nameAddition) && nameAddition.matches("(\\[|\\()?nomen.*")){
+ if ("(nomen oblitum)".equals(nameAddition) ){
+ name.addStatus(NomenclaturalStatusType.ZOO_OBLITUM(), null, null);
+ }else if ("nomen dubium".equals(nameAddition) || "[nomen dubium]".equals(nameAddition)){
+ name.addStatus(NomenclaturalStatusType.DOUBTFUL(), null, null);
+ }else if ("nomen nudum".equals(nameAddition)){
+ name.addStatus(NomenclaturalStatusType.NUDUM(), null, null);
+ }else if (nameAddition.matches("nomen nudum \\["+autNam+"\\, 19\\d{2}]")){
+ name.addStatus(NomenclaturalStatusType.NUDUM(), null, null);
+ Person nomNudAuthor = parseNomenNudumAuthor(state, name, nameAddition);
+ if (name.getCombinationAuthorship()!= null || name.getBasionymAuthorship() != null){
+ logger.warn("Author already exists for nomen nudum name with author. ID: " + id);
+ }
+ name.setCombinationAuthorship(nomNudAuthor);
+ }else{
+ logger.warn("'nomen xxx' name addition not recognized: " + nameAddition + ". ID: " + id);
+ }
+ nameAdditionUsed = true;
+ }
+ if (isNotBlank(nameAddition) && nameAddition.matches(autNam + "((, "+autNam+")? & " + autNam + ")?" + ", \\d{4}")){
+ nameAddition = nameAddition.replace(" et ", " & ");
+ int pos = nameAddition.length()-6;
+ String authorStr = nameAddition.substring(0, pos);
+ Integer naYear = Integer.valueOf(nameAddition.substring(pos + 2));
+ if (name.getPublicationYear() != null){
+ logger.warn("Publication year already exists. ID=" + id);
+ }
+ name.setPublicationYear(naYear);
+ TeamOrPersonBase<?> author = getNameAdditionAuthor(authorStr);
+ if (name.getCombinationAuthorship() != null){
+ logger.warn("Combination author already exists. ID=" + id);
+ }
+ name.setCombinationAuthorship(author);
+ nameAdditionUsed = true;
+ }
+ if (isNotBlank(nameAddition) && nameAddition.matches("(nec|non) " + capitalWord + ", \\d{4}")){
+ String str = nameAddition.substring(4);
+ String[] split = str.split(",");
+ IZoologicalName homonym = name.clone();
+ homonym.setCombinationAuthorship(null);
+ homonym.setBasionymAuthorship(null);
+ homonym.setPublicationYear(null);
+ homonym.setOriginalPublicationYear(null);
+ TeamOrPersonBase<?> author = getNameAdditionAuthor(split[0]);
+ homonym.setCombinationAuthorship(author);
+ homonym.setPublicationYear(Integer.valueOf(split[1].trim()));
+ nameAdditionUsed = true;
+ }
+