Пример #1
0
        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));
        }
Пример #2
0
        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));
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        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);
        }