public int Compare(Citation x, Citation y) { /* * This is an example of a custom sort macro that sorts all references of type 'internet document' on top of the bibliography. * The internet documents themselves are sorted according to a different logic than the rest of the cited documents. * Return values: * 0: x is considered the same as y sorting-wise, so we cannot tell a difference based on the algorithm below * > 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 || yReference == null) { return(0); } //Set the NoBib flag to true for PersonalCommunication (aka "Persönliche Kommunikation") //if (xReference.ReferenceType == ReferenceType.PersonalCommunication) xBibliographyCitation.NoBib = true; //if (yReference.ReferenceType == ReferenceType.PersonalCommunication) yBibliographyCitation.NoBib = true; //now the sorting can begin var defaultCitationComparer = CitationComparer.AuthorYearTitleOrNoAuthorThenTitleYearAscending; var defaultResult = defaultCitationComparer.Compare(x, y); if (defaultResult != 0) { return(defaultResult); } var yearTitleSortDescriptors = new List <PropertySortDescriptor <Reference> >(); yearTitleSortDescriptors.Add(new PropertySortDescriptor <Reference>(ReferencePropertyDescriptor.YearResolved)); yearTitleSortDescriptors.Add(new PropertySortDescriptor <Reference>(ReferencePropertyDescriptor.Title)); yearTitleSortDescriptors.Add(new PropertySortDescriptor <Reference>(ReferencePropertyDescriptor.Volume)); yearTitleSortDescriptors.Add(new PropertySortDescriptor <Reference>(ReferencePropertyDescriptor.Number)); var yearTitleComparer = new CitationComparer(yearTitleSortDescriptors); return(yearTitleComparer.Compare(x, y)); }
public int Compare(Citation x, Citation y) { //Version 1.1 Corrected compilation error "IReference" not found //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 || yReference == null) { return(0); } var sortDescriptors = new List <PropertySortDescriptor <Reference> >(); sortDescriptors.Add(new PropertySortDescriptor <Reference>(ReferencePropertyDescriptor.AuthorsOrEditorsOrOrganizations, ListSortDirection.Ascending)); var authorsComparer = new CitationComparer(sortDescriptors); var authorsCompareResult = authorsComparer.Compare(x, y); if (authorsCompareResult != 0) { return(authorsCompareResult); } string xSortTitle = GetSortTitle(xReference); string ySortTitle = GetSortTitle(yReference); var sortTitleCompareResult = xSortTitle.CompareTo(ySortTitle); if (sortTitleCompareResult != 0) { return(sortTitleCompareResult); } sortDescriptors.Clear(); sortDescriptors.Add(new PropertySortDescriptor <Reference>(ReferencePropertyDescriptor.YearResolved, ListSortDirection.Descending)); var yearComparer = new CitationComparer(sortDescriptors); return(yearComparer.Compare(x, y)); }
public int Compare(Citation x, Citation y) { //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 || yReference == null) { return(0); } //1st Comparer var defaultCitationComparer = CitationComparer.AuthorYearTitleOrNoAuthorThenTitleYearAscending; //2nd Comparer, if first yields 0 var yearTitleVolumeSortDescriptors = new List <PropertySortDescriptor <Reference> >(); yearTitleVolumeSortDescriptors.Add(new PropertySortDescriptor <Reference>(ReferencePropertyDescriptor.YearResolved)); yearTitleVolumeSortDescriptors.Add(new PropertySortDescriptor <Reference>(ReferencePropertyDescriptor.Title)); yearTitleVolumeSortDescriptors.Add(new PropertySortDescriptor <Reference>(ReferencePropertyDescriptor.Volume)); yearTitleVolumeSortDescriptors.Add(new PropertySortDescriptor <Reference>(ReferencePropertyDescriptor.Number)); var yearTitleVolumeComparer = new CitationComparer(yearTitleVolumeSortDescriptors); var xSection = GetBibliographySection(xReference); var ySection = GetBibliographySection(yReference); if (xSection == -1) { xBibliographyCitation.NoBib = true; } if (ySection == -1) { yBibliographyCitation.NoBib = true; } var sectionComparison = xSection.CompareTo(ySection); if (sectionComparison == 0) { var defaultCompareResult = defaultCitationComparer.Compare(x, y); if (defaultCompareResult != 0) { return(defaultCompareResult); } return(yearTitleVolumeComparer.Compare(x, y)); } else { return(sectionComparison); } }
public int Compare(Citation x, Citation y) { //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 || yReference == null) { return(0); } var xYearResolved = xReference.YearResolved; var yYearResolved = yReference.YearResolved; var xBibliographyEntry = x.GetTextUnits().ToString(); var yBibliographyEntry = y.GetTextUnits().ToString(); string xBibliographyEntryBeforeYear = xBibliographyEntry; string yBibliographyEntryBeforeYear = yBibliographyEntry; //Autor, Herausgeber oder Institution oder was auch immer im Template zu Beginn vor der Jahresangabe steht, aufsteigend if (!string.IsNullOrEmpty(xYearResolved)) { int xIndexOfYearResolved = xBibliographyEntry.IndexOf(xYearResolved, 0); if (xIndexOfYearResolved > 0) { xBibliographyEntryBeforeYear = xBibliographyEntry.Substring(0, xIndexOfYearResolved); } } if (!string.IsNullOrEmpty(yYearResolved)) { int yIndexOfYearResolved = yBibliographyEntry.IndexOf(yYearResolved, 0); if (yIndexOfYearResolved > 0) { yBibliographyEntryBeforeYear = yBibliographyEntry.Substring(0, yIndexOfYearResolved); } } var alphabeticalSortResult = xBibliographyEntryBeforeYear.CompareTo(yBibliographyEntryBeforeYear); if (alphabeticalSortResult != 0) { return(alphabeticalSortResult); } //Jahr ermittelt, absteigend var sortDescriptors = new List <PropertySortDescriptor <Reference> >(); sortDescriptors.Add(new PropertySortDescriptor <Reference>(ReferencePropertyDescriptor.YearResolved, ListSortDirection.Descending)); var yearComparer = new CitationComparer(sortDescriptors); var yearSortResult = yearComparer.Compare(x, y); if (yearSortResult != 0) { return(yearSortResult); } //Titel, aufsteigend sortDescriptors.Clear(); sortDescriptors.Add(new PropertySortDescriptor <Reference>(ReferencePropertyDescriptor.Title, ListSortDirection.Ascending)); var titleComparer = new CitationComparer(sortDescriptors); var titleSortResult = titleComparer.Compare(x, y); if (titleSortResult != 0) { return(titleSortResult); } //Band, absteigend sortDescriptors.Clear(); sortDescriptors.Add(new PropertySortDescriptor <Reference>(ReferencePropertyDescriptor.Volume, ListSortDirection.Descending)); var volumeComparer = new CitationComparer(sortDescriptors); var volumeSortResult = volumeComparer.Compare(x, y); if (volumeSortResult != 0) { return(volumeSortResult); } //Datum des Zugriffs, absteigend sortDescriptors.Clear(); sortDescriptors.Add(new PropertySortDescriptor <Reference>(ReferencePropertyDescriptor.AccessDate, ListSortDirection.Descending)); var accessDateComparer = new CitationComparer(sortDescriptors); var accessDateSortResult = accessDateComparer.Compare(x, y); return(accessDateSortResult); }