33 6.0.0.4 false 2013-04-29T18:19:52+02:00 JHP 2023-05-10T10:58:13 Arxio_db InTextCitation EarthSciences de 202305_Die_Kueste_dt AddLetterAfterYear Abbreviated Abbreviated All FirstNameLastName Year false None 1 2 3 JournalArticle Autor (Jahr) Bedingung Field "Language" starts with "en" false {0} Always . Always Reference true AccessDate false dd.MM.yyyy Always in press true true false {0} Always . Always Reference true Additions false false {0} Always Always . Reference true Authors false -1 LastNameFirstName Abbreviated Abbreviated All Always ; Always ; false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameOnly NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false {0} Always Always Reference true Collaborators false -1 LastNameFirstName Abbreviated Full All Always , Always , & false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false , {0} Always Always , Reference true Date false d Always im Druck true true false {0} Always . Always Reference true Date2 false D Always in press true false false {0} Always . Always , Reference true Edition false Always false false false false false false false true false th Always Always Always Always Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false false {0} (Hrsg.) Always Always . Reference true Editors false -1 LastNameFirstName Abbreviated Abbreviated All Always ; Always ; false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , Always (Hg.) Always (Hg.) NameOnly NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false {0} Always . Always Reference true CustomField1 false false {0} Always . Always Reference true CustomField2 false false {0} Always . Always Reference true CustomField3 false false {0} Always . Always Reference true CustomField4 false false , {0} Always Always , Reference true Organizations false -1 LastNameFirstName Abbreviated Abbreviated All Always ; Always ; false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameOnly NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false {0} Always . Always Reference true Isbn false false GetTextUnits(ComponentPart componentPart, Template template, Citation citation, out bool handled) { //Name of filter: Convert output to title case (with exceptions, such as "and", "or" etc.) //Version 1.8: Parametrized conversion of full upper case words; functionality was impaired in version 1.7 //Version 1.7: Added checking for null on GetTextUnitsUnfiltered() to avoid NullReferenceExceptions at runtime (which may lead to auto-deactivation of filter) //Version 1.6: ToUpperFirstLetter() method now handles words completely in UPPERCASE and takes culture into consideration //Version 1.5: capitalize stopwords directly after quotation mark //Version 1.4: improved word tokenization //Version 1.3: ignore expressions which are written completely in upper case //Version 1.2: new option to ensure that the reference language is "English" var ensureEnglishIsReferenceLanguage = true; //if set to false, the component part filter will ALWAYS capitalize, regardless of the reference's language var convertFullUpperCaseWords = ConvertFullUpperCaseWords.Never; #region Info on ConvertFullUpperCaseWords parameter /* Example 1: UN and US government made agreement on payments of contribution Example 2: UN AND US GOVERNMENT MADE AGREEMENT ON PAYMENTS OF CONTRIBUTION ConvertFullUpperCaseWords.Never (default) Result 1: UN and US Government Made Agreement on Payments of Contribution Result 2: UN and US GOVERNMENT MADE AGREEMENT on PAYMENTS of CONTRIBUTION ConvertFullUpperCaseWords.Always: Result 1: Un and Us Government Made Agreement on Payments of Contribution Result 2: Un and Us Government Made Agreement on Payments of Contribution ConvertFullUpperCaseWords.Auto: Result 1: UN and US Government Made Agreement on Payments of Contribution Result 2: Un and Us Government Made Agreement on Payments of Contribution */ #endregion CultureInfo culture = CultureInfo.CurrentCulture; handled = false; if (citation == null) return null; if (citation.Reference == null) return null; if (componentPart == null) return null; if (template == null) return null; if (ensureEnglishIsReferenceLanguage) { if (string.IsNullOrEmpty(citation.Reference.Language)) return null; var termsList = new string[] { "en", "eng", "engl", "English", "Englisch" }; var regEx = new Regex(@"\b(" + string.Join("|", termsList) + @")\b", RegexOptions.IgnoreCase); if (!regEx.IsMatch(citation.Reference.Language)) { return null; } } //Words that will not be capitalized; add words to this list as required string[] exceptionsArray = { "a", "an", "and", "as", "at", "but", "by", "down", "for", "from", "in", "into", "nor", "of", "on", "onto", "or", "over", "so", "the", "till", "to", "up", "via", "with", "yet" }; List exceptions = new List(exceptionsArray); var textUnits = componentPart.GetTextUnitsUnfiltered(citation, template); if (textUnits == null || !textUnits.Any()) return null; string fullString = textUnits.ToString(); bool fullUpperCaseTreatment = false; switch (convertFullUpperCaseWords) { case ConvertFullUpperCaseWords.Always: fullUpperCaseTreatment = true; break; case ConvertFullUpperCaseWords.Never: { fullUpperCaseTreatment = false; } break; default: case ConvertFullUpperCaseWords.Auto: { if (HasLowerCase(fullString)) { fullUpperCaseTreatment = false; } else { fullUpperCaseTreatment = true; } } break; } string prevWord = string.Empty; for (int i = 0; i < textUnits.Count; i++) { //textUnit.Text = textUnits[i].Text.ToLower(culture); var text = textUnits[i].Text; //Break the input text into a list of words at whitespaces, //hyphens, opening parens, and ASCII quotation marks string splitPattern = @"(\s)|(-)|(\()|(\"")"; List words = new List(Regex.Split(text, splitPattern)); var counter = 0; text = string.Empty; //Check each remaining word against the list, and append it to the new text. //Leave words in upper case unchanged, unless they appear in the exception list. foreach (string word in words) { counter++; if (counter == 1) // first word in a textunit { if (i == 0) text = text + ToUpperFirstLetter(word, fullUpperCaseTreatment, culture); // first word overall => capitalize else if ((String.IsNullOrWhiteSpace(prevWord)) && !(exceptions.Contains(word.ToLower(culture)))) text = text + ToUpperFirstLetter(word, fullUpperCaseTreatment, culture); // new textunit after space and not stopword => capitalize else text = text + word; // in all other cases: do nothing } else if (prevWord == @"""") // capitalize also stopwords directly after quotation marks { text = text + ToUpperFirstLetter(word, fullUpperCaseTreatment, culture); } else if (exceptions.Contains(word.ToLower(culture))) // check list of exceptions { text = text + word.ToLower(culture); } else // in all other cases: capitalize { text = text + ToUpperFirstLetter(word, fullUpperCaseTreatment, culture); } prevWord = word; // save current word as previous word for next iteration } textUnits[i].Text = text; } handled = true; return textUnits; } public string ToUpperFirstLetter(string input, bool ensureAllButFirstIsLower = false, CultureInfo culture = null) { if (string.IsNullOrEmpty(input)) return input; char[] letters = input.ToCharArray(); for (var i = 0; i < letters.Length; i++) { if (i == 0) { letters[0] = char.ToUpper(letters[0], culture); continue; } if (i > 0 && ensureAllButFirstIsLower == false) break; letters[i] = char.ToLower(letters[i], culture); } return new string(letters); } public enum ConvertFullUpperCaseWords { Never, Always, Auto //converts full uppercase words to lower case only if the conmplete text is written in uppercase }; public bool HasLowerCase (string input) { return !string.IsNullOrEmpty(input) && input.Any(c => char.IsLower(c)); } } }]]> true Convert Output to Title Case V 1.8 . In: {0} Always Always . Reference true NextElementHasData In: Periodical false true Name false {0} Always . Always Reference true Language false false {0} Always . Always Reference true PageCount false Always false false false false false false false true false th Always Always Always Always Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false false {0} Always . Always Reference true NumberOfVolumes false Always false false false false false false false true false th Always Always Always Always Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false false {0} Always . Always Reference true OnlineAddress false false false false false false {0} Always . Always Reference true OriginalPublication false D Always im Druck true false false {0} Always Always Reference true OthersInvolved false -1 LastNameFirstName Full Full All Always ; Always ; false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false , S. {0} Always Always , Reference true PageRange false Arabic true FullRange Always Sp. Always Always false StartPageOnly Always Sp. Always Always false FullRange Always Sp. Always Always Arabic true FullRange Always Nr. Always Always false StartPageOnly Always Nr. Always Always false FullRange Always Nr. Always Always Arabic true FullRange Always Always Always false StartPageOnly Always S. Always Always false FullRange Always S. Always Always Arabic true FullRange Always §§ Always Always true StartPageOnly Always § Always Always false FullRange Always §§ Always Always Arabic true FullRange Always Rn. Always Always true FullRange Always Rn. Always Always false FullRange Always Rn. Always Always false {0} Always . Always Reference true ParallelTitle false false {0} Always Always . Reference true PlaceOfPublication false true 1 1 Always Always , false {0} Always . Always Reference true Price false false . {0}: {1} Always Always . Reference true Publishers false NextElementHasData , PlaceOfPublication false true 1 1 Always Always , false {0} Always . Always Reference true SeriesTitle false true Name false {0} Always . Always Reference true ShortTitle false false {0} Always , Always , Reference true SpecificField1 false false {0} Always Always Reference true SpecificField2 false false {0} Always . Always Reference true SpecificField3 false false {0} Always . Always Reference true SpecificField4 false false {0} Always . Always Reference true SpecificField5 false false {0} Always . Always Reference true SpecificField6 false false {0} Always Always , Reference true SpecificField7 false false {0} Always . Always Reference true NextElementHasData [ StorageMedium false PreviousElementHasData ] false {0} Always , Always Reference true Title false false . {0} Always . Always . Reference true Subtitle false false {0} Always . Always Reference true TitleInOtherLanguages false false . {0} Always Always . Reference true TitleSupplement false false {0} Always . Always . Reference true TranslatedTitle false false {0} Always . Always Reference true UniformTitle false false , {0} Always Always , Reference true Volume false Always false false false false false false false true false th Always Always Always Always Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false false {0} Always Always Reference true YearResolved false yyyy Always im Druck true true false Titel in Sammelwerk Always . Always Reference true Title false false , {0} Always : Always Reference true Number false Always false false false false false false false true false th Always Always Always Always Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false false _({0}) Always Always , Reference true YearResolved false yyyy Always im Druck true true false : {0}: {1} Always Always : Reference true Title false PreviousAndNextElementsHaveData . Subtitle false false ({0}) Always . Always Reference true NextElementHasData ( Number false Always false false false false false false false true false th Always Always Always Always Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false PreviousElementHasData ) false {0} [kursiv] Always Always , Reference true Volume false Always false false false false false false false true false th false false false true false false false false false Always Always Always Always Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false false ({0}, {1}) Always Always Reference true NextElementHasData ( Authors false -1 LastNameOnly Full Full All Always , Always & false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; true 6 1 Always et al. false false false true Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false NextElementHasData , YearResolved false D Always in press true false AnyElementInComponentHasData ) false {0}, {1} Always Always Reference true Authors false -1 LastNameOnly Full Full All Always , Always & false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; true 6 1 Always et al. false false false true Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false PreviousAndNextElementsHaveData , YearResolved false D Always in press true false false . ({0}) Always Always , Reference true Date false d Always im Druck true true false . {0}. Aufl. Always Always . Reference true Edition false Always th Always Always . Aufl. Always Always . Aufl. Always 1|st|2|nd|3|rd Always Always false false {0}. {1} [kursiv] Always . Always . Reference true Title false false false false true false false false false false PreviousAndNextElementsHaveData . Subtitle false false false false true false false false false false false _({0}) Always Always . Reference true TitleSupplement false false ({0}) Always . Always , Reference true PageRange false Arabic true FullRange Always Sp. Always Always false StartPageOnly Always Sp. Always Always false FullRange Always Sp. Always Always Arabic true FullRange Always Nr. Always Always false StartPageOnly Always Nr. Always Always false FullRange Always Nr. Always Always Arabic true FullRange Always Always Always false StartPageOnly Always S. Always Always false FullRange Always S. Always Always Arabic true FullRange Always §§ Always Always true StartPageOnly Always § Always Always false FullRange Always §§ Always Always Arabic true FullRange Always Rn. Always Always false FullRange Always Rn. Always Always false FullRange Always Rn. Always Always false (Originalarbeit erschienen {0}) Always . Always Reference true AnyElementInComponentHasData ( NextElementHasData Originalarbeit erschienen OriginalPublication false D Always im Druck true false AnyElementInComponentHasData ) false GetTextUnits(ComponentPart componentPart, Template template, Citation citation, out bool handled) { //Version 1.0 //Add prefix "no." or "Nr." to volume field depening on language of reference handled = false; if (citation == null) return null; if (citation.Reference == null) return null; if (componentPart == null) return null; #region Find numeric field elements //we treat only numeric field elemements that output the Volume field var numericFieldElements = componentPart.Elements.OfType().Where(element => element.PropertyId == ReferencePropertyId.Number); if (numericFieldElements == null || numericFieldElements.Count() == 0) return null; #endregion Find numeric field elements #region Determine reference to look at Reference reference; if (componentPart.Scope == ComponentPartScope.ParentReference) { if (citation.Reference.ParentReference == null) return null; reference = citation.Reference.ParentReference as Reference; } else { reference = citation.Reference as Reference; } if (reference == null) return null; #endregion Determine reference to look at #region Determine reference language Language language = Language.German; var wordListEN = new string[] { "EN", "ENG", "ENGL", "English", "Englisch", "Anglais" }; var regExEN = new Regex(@"\b(" + string.Join("|", wordListEN) + @")\b", RegexOptions.IgnoreCase); if (regExEN.IsMatch(reference.Language)) language = Language.English; #endregion Determine reference language foreach(NumericFieldElement element in numericFieldElements) { var property = element.PropertyId; var value = (string)reference.GetValue(property); if (string.IsNullOrEmpty(value)) continue; int number; bool isNumeric = int.TryParse(value, out number); #region Volume field contains just a number if (isNumeric) { switch (language) { case Language.English: { element.SingularPrefix.Text = "no. "; element.PluralPrefix.Text = "no. "; } break; case Language.German: { element.SingularPrefix.Text = "Nr. "; element.PluralPrefix.Text = "Nr. "; } break; } } #endregion Volume field contains just a number #region Volume field contains text else { switch (language) { case Language.English: { element.SingularPrefix.Text = ""; element.PluralPrefix.Text = ""; } break; case Language.German: { element.SingularPrefix.Text = ""; element.PluralPrefix.Text = ""; } break; } } #endregion Volume field contains text } return null; } private enum Language { English, German } } }]]> true Nr/No _(Report {0} Nr./no. {1}) Always Always Reference true AnyElementInComponentHasData ( SeriesTitle false true Name PreviousAndNextElementsHaveData Number false Always false false false false false false false true false th Always Always Always Always Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false AnyElementInComponentHasData ) false {0}: {1} Always . Always Reference true PlaceOfPublication false true 1 1 Always Always , NextElementHasData : Organizations false -1 LastNameFirstName Full Full All Always ; Always ; false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false Nicht veröffentlichtes Manuskript Always . Always Reference true Always Nicht veröffentlichtes Manuskript. false {0} (Produzent) Always . Always Reference true Editors false -1 LastNameFirstName Abbreviated Full All Always , Always , & false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , Always (Produzent) Always (Produzenten) NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false {0} (Regie) Always . Always , Reference true Authors false -1 LastNameFirstName Abbreviated Full All Always , Always , & false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , Always (Regie) Always (Regie) NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false [Spielfilm] Always . Always Reference true Always [Spielfilm] false {0} (Autor) Always . Always Reference true Authors false -1 LastNameFirstName Abbreviated Full All Always , Always & false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false PreviousElementHasData (Autor) false {0}, {1} Always . Always Reference true Collaborators false -1 LastNameFirstName Abbreviated Full All Always , Always , & false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false NextElementHasData , YearResolved false D Always In press true false false . Online verfügbar unter {0} Always Always . Reference true Always OnlineAddress false false false false false PreviousElementHasData , zuletzt geprüft am AccessDate false dd.MM.yyyy Always im Druck true true false {0}, {1} Always . Always Reference true Organizations false -1 LastNameFirstName Full Full All Always ; Always ; false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false NextElementHasData , YearResolved false D Always in press true false false {0} (Sprecher) Always . Always , Reference true Collaborators false -1 LastNameFirstName Abbreviated Full All Always , Always , & false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , Always (Sprecher) Always (Sprecher) NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false . Interview mit {0} Always Always . Reference true NextElementHasData Interview mit Collaborators false -1 FirstNameLastName Full Full All Always , Always & false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false {0} {1} Always Always Reference true SpecificField2 false PreviousAndNextElementsHaveData Number false Always false false false false false false false true false th Always Always Always Always Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false false ({0} {1}) Always Always Reference true NextElementHasData ( SpecificField2 false NextElementHasData Number false Always false false false false false false false true false th Always Always Always Always Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false AnyElementInComponentHasData ) false {0}, {1} Always . Always Reference true SpecificField1 false NextElementHasData , YearResolved false D Always in press true false false ({0}, {1}) Always Always Reference true NextElementHasData ( SpecificField1 false NextElementHasData , YearResolved false D Always in press true false PreviousElementHasData ) false ({0} {1}) Always Always Reference true Always ( Organizations false -1 LastNameFirstName Full Full All Always ; Always ; false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false NextElementHasData SpecificField2 false AnyElementInComponentHasData ) false {0} Always . Always Reference true Year false D Always in press true false false ({0} {1}, {2}) Always . Always Reference true Always ( Organizations false -1 LastNameFirstName Full Full All Always ; Always ; false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false NextElementHasData SpecificField2 false NextElementHasData , QuotationPageRange false Arabic true FullRange Always Always Always false StartPageOnly Always Always Always false FullRange Always Always Always Arabic true FullRange Always Always Always false StartPageOnly Always Always Always false FullRange Always Always Always Arabic true FullRange Always S. Always Always false StartPageOnly Always S. Always Always false FullRange Always S. Always Always Arabic true FullRange Always Always Always false StartPageOnly Always Always Always false FullRange Always Always Always Arabic true FullRange Always Always Always false FullRange Always Always Always false FullRange Always Always Always AnyElementInComponentHasData ) false {0}, {1}, {2} Always Always Reference true SpecificField1 false PreviousAndNextElementsHaveData , YearResolved false D Always in press true false PreviousAndNextElementsHaveData , QuotationPageRange false Arabic true FullRange Always Always Always false StartPageOnly Always Always Always false FullRange Always Always Always Arabic true FullRange Always Always Always false StartPageOnly Always Always Always false FullRange Always Always Always Arabic true FullRange Always S. Always Always false StartPageOnly Always S. Always Always false FullRange Always S. Always Always Arabic true FullRange Always Always Always false StartPageOnly Always Always Always false FullRange Always Always Always Arabic true FullRange Always Always Always false FullRange Always Always Always false FullRange Always Always Always false ({0}, {1}, {2}) Always . Always Reference true NextElementHasData ( Organizations false -1 LastNameFirstName Full Full All Always ; Always ; false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false NextElementHasData , YearResolved false D Always in press true false NextElementHasData , QuotationPageRange false Arabic true FullRange Always Always Always false StartPageOnly Always Always Always false FullRange Always Always Always Arabic true FullRange Always Always Always false StartPageOnly Always Always Always false FullRange Always Always Always Arabic true FullRange Always S. Always Always false StartPageOnly Always S. Always Always false FullRange Always S. Always Always Arabic true FullRange Always Always Always false StartPageOnly Always Always Always false FullRange Always Always Always Arabic true FullRange Always Always Always false FullRange Always Always Always false FullRange Always Always Always PreviousElementHasData ) false ({0} {1}, {2}) Always Always Reference true NextElementHasData ( SpecificField2 false NextElementHasData Number false Always false false false false false false false true false th Always Always Always Always Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false NextElementHasData , QuotationPageRange false Arabic true FullRange Always Always Always false StartPageOnly Always Always Always false FullRange Always Always Always Arabic true FullRange Always Always Always false StartPageOnly Always Always Always false FullRange Always Always Always Arabic true FullRange Always S. Always Always false StartPageOnly Always S. Always Always false FullRange Always S. Always Always Arabic true FullRange Always Always Always false StartPageOnly Always Always Always false FullRange Always Always Always Arabic true FullRange Always Always Always false FullRange Always Always Always false FullRange Always Always Always AnyElementInComponentHasData ) false {0}, {1} Always Always Reference true Subtitle false NextElementHasData , YearResolved false D Always in press true false false , {0} [ohne S.] Always Always , Reference true PageRange false Arabic true FullRange Always Always Always false StartPageOnly Always Always Always false FullRange Always Always Always Arabic true FullRange Always Always Always false StartPageOnly Always Always Always false FullRange Always Always Always Arabic true FullRange Always Always Always false StartPageOnly Always Always Always false FullRange Always Always Always Arabic true FullRange Always Always Always false StartPageOnly Always Always Always false FullRange Always Always Always Arabic true FullRange Always Always Always false FullRange Always Always Always false FullRange Always Always Always false {0}, {1} Always Always Reference true Organizations false -1 LastNameFirstName Full Full All Always ; Always ; false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false NextElementHasData , YearResolved false D Always in press true false false ( Always Always Reference true Always ( false ) Always Always Reference true Always ) false {0} [nur Nachnamen] Always Always Reference true Authors false -1 LastNameOnly Full Full All Always , Always & false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; true 6 1 Always , et al. false false false false Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false , S. {0} Always Always , Reference true QuotationPageRange false Arabic true FullRange Always Sp. Always Always false StartPageOnly Always Sp. Always Always false FullRange Always Sp. Always Always Arabic true FullRange Always Always Always false StartPageOnly Always Always Always false FullRange Always Always Always Arabic true FullRange Always S. Always Always false StartPageOnly Always S. Always Always false FullRange Always S. Always Always Arabic true FullRange Always §§ Always Always true StartPageOnly Always § Always Always false FullRange Always §§ Always Always Arabic true FullRange Always Rn. Always Always false FullRange Always Rn. Always Always false FullRange Always Rn. Always Always false {0} [nur Nachnamen, ohne Zusätze] Always Always Reference true Editors false 2 LastNameOnly Full Full All Always , Always & false false false false Always , Always Always Always . LastNameFirstName Full Full All Always , Always , Always , & false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; true 6 1 Always , et al. false false false false Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false , {0} Always Always Reference true Always , YearResolved false yyyy Always im Druck true true false . {0} Always Always : Reference true Title false false [Mit {0}] Always . Always . Reference true AnyElementInComponentHasData [Mit Collaborators false -1 LastNameFirstNameCompact Full Full All Always , Always & false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false AnyElementInComponentHasData ] false {0}: {1} Always Always . Reference true SpecificField1 false PreviousAndNextElementsHaveData : PlaceOfPublication false false -1 -1 Always , et al. Always , false [Themenheft] Always Always Reference true Always [Themenheft] false {0} (Regie) Always . Always , Reference true Editors false -1 LastNameFirstName Full Full All Always , Always & false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false PreviousElementHasData (Regie) false {0} (Redaktion) Always . Always , Reference true Collaborators false -1 LastNameFirstName Full Full All Always , Always & false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false PreviousElementHasData (Redaktion) false {0} (Komponist) Always . Always , Reference true Authors false -1 LastNameFirstName Full Full All Always , Always & false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , Always (Komponist) Always (Komponisten) NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false {0} (Interpret) Always . Always , Reference true Collaborators false -1 LastNameFirstName Full Full All Always ; Always & false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , Always (Interpret) Always (Interpreten) NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false {0} (Dirigent) Always . Always , Reference true Editors false -1 LastNameFirstName Full Full All Always ; Always & false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , Always (Dirigent) Always (Dirigenten) NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false {0} (Orchester) Always . Always . Reference true Organizations false -1 LastNameFirstName Full Full All Always ; Always ; false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false PreviousElementHasData (Orchester) false {0} (Anmelder) Always . Always . Reference true SpecificField2 false PreviousElementHasData (Anmelder) false ({0}, {1}, {2}. {3}) Always . Always , Reference true SeriesTitle false true Name NextElementHasData , Volume false Always th Always Always Always Always Always 1|st|2|nd|3|rd Always Always false NextElementHasData , Edition false Always false false false false false false false true false th Always Always . Aufl. Always Always . Aufl. Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false false {0}: Bd. {1} Always . Always . Reference true SeriesTitle false true Name NextElementHasData : NextElementHasData Bd. Volume false Always false false false false false false false true false th Always Always Always Always Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false false , {0} (Mitarbeiter) Always Always , Reference true Collaborators false -1 LastNameFirstName Abbreviated Abbreviated All Always ; Always ; false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; true 6 6 Always et al. false true false false Always , Always (Mitarbeiter) Always (Mitarbeiter) NameOnly NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false {0}: {1} Always . Always . Reference true SeriesTitle false true Name PreviousAndNextElementsHaveData : Number false Always false false false false false false false true false th Always Always Always Always Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false false (Band {0}, {1}) Always . Always Reference true AnyElementInComponentHasData ( NextElementHasData Band Volume false Always false false false false false false false true false th Always Always Always Always Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false NextElementHasData , PageRange false Arabic true FullRange Always Sp. Always Always false StartPageOnly Always Sp. Always Always false FullRange Always Sp. Always Always Arabic true FullRange Always Nr. Always Always false StartPageOnly Always Nr. Always Always false FullRange Always Nr. Always Always Arabic true FullRange Always S. Always Always false StartPageOnly Always S. Always Always false FullRange Always S. Always Always Arabic true FullRange Always §§ Always Always true StartPageOnly Always § Always Always false FullRange Always §§ Always Always Arabic true FullRange Always Rn. Always Always false FullRange Always Rn. Always Always false FullRange Always Rn. Always Always AnyElementInComponentHasData ) false , {0} Always Always , Reference true PlaceOfPublication false true 1 1 Always Always , false [{0}] Always . Always Reference true NextElementHasData [ StorageMedium false PreviousElementHasData ] false _(Version {0}) Always Always Reference true NextElementHasData (Version SpecificField4 false PreviousElementHasData ) false _[Computer Software] Always Always Reference true Always [Computer Software] false {0} Always Always . Reference true IndexInBibliography false Always Arabic Always Always LetterLowerCase Always Always false {0} Always Always . Reference true FirstFootnoteCitationNumber false false false false {0} Always Always . Reference true CitationKey false false false & {0} [et al] Always Always Reference true AuthorsOrEditorsOrOrganizations false -1 LastNameOnly Full Full All Always , Always & false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; true 2 1 Always et al. false true false true Always , AbbreviationOnly NextElementHasData PreviousElementHasData NextElementHasData PreviousElementHasData false false {0} Always Always . Reference true SeriesTitleEditors false -1 LastNameFirstName Full Full All Always ; Always ; false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false {0} Always Always Reference true AuthorsOrEditorsOrOrganizations false -1 LastNameOnly Full Full All Always , Always und false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; true 2 1 Always et al. false false false false Always , NameOnly NextElementHasData PreviousElementHasData NextElementHasData [ PreviousElementHasData ] false false {0} [und] Always Always Reference true AuthorsOrEditorsOrOrganizations false -1 LastNameOnly Full Full All Always , Always und false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; true 5 1 Always et al. false true false true Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData [ PreviousElementHasData ] false false ({0}, {1}) Always Always Reference true AnyElementInComponentHasData ( YearResolved false yyyy Always im Druck true true PreviousAndNextElementsHaveData , QuotationPageRange false Arabic true FullRange Always Sp.  Always Always false StartPageOnly Always Sp.  Always Always false FullRange Always Sp.  Always Always Arabic true FullRange Always Nr.  Always Always false StartPageOnly Always Nr.  Always Always false FullRange Always Nr.  Always Always Arabic true FullRange Always S.  Always Always false StartPageOnly Always S.  Always Always false FullRange Always S.  Always Always Arabic true FullRange Always §§ Always Always true StartPageOnly Always § Always Always false FullRange Always §§ Always Always Arabic true FullRange Always Rn.  Always Always false FullRange Always Rn.  Always Always false FullRange Always Rn.  Always Always AnyElementInComponentHasData ) false {0} [und et al] Always Always Reference true AuthorsOrEditorsOrOrganizations false -1 LastNameOnly Full Full All Always , Always und false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; true 2 1 Always et al. false false false true Always , AbbreviationOnly NextElementHasData PreviousElementHasData NextElementHasData PreviousElementHasData false false ({0} [year, month]) Always , Always Reference true NextElementHasData ( Date false yyyy, MMMM Always im Druck true true PreviousElementHasData ) false . {0} Always Always . Reference true PlaceOfPublication false true 1 1 Always Always , false . {0}: {1} Always Always , Reference true PlaceOfPublication false true 1 1 Always Always , PreviousAndNextElementsHaveData : Organizations false -1 LastNameFirstName Abbreviated Abbreviated All Always ; Always ; false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; true 6 6 Always et al. false true false false Always , NameOnly NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false , zuletzt geprüft am {0} Always Always , Reference true NextElementHasData zuletzt geprüft am AccessDate false dd.MM.yyyy Always in press false true false ({0}) [with day and month] Always Always Reference true YearResolved false , dd.MM.yyyy Always im Druck true true false ({0}) [yyyy, d. MMMM] Always , Always Reference true NextElementHasData ( Date false yyyy, d. MMMM Always im Druck true true PreviousElementHasData ) false New component: {0} Always Always . Reference true PageRange false Arabic true FullRange Always Always Always false StartPageOnly Always Always Always false FullRange Always Always Always Arabic true FullRange Always Always Always false StartPageOnly Always Always Always false FullRange Always Always Always Arabic true FullRange Always Always Always false StartPageOnly Always Always Always false FullRange Always Always Always Arabic true FullRange Always Always Always false StartPageOnly Always Always Always false FullRange Always Always Always Arabic true FullRange Always Always Always false FullRange Always Always Always false FullRange Always Always Always false {0} [first name last name] Always Always . Reference true Authors false -1 FirstNameLastName Abbreviated Abbreviated All Always , Always & false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false , persönl. Mitteilung, {0} Always Always , Reference true NextElementHasData persönl. Mitteilung, Date false d Always im Druck false true false , {0}/{1} Always Always , Reference true OriginalPublication false D Always im Druck true false PreviousAndNextElementsHaveData / YearResolved false D Always im Druck true false false „{0}“ Always Always Reference true NextElementHasData Title false PreviousElementHasData false {0} Always Always . Reference true AuthorsOrEditorsOrOrganizations false -1 LastNameFirstName Abbreviated Abbreviated All Always ; Always ; false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameOnly NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false . {0}: {1} Always Always . Reference true PlaceOfPublication false true 1 1 Always Always , PreviousAndNextElementsHaveData : Editors false -1 LastNameFirstName Abbreviated Abbreviated All Always ; Always ; false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; true 6 6 Always et al. false true false false Always , NameOnly NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false , {0} ({1}) Always Always , Reference true Volume false Always th Always Always Always Always Always 1|st|2|nd|3|rd Always Always false NextElementHasData ( Number false Always false false false false false false false true false th Always Always Always Always Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false PreviousElementHasData ) false . doi: {0} [noPoint] Always Always , Reference true NextElementHasData https://doi.org/ Doi false false . {0} st ed. Always Always . Reference true Edition false Always th Always Always  ed. Always Always  ed. Always 1|st|2|nd|3|rd Always Always true false GetTextUnits(ComponentPart componentPart, Template template, Citation citation, out bool handled) { //Name of filter: Convert output to title case (with exceptions, such as "and", "or" etc.) //Version 1.8: Parametrized conversion of full upper case words; functionality was impaired in version 1.7 //Version 1.7: Added checking for null on GetTextUnitsUnfiltered() to avoid NullReferenceExceptions at runtime (which may lead to auto-deactivation of filter) //Version 1.6: ToUpperFirstLetter() method now handles words completely in UPPERCASE and takes culture into consideration //Version 1.5: capitalize stopwords directly after quotation mark //Version 1.4: improved word tokenization //Version 1.3: ignore expressions which are written completely in upper case //Version 1.2: new option to ensure that the reference language is "English" var ensureEnglishIsReferenceLanguage = true; //if set to false, the component part filter will ALWAYS capitalize, regardless of the reference's language var convertFullUpperCaseWords = ConvertFullUpperCaseWords.Never; #region Info on ConvertFullUpperCaseWords parameter /* Example 1: UN and US government made agreement on payments of contribution Example 2: UN AND US GOVERNMENT MADE AGREEMENT ON PAYMENTS OF CONTRIBUTION ConvertFullUpperCaseWords.Never (default) Result 1: UN and US Government Made Agreement on Payments of Contribution Result 2: UN and US GOVERNMENT MADE AGREEMENT on PAYMENTS of CONTRIBUTION ConvertFullUpperCaseWords.Always: Result 1: Un and Us Government Made Agreement on Payments of Contribution Result 2: Un and Us Government Made Agreement on Payments of Contribution ConvertFullUpperCaseWords.Auto: Result 1: UN and US Government Made Agreement on Payments of Contribution Result 2: Un and Us Government Made Agreement on Payments of Contribution */ #endregion CultureInfo culture = CultureInfo.CurrentCulture; handled = false; if (citation == null) return null; if (citation.Reference == null) return null; if (componentPart == null) return null; if (template == null) return null; if (ensureEnglishIsReferenceLanguage) { if (string.IsNullOrEmpty(citation.Reference.Language)) return null; var termsList = new string[] { "en", "eng", "engl", "English", "Englisch" }; var regEx = new Regex(@"\b(" + string.Join("|", termsList) + @")\b", RegexOptions.IgnoreCase); if (!regEx.IsMatch(citation.Reference.Language)) { return null; } } //Words that will not be capitalized; add words to this list as required string[] exceptionsArray = { "a", "an", "and", "as", "at", "but", "by", "down", "for", "from", "in", "into", "nor", "of", "on", "onto", "or", "over", "so", "the", "till", "to", "up", "via", "with", "yet" }; List exceptions = new List(exceptionsArray); var textUnits = componentPart.GetTextUnitsUnfiltered(citation, template); if (textUnits == null || !textUnits.Any()) return null; string fullString = textUnits.ToString(); bool fullUpperCaseTreatment = false; switch (convertFullUpperCaseWords) { case ConvertFullUpperCaseWords.Always: fullUpperCaseTreatment = true; break; case ConvertFullUpperCaseWords.Never: { fullUpperCaseTreatment = false; } break; default: case ConvertFullUpperCaseWords.Auto: { if (HasLowerCase(fullString)) { fullUpperCaseTreatment = false; } else { fullUpperCaseTreatment = true; } } break; } string prevWord = string.Empty; for (int i = 0; i < textUnits.Count; i++) { //textUnit.Text = textUnits[i].Text.ToLower(culture); var text = textUnits[i].Text; //Break the input text into a list of words at whitespaces, //hyphens, opening parens, and ASCII quotation marks string splitPattern = @"(\s)|(-)|(\()|(\"")"; List words = new List(Regex.Split(text, splitPattern)); var counter = 0; text = string.Empty; //Check each remaining word against the list, and append it to the new text. //Leave words in upper case unchanged, unless they appear in the exception list. foreach (string word in words) { counter++; if (counter == 1) // first word in a textunit { if (i == 0) text = text + ToUpperFirstLetter(word, fullUpperCaseTreatment, culture); // first word overall => capitalize else if ((String.IsNullOrWhiteSpace(prevWord)) && !(exceptions.Contains(word.ToLower(culture)))) text = text + ToUpperFirstLetter(word, fullUpperCaseTreatment, culture); // new textunit after space and not stopword => capitalize else text = text + word; // in all other cases: do nothing } else if (prevWord == @"""") // capitalize also stopwords directly after quotation marks { text = text + ToUpperFirstLetter(word, fullUpperCaseTreatment, culture); } else if (exceptions.Contains(word.ToLower(culture))) // check list of exceptions { text = text + word.ToLower(culture); } else // in all other cases: capitalize { text = text + ToUpperFirstLetter(word, fullUpperCaseTreatment, culture); } prevWord = word; // save current word as previous word for next iteration } textUnits[i].Text = text; } handled = true; return textUnits; } public string ToUpperFirstLetter(string input, bool ensureAllButFirstIsLower = false, CultureInfo culture = null) { if (string.IsNullOrEmpty(input)) return input; char[] letters = input.ToCharArray(); for (var i = 0; i < letters.Length; i++) { if (i == 0) { letters[0] = char.ToUpper(letters[0], culture); continue; } if (i > 0 && ensureAllButFirstIsLower == false) break; letters[i] = char.ToLower(letters[i], culture); } return new string(letters); } public enum ConvertFullUpperCaseWords { Never, Always, Auto //converts full uppercase words to lower case only if the conmplete text is written in uppercase }; public bool HasLowerCase (string input) { return !string.IsNullOrEmpty(input) && input.Any(c => char.IsLower(c)); } } }]]> true Convert Output to Title Case V 1.8 . {0}: {1} [Capitalized] Always Always . Reference true Title false PreviousAndNextElementsHaveData : Subtitle false false {0} (eds.) Always Always . Reference true Editors false -1 LastNameFirstName Abbreviated Abbreviated All Always ; Always ; false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; true 6 6 Always et al. false true false false Always , Always (ed.) Always (eds.) NameOnly NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false . {0}: {1} Always Always . Reference true Title false PreviousAndNextElementsHaveData : Subtitle false false _{0} ({1}) Always Always , Reference true Volume false Always th Always Always Always Always Always 1|st|2|nd|3|rd Always Always false NextElementHasData , Number false Always false false false false false false false true false th Always Always Always Always Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false false : {0} Always , Always : Reference true Title false false ({0}) Always Always Reference true NextElementHasData ( TitleSupplement false PreviousElementHasData ) false {0} Always Always . Reference true Translators false -1 LastNameFirstName Full Full All Always ; Always ; false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameAbbreviation Always Always Always ( Always ) false false {0} Always Always . Reference true EditionNumberResolved false Always th Always Always Always Always Always 1|st|2|nd|3|rd Always Always false false {0} Always . Always ParentReference true AccessDate false D Always in press true false false {0} Always . Always ParentReference true Additions false false {0} Always Always ParentReference true Authors false -1 LastNameFirstName Full Full All Always ; Always ; false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false {0} Always Always ParentReference true Collaborators false -1 LastNameFirstName Full Full All Always ; Always ; false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false {0} Always . Always ParentReference true Date false D Always in press true false false {0} Always . Always ParentReference true Date2 false D Always in press true false false . {0}. Aufl. Always Always . ParentReference true Edition false Always th Always Always . Aufl. Always Always . Aufl. Always 1|st|2|nd|3|rd Always Always false false In {0} Always . Always ParentReference true Always In Editors false -1 LastNameFirstName Full Full All Always ; Always ; false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false {0} Always . Always ParentReference true CustomField1 false false {0} Always . Always ParentReference true CustomField2 false false {0} Always . Always ParentReference true CustomField3 false false {0} Always . Always ParentReference true CustomField4 false false {0} Always Always ParentReference true Organizations false -1 LastNameFirstName Full Full All Always ; Always ; false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false {0} Always . Always ParentReference true Isbn false false {0} Always . Always ParentReference true Periodical false true false false false true false false false false false Name false {0} Always . Always ParentReference true Language false false {0} Always . Always ParentReference true Number false Always false false false false false false false true false th Always Always Always Always Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false false {0} Always . Always ParentReference true PageCount false Always false false false false false false false true false th Always Always Always Always Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false false {0} Always . Always ParentReference true NumberOfVolumes false Always false false false false false false false true false th Always Always Always Always Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false false {0} Always . Always ParentReference true OnlineAddress false false false false false false {0} Always . Always ParentReference true OriginalPublication false D Always im Druck true false false {0} Always Always ParentReference true OthersInvolved false -1 LastNameFirstName Full Full All Always ; Always ; false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false {0} Always . Always ParentReference true PageRange false Arabic true FullRange Always Always Always false StartPageOnly Always Always Always false FullRange Always Always Always Arabic true FullRange Always Always Always false StartPageOnly Always Always Always false FullRange Always Always Always Arabic true FullRange Always Always Always false StartPageOnly Always Always Always false FullRange Always Always Always Arabic true FullRange Always Always Always false StartPageOnly Always Always Always false FullRange Always Always Always Arabic true FullRange Always Always Always false FullRange Always Always Always false FullRange Always Always Always false {0} Always . Always ParentReference true ParallelTitle false false {0} Always . Always . ParentReference true PlaceOfPublication false false -1 -1 Always , et al. Always , false {0} Always . Always ParentReference true Price false false {0} Always . Always : ParentReference true Publishers false false {0} Always Always ParentReference true SeriesTitle false true Name false {0} Always . Always ParentReference true ShortTitle false false , {0} Always . Always , ParentReference true SpecificField1 false false {0} Always . Always ParentReference true SpecificField2 false false {0} Always . Always ParentReference true SpecificField3 false false {0} Always . Always ParentReference true SpecificField4 false false {0} Always . Always ParentReference true SpecificField5 false false {0} Always . Always ParentReference true SpecificField6 false false Vortrag anlässlich {0} Always . Always . ParentReference true NextElementHasData Vortrag anlässlich SpecificField7 false false {0} Always . Always ParentReference true StorageMedium false false {0} Always . Always ParentReference true Title false false {0} Always . Always ParentReference true Subtitle false false {0} Always . Always ParentReference true TitleInOtherLanguages false false _({0}) Always Always ParentReference true NextElementHasData ( TitleSupplement false PreviousElementHasData ) false {0} Always . Always ParentReference true TranslatedTitle false false {0} Always . Always ParentReference true UniformTitle false false {0} Always ; Always ParentReference true Volume false Always false false false false false false false true false th Always Always Always Always Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false false In Titel. Untertitel Always . Always . ParentReference true NextElementHasData In Title false false false false true false false false false false NextElementHasData false false false true false false false false false . Subtitle false false false false true false false false false false false Herausgeber Always . Always ParentReference true Editors false -1 LastNameFirstName Abbreviated Abbreviated All Always , Always , false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , Always , Ed. Always , Eds. NameAbbreviation NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false Jahr Always . Always ParentReference true Year false D Always in press true false false GetTextUnits(ComponentPart componentPart, Template template, Citation citation, out bool handled) { //Name of filter: Convert output to title case (with exceptions, such as "and", "or" etc.) //Version 1.8: Parametrized conversion of full upper case words; functionality was impaired in version 1.7 //Version 1.7: Added checking for null on GetTextUnitsUnfiltered() to avoid NullReferenceExceptions at runtime (which may lead to auto-deactivation of filter) //Version 1.6: ToUpperFirstLetter() method now handles words completely in UPPERCASE and takes culture into consideration //Version 1.5: capitalize stopwords directly after quotation mark //Version 1.4: improved word tokenization //Version 1.3: ignore expressions which are written completely in upper case //Version 1.2: new option to ensure that the reference language is "English" var ensureEnglishIsReferenceLanguage = true; //if set to false, the component part filter will ALWAYS capitalize, regardless of the reference's language var convertFullUpperCaseWords = ConvertFullUpperCaseWords.Never; #region Info on ConvertFullUpperCaseWords parameter /* Example 1: UN and US government made agreement on payments of contribution Example 2: UN AND US GOVERNMENT MADE AGREEMENT ON PAYMENTS OF CONTRIBUTION ConvertFullUpperCaseWords.Never (default) Result 1: UN and US Government Made Agreement on Payments of Contribution Result 2: UN and US GOVERNMENT MADE AGREEMENT on PAYMENTS of CONTRIBUTION ConvertFullUpperCaseWords.Always: Result 1: Un and Us Government Made Agreement on Payments of Contribution Result 2: Un and Us Government Made Agreement on Payments of Contribution ConvertFullUpperCaseWords.Auto: Result 1: UN and US Government Made Agreement on Payments of Contribution Result 2: Un and Us Government Made Agreement on Payments of Contribution */ #endregion CultureInfo culture = CultureInfo.CurrentCulture; handled = false; if (citation == null) return null; if (citation.Reference == null) return null; if (componentPart == null) return null; if (template == null) return null; if (ensureEnglishIsReferenceLanguage) { if (string.IsNullOrEmpty(citation.Reference.Language)) return null; var termsList = new string[] { "en", "eng", "engl", "English", "Englisch" }; var regEx = new Regex(@"\b(" + string.Join("|", termsList) + @")\b", RegexOptions.IgnoreCase); if (!regEx.IsMatch(citation.Reference.Language)) { return null; } } //Words that will not be capitalized; add words to this list as required string[] exceptionsArray = { "a", "an", "and", "as", "at", "but", "by", "down", "for", "from", "in", "into", "nor", "of", "on", "onto", "or", "over", "so", "the", "till", "to", "up", "via", "with", "yet" }; List exceptions = new List(exceptionsArray); var textUnits = componentPart.GetTextUnitsUnfiltered(citation, template); if (textUnits == null || !textUnits.Any()) return null; string fullString = textUnits.ToString(); bool fullUpperCaseTreatment = false; switch (convertFullUpperCaseWords) { case ConvertFullUpperCaseWords.Always: fullUpperCaseTreatment = true; break; case ConvertFullUpperCaseWords.Never: { fullUpperCaseTreatment = false; } break; default: case ConvertFullUpperCaseWords.Auto: { if (HasLowerCase(fullString)) { fullUpperCaseTreatment = false; } else { fullUpperCaseTreatment = true; } } break; } string prevWord = string.Empty; for (int i = 0; i < textUnits.Count; i++) { //textUnit.Text = textUnits[i].Text.ToLower(culture); var text = textUnits[i].Text; //Break the input text into a list of words at whitespaces, //hyphens, opening parens, and ASCII quotation marks string splitPattern = @"(\s)|(-)|(\()|(\"")"; List words = new List(Regex.Split(text, splitPattern)); var counter = 0; text = string.Empty; //Check each remaining word against the list, and append it to the new text. //Leave words in upper case unchanged, unless they appear in the exception list. foreach (string word in words) { counter++; if (counter == 1) // first word in a textunit { if (i == 0) text = text + ToUpperFirstLetter(word, fullUpperCaseTreatment, culture); // first word overall => capitalize else if ((String.IsNullOrWhiteSpace(prevWord)) && !(exceptions.Contains(word.ToLower(culture)))) text = text + ToUpperFirstLetter(word, fullUpperCaseTreatment, culture); // new textunit after space and not stopword => capitalize else text = text + word; // in all other cases: do nothing } else if (prevWord == @"""") // capitalize also stopwords directly after quotation marks { text = text + ToUpperFirstLetter(word, fullUpperCaseTreatment, culture); } else if (exceptions.Contains(word.ToLower(culture))) // check list of exceptions { text = text + word.ToLower(culture); } else // in all other cases: capitalize { text = text + ToUpperFirstLetter(word, fullUpperCaseTreatment, culture); } prevWord = word; // save current word as previous word for next iteration } textUnits[i].Text = text; } handled = true; return textUnits; } public string ToUpperFirstLetter(string input, bool ensureAllButFirstIsLower = false, CultureInfo culture = null) { if (string.IsNullOrEmpty(input)) return input; char[] letters = input.ToCharArray(); for (var i = 0; i < letters.Length; i++) { if (i == 0) { letters[0] = char.ToUpper(letters[0], culture); continue; } if (i > 0 && ensureAllButFirstIsLower == false) break; letters[i] = char.ToLower(letters[i], culture); } return new string(letters); } public enum ConvertFullUpperCaseWords { Never, Always, Auto //converts full uppercase words to lower case only if the conmplete text is written in uppercase }; public bool HasLowerCase (string input) { return !string.IsNullOrEmpty(input) && input.Any(c => char.IsLower(c)); } } }]]> true Convert Output to Title Case V 1.8 , {0}: {1} [Capitalized] Always Always , ParentReference true Title false PreviousAndNextElementsHaveData : Subtitle false false . In: {0} (Hrsg.) Always Always . ParentReference true Always In NextElementHasData : Editors false -1 LastNameFirstName Abbreviated Abbreviated All Always ; Always ; false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; false 3 1 Always , et al. false false false false Always , Always (Hg.) Always (Hg.) NameOnly NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false . {0}: {1} Always Always ParentReference true Publishers false PreviousAndNextElementsHaveData , PlaceOfPublication false true 1 1 Always Always , false {0}: Bd. {1} [kursiv] Always . Always . ParentReference true SeriesTitle false true false false false true false false false false false Name PreviousElementHasData : NextElementHasData false false false true false false false false false Bd. Volume false Always false false false false false false false true false th false false false true false false false false false Always Always Always Always Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false false {0}: Bd. {1} Always Always . ParentReference true SeriesTitle false true Name PreviousElementHasData , Volume false Always false false false false false false false true false th Always Always Always Always Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false false ({0}) Always . Always ParentReference true AnyElementInComponentHasData ( TitleSupplement false AnyElementInComponentHasData ) false ({0}) Always . Always ParentReference true AnyElementInComponentHasData ( Edition false Always false false false false false false false true false th Always Always . Aufl. Always Always . Aufl. Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false AnyElementInComponentHasData ) false [Sonderheft] Always . Always ParentReference true Always [Sonderheft] false {0}({1}) Always . Always . ParentReference true Volume false Always false false false false false false false true false th false false false true false false false false false Always Always Always Always Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false NextElementHasData ( Number false Always false false false false false false false true false th Always Always Always Always Always false false false false false false false true false 1|st|2|nd|3|rd Always Always false PreviousElementHasData ) false In Always Always . ParentReference true Always In false [{0}] Always . Always ParentReference true NextElementHasData [ StorageMedium false PreviousElementHasData ] false {0} Always Always . ParentReference true IndexInBibliography false Always Arabic Always Always LetterLowerCase Always Always false {0} Always Always . ParentReference true FirstFootnoteCitationNumber false false false false , Bd. {0} Always Always , ParentReference true Volume false Always th Always Bd. Always Always Bd. Always Always 1|st|2|nd|3|rd Always Always false false In {0} {1} [kursiv] Always . Always , ParentReference true NextElementHasData In Title false false false false true false false false false false NextElementHasData . Subtitle false false ({0}) Always , Always , ParentReference true SpecificField7 false false ({0}) with day and month Always Always . ParentReference true NextElementHasData ( YearResolved false yyyy, dd. MMMM Always In press true true PreviousElementHasData ) false : {0}: {1} Always . Always : ParentReference true Title false PreviousAndNextElementsHaveData . Subtitle false false . {0} st ed. Always Always . ParentReference true Edition false Always th Always Always  ed. Always Always  ed. Always 1|st|2|nd|3|rd Always Always true false . In: {0} (eds.) Always Always . ParentReference true Always In: Editors false -1 LastNameFirstName Abbreviated Abbreviated All Always ; Always ; false false false false Always , Always Always Always . LastNameFirstName Full Full All Always ; Always ; Always ; false false false false Always , Always Always Always . false LastNameFirstName Full Full All false false false false Always , Always Always Always . false Always ; true 6 6 Always et al. false true false false Always , Always (ed.) Always (eds.) NameOnly NextElementHasData PreviousElementHasData NextElementHasData ( PreviousElementHasData ) false false false Schriftenverzeichnis . 567 true None Arabic 1 0 ; true 0 AuthorThenYearAscendingThenTitle DGPs Sort Macro Version 2.7 0 (positive): x should go after y, x is greater than y < 0 (negative): x should go before y, x is less than */ //First we make sure we are comparing BibliographyCitations only var xBibliographyCitation = x as BibliographyCitation; var yBibliographyCitation = y as BibliographyCitation; if (xBibliographyCitation == null || yBibliographyCitation == null) return 0; var xReference = xBibliographyCitation.Reference; var yReference = yBibliographyCitation.Reference; if (xReference == null || yBibliographyCitation.Reference == null) return 0; //(1) Some comparers are predefined as static members of the CitationComparer class, see IntelliSense var defaultCitationComparer = CitationComparer.AuthorYearTitleAscending; //(2) You can also build citation comparers based on arbitrary reference properties ("fields") //(2a) First, define a list of property sort descriptors of the reference type var sortDescriptors = new List>(); sortDescriptors.Add(new PropertySortDescriptor(ReferencePropertyDescriptor.YearResolved, ListSortDirection.Descending)); sortDescriptors.Add(new PropertySortDescriptor(ReferencePropertyDescriptor.AuthorsOrEditorsOrOrganizations, ListSortDirection.Ascending)); sortDescriptors.Add(new PropertySortDescriptor(ReferencePropertyDescriptor.Title, ListSortDirection.Ascending)); //(2b) Then, construct a new citation comparer using the list of sort descriptors var specialCitationComparer = new CitationComparer(sortDescriptors); //(3) Or you can define something altogether NEW //e.g. first I want to see all Internet Documents, sorted by AuthorYearTitle, then all other reference types, sorted by year first, then author and title (see specialReferenceComparer above) if (xReference.ReferenceType == ReferenceType.InternetDocument && yReference.ReferenceType == ReferenceType.InternetDocument) return specialCitationComparer.Compare(x, y); //YearAuthorTitle if (xReference.ReferenceType == ReferenceType.InternetDocument && yReference.ReferenceType != ReferenceType.InternetDocument) return -1; if (xReference.ReferenceType != ReferenceType.InternetDocument && yReference.ReferenceType == ReferenceType.InternetDocument) return 1; return defaultCitationComparer.Compare(x, y); } } }]]> OrderOfAppearance LetterLowerCase false ) false Completed None JournalArticle true Completed None Book true Completed None BookEdited true Completed BookEdited Contribution true Completed UnpublishedWork Contribution true Completed ContributionBookEdited CollectedWorks Contribution false Completed ConferenceProceedings Contribution true Completed SpecialIssue Contribution false Completed None InternetDocument true Completed None Thesis true Completed None NewspaperArticle false Completed None UnpublishedWork true Completed None Unknown true Completed None ArchiveMaterial false Completed BookEdited ArchiveMaterial false Completed None AudioBook false Completed None AudioOrVideoDocument false Completed None RadioPlay false Completed Book None CollectedWorks true Completed None ComputerProgram true Completed None ConferenceProceedings true Completed None CourtDecision false Completed None InterviewMaterial false Completed Book None Map false Completed None Movie false Completed None MusicTrack false Completed MusicAlbum MusicTrack false Completed None NewsAgencyReport false Completed None Patent false Completed None PersonalCommunication false Completed None PressRelease false Completed None Broadcast false Completed None File false Completed None MusicAlbum false Completed None Standard true Completed None StatuteOrRegulation true Completed BookEdited StatuteOrRegulation true Completed None Manuscript false Completed None Lecture true Completed None LegalCommentary false Completed LegalCommentary ContributionInLegalCommentary false Completed None SpecialIssue false true true , ; AuthorThenYearAscendingThenTitle false None Unknown None JournalArticle false None Unknown None Book false None Unknown None BookEdited false None Unknown BookEdited Contribution false None Unknown UnpublishedWork Contribution false None ContributionBookEdited CollectedWorks Contribution false None ContributionBookEdited ConferenceProceedings Contribution false None Unknown SpecialIssue Contribution false None Unknown None InternetDocument false None Unknown None Thesis false None Unknown None NewspaperArticle false None Unknown None UnpublishedWork false None None Unknown false None Unknown None ArchiveMaterial false None Unknown BookEdited ArchiveMaterial false None Unknown None AudioBook false None Unknown None AudioOrVideoDocument false None None RadioPlay false None Book None CollectedWorks false None Unknown None ComputerProgram false None BookEdited None ConferenceProceedings false None None CourtDecision false None None InterviewMaterial false None Book None Map false None Unknown None Movie false None Unknown None MusicTrack false None Unknown MusicAlbum MusicTrack false None Unknown None NewsAgencyReport false None Unknown None Patent false None Unknown None PersonalCommunication false None Unknown None PressRelease false None Unknown None Broadcast false None None File false None Unknown None MusicAlbum false None None Standard false None Unknown None StatuteOrRegulation false None BookEdited StatuteOrRegulation false None Unknown None Manuscript false None Unknown None Lecture false None None LegalCommentary false None Unknown LegalCommentary ContributionInLegalCommentary false None Unknown None SpecialIssue false false false true , ; ; ; true 3 true 3 AlwaysButOncePerRange true AuthorThenYearAscendingThenTitle false None Unknown None JournalArticle false None Unknown None Book false None Unknown None BookEdited false None Unknown BookEdited Contribution false None Unknown UnpublishedWork Contribution false None ContributionBookEdited CollectedWorks Contribution false None ContributionBookEdited ConferenceProceedings Contribution false None Unknown SpecialIssue Contribution false None Unknown None InternetDocument false None Unknown None Thesis false None Unknown None NewspaperArticle false None Unknown None UnpublishedWork false None None Unknown false None Unknown None ArchiveMaterial false None Unknown BookEdited ArchiveMaterial false None Unknown None AudioBook false None Unknown None AudioOrVideoDocument false None None RadioPlay false None Book None CollectedWorks false None Unknown None ComputerProgram false None BookEdited None ConferenceProceedings false None None CourtDecision false None None InterviewMaterial false None Book None Map false None Unknown None Movie false None Unknown None MusicTrack false None Unknown MusicAlbum MusicTrack false None Unknown None NewsAgencyReport false None Unknown None Patent false None None PersonalCommunication false None Unknown None PressRelease false None Unknown None Broadcast false None None File false None Unknown None MusicAlbum false None None Standard false None Unknown None StatuteOrRegulation false None BookEdited StatuteOrRegulation false None Unknown None Manuscript false None Unknown None Lecture false None None LegalCommentary false None Unknown LegalCommentary ContributionInLegalCommentary false None Unknown None SpecialIssue false