This forum is read-only - Please use our new Citavi Forum instead.
Dieses Forum dient nur zur Recherche - Bitte nutzen Sie das neue Citavi Forum für Ihre Fragen.

Bluebook of Citation

Selbstgemachte Zitationsstile anderen AnwenderInnen zur Verfügung stellen

Bluebook of Citation

Postby Peter Meurer » 2017-01-27 15:50

Wir haben den angehängten Stil im Rahmen einer Support-Anfrage erstellt, aber angesichts seines offensichtlichen Mangels nicht in Citavi veröffentlicht.

Der Mangel rührt daher, dass das Bluebook of Citation für das amerikanische Rechtssystem geschrieben wurde, Citavis Dokumententypen aber nur das deutsche Rechtssystem abbilden. Konsequenterweise finden Sie in der Stildefinition keinen Angaben zu juristischen Dokumententypen. Wenn es Ihr Ziel ist, eine Publikation für den amerikanischen Raum zu erstellen, sollten Sie diesen Stil nicht verwenden.

Der gewählte Zitationsstil erzeugt standardmässig kein Literaturverzeichnis, weil die Quellenangaben vollständig bei der ersten Nennung ausgegeben werden. Sie müssten die Eigenschaften des Stils bearbeiten, um das Literaturverzeichnis zu aktivieren. Wie das funktioniert, zeigt dieses Video: http://goo.gl/q2XWds

Bitte kopieren Sie die beigefügte Datei in das Verzeichnis Dokumente\Citavi 5\Custom Citation Styles. Im Word Add-In wählen Sie den Stil auf der Registerkarte "Citavi" aus. Klicken Sie auf den Auswahlpfeil hinter "Zitationsstil" und wählen Sie dort Ihren Stil aus.
Attachments
Blue Book of Citation.zip
(21.48 KiB) Downloaded 140 times
Peter Meurer
Citavi Customer Service
 

Re: Bluebook of Citation

Postby jay-squared » 2017-01-27 16:47

Meine persönliche Anmerkung dazu: in meiner praktischen Arbeit ist es vollkommen ausreichend, wenn man nur Gerichtsentscheidungen richtig erfassen kann. Für mich würde das Erfassen von Gerichtsentscheidungen zur Verwendung von Bluebook zwei Anforderungen haben. Erstens, die Erfassung muss sprachneutral sein, sprich, ein Fall den ich für Bluebook erfasse, muss auch verwendbar sein, wenn ich später auf OSCOLA, McGill Guide, Australian Legal Citation, etc. wechsele. Zweitens, Stil und Erfassung müssen ein paar spezielle Regeln von Bluebook einfach umsetzen. Mein Ansatz war es also, auf Grundlage der Definition von OSCOLA in Citavi zu überlegen, wie ich die notwendigen Daten für Bluebook erfasse. Mein Ergebnis war das folgende.

Ich kann relativ leicht Fälle wie

Beatty v Guggenheim Exploration Co, 225 NY 380, 122 NE 378 (1919)

(Reporter gibt Jurisdiktion an, und der Ct. App. ist das höchste Gericht in NY)

Communist Party v 522 Valencia, Inc, 35 Cal App 4th 980, 41 Cal Rptr 2d 618 (Cal 1st D 1995)

(Ct. App. ist das höchste Gericht im 1st D of Calif)

(finde jetzt gerade kein Beispiel für "Reporter verrät Jurisdiktion, Gericht ist aber nicht das höchste. Das klappt aber auch).

Parteibezeichnung, Style of Cause, kommen in die Kurzbeschreibung.
Gerichte werden nach dem Muster "Louisiana, Supreme Court (Sup. Ct.)" erfasst, also Jurisdiktion, dann Name des Gerichts. Das Gericht kriegt dann eine Abkürzung. Dann noch folgendes: wenn ein Gericht das höchste Gericht der Jurisdiktion ist, oder nur ein Gericht in dieser Jurisdiktion besteht, oder das Gericht sich aus dem Reporter ergibt, muss dieses nicht ausgedruckt werden. Eine ähnliche Regel besteht für Jurisdiktionen. Also brauchte ich eine Möglichkeit, konditional die Ausgabe von Gericht oder Jurisdiktion zu unterbinden. Das habe ich gemacht, indem im Notizfeld des Gerichts entweder court oder jurisdiction oder beides eingetragen werden kann. Das gleiche gilt für das Notizfeld des "Reporters", welchen ich über das Feld "Fundstelle" erfasse. Auch dort kann man im Notizfeld "court" oder "jurisdiction" eintragen. Die Jurisdiktion selber trage ich im Freitextfeld 4 ein, weil Citavis OSCOLA das so macht.

Die Erstellung des Nachweises ist dann mit Ausname des Style of Cause, welcher eine simple Komponente "Kurzbeschreibung" ist, eine recht komplexe programmierte Komponente. Das was jetzt kommt, ist echt was für Bastler, aber es funktioniert. Es erfasst sogar Parallelfundstellen anhand der JJ-Methode als eigene Titel, und unterscheidet, je nachdem woher das Urteil kommt - englische Entscheidungen werden anders formatiert als amerikanische. Hier die Komponente, es sind über 900 Zeilen.

Code: Select all
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Text.RegularExpressions;

using SwissAcademic.Citavi;
using SwissAcademic.Citavi.Metadata;
using SwissAcademic.Collections;
using SwissAcademic.Drawing;

namespace SwissAcademic.Citavi.Citations
{
   public class ComponentPartFilter
      :
      IComponentPartFilter
   {
      public IEnumerable<ITextUnit> GetTextUnits(ComponentPart componentPart, Template template, Citation citation, out bool handled)
      {
         handled = true;
         
         // User Options
         
         bool UseIbid = false;   // If you don't use ibid, some tests regarding the necessity to print a shorthand and cited reporter becomes easier                        
         bool NoPeriods = true;   // Set to false if you don't want the component to remove periods after abbreviations.
         
         // Static Variables and Sanity Checks
         
         if (citation == null) return null;
          if (citation.Reference == null) return null;      
         
         Reference primaryReference = citation.Reference;
         Project project = primaryReference.Project;
         
         if (string.IsNullOrEmpty(primaryReference.ShortTitle)) return null;
         if (primaryReference.AuthorsOrEditorsOrOrganizations == null) return null;
         
         PlaceholderCitation thisPlaceholderCitation = citation as PlaceholderCitation;
         
         // Dynamic Variables
         
         TextUnitCollection output = new TextUnitCollection();
         
         bool OnlyStyleOfCause = false;
         bool IsSubsequentHistory = false;
         bool NeedsJurisdiction = true;
         bool NeedsCourt = true;
         bool HasParallelButNoNeutralReporter = false;
         bool HasNeutralReporter = false;
         bool HasPinpoint = false;
         bool IsProceduralDocument = false;
         
         string courtsString = string.Empty;
         LiteralTextUnit courtLiteral = null;
         
         string dateyear = string.Empty;
         LiteralTextUnit dateyearLiteral = null;
         
         string jurisdiction = string.Empty;
         
         int j = 0;
         
         List<Reference> parallelReferencesList = new List<Reference>();
         IList<Person> courts = primaryReference.Organizations as IList<Person>;
                  

         
         // The Magic         
         
         if (thisPlaceholderCitation != null && thisPlaceholderCitation as FootnoteCitation == null && !thisPlaceholderCitation.FormatOption1) OnlyStyleOfCause = true;
         
         if (OnlyStyleOfCause)
         {
            return null;   
         }      
                  
         foreach (Person court in courts)
         {
            if (court == null) continue;
            // Sometimes, the court itself makes details on jurisdiction or court unnecessary.
            // Namely for US cases where we don't indicate the court if it is the highest court in the jurisdiction.
            // In that case, the court entry should have a court in the Notes field.
            // Some court abbreviations, like SCC or HCA also identify the jurisdiction, so the Notes field of that court should
            // include the word jurisdiction.
            if (court.Notes.Contains("jurisdiction")) NeedsJurisdiction = false;
            if (court.Notes.Contains("court")) NeedsCourt = false;
            if (!string.IsNullOrEmpty(court.Abbreviation))
            {
               if (!string.IsNullOrEmpty(courtsString)) courtsString += ", ";
               courtsString += court.Abbreviation;
            }
            else if (!string.IsNullOrEmpty(court.LastName))
            {
               if (!string.IsNullOrEmpty(courtsString)) courtsString += ", ";
               courtsString += court.LastName;
            }
         }         
         courtLiteral = new LiteralTextUnit(courtsString);
         
         // Retrieve the Jurisdiction Info
         
         jurisdiction = primaryReference.CustomField4;
         
         // Retrieve the YearDate Info
                     
         if (!string.IsNullOrEmpty(primaryReference.Date))
         {
            string dateString = primaryReference.Date;            
            DateTime dateValue;
            DateTimeInformation.TryParse(dateString, out dateValue);
            int year = dateValue.Year;      
            dateyear = dateValue.ToString("yyyy");
         }      
         dateyearLiteral = new LiteralTextUnit(dateyear);
         
         // Check if procedural document
         
         if (!string.IsNullOrEmpty(primaryReference.CustomField7)) IsProceduralDocument = true;
         
         // Check for pinpoints
         
         if (!IsSubsequentHistory && thisPlaceholderCitation != null)
         {
            if (thisPlaceholderCitation.PageRange.PrettyString != "")
            {
               HasPinpoint = true;
            }
         }
         
         foreach (Reference reference in project.References)
         {               
            if (reference.ReferenceType != ReferenceType.CourtDecision) continue;
            if (reference.Periodical == null) continue;
            if (!primaryReference.Organizations.SequenceEqual(reference.Organizations)) continue;
            if (reference != primaryReference &&
               reference.Periodical == primaryReference.Periodical && reference.Volume == primaryReference.Volume && reference.Year == primaryReference.Year && reference.PageRange == primaryReference.PageRange)
               continue;
             if (primaryReference.Date != null && reference.Date != null && primaryReference.Date != reference.Date) continue;
            if (!String.IsNullOrEmpty(primaryReference.Title) && primaryReference.Title == reference.Title) parallelReferencesList.Add(reference);
            if (String.IsNullOrEmpty(primaryReference.Title) && !String.IsNullOrEmpty(primaryReference.SpecificField2) && primaryReference.SpecificField2 == reference.SpecificField2) parallelReferencesList.Add(reference);
            if (reference.Periodical.Notes.ToStringSafe().Contains("neutral")) HasNeutralReporter = true;                           
            if (reference.Periodical.Notes.Contains("jurisdiction")) NeedsJurisdiction = false;   // Sometimes, one of the reporters makes details on jurisdiction (e.g. "O.R.")
            if (reference.Periodical.Notes.Contains("court")) NeedsCourt = false;            // or court (e.g. "S.C.R.") unnecessary.
         }

         if (!HasNeutralReporter) HasParallelButNoNeutralReporter = parallelReferencesList.Count > 1;
         
         parallelReferencesList.Sort(new PeriodicalComparer());
         
         foreach (Reference parallelReference in parallelReferencesList)
         {   
            output.AddRange(BuildCitation(
               j,
               thisPlaceholderCitation,
               primaryReference,
               parallelReference,
               IsSubsequentHistory,
               NeedsJurisdiction,
               NeedsCourt,
               HasNeutralReporter,
               IsProceduralDocument,
               HasPinpoint,
               jurisdiction,   
               courtLiteral,
               dateyearLiteral,
               out j,
               out NeedsCourt));
         }
         
         if (HasPinpoint && HasNeutralReporter && !IsProceduralDocument)
         {
            output.AddRange(PinpointBuilder(thisPlaceholderCitation));
         }
         
         output.AddRange(BuildCourtJurisdictionYearInfo(
               NeedsCourt,
               NeedsJurisdiction,
               jurisdiction,
               courtLiteral,
               dateyearLiteral));
         
         // Here ends the basic Case Reporters+Pinpoint+Court+Shortform stuff. The extended “Case Reporters+Pinpoint+Court+Shortform”
         // continues to check for procedural document status, pinpoint, and shortform+cited reporter tests
         
         if (thisPlaceholderCitation != null)
         {
            output.AddRange(BuildShortformIntro(
            thisPlaceholderCitation,
            primaryReference,
            parallelReferencesList,
            HasNeutralReporter,
            HasParallelButNoNeutralReporter,
            UseIbid));
         }               
         
         // Now we add the info about procedural document
         
         if (IsProceduralDocument)
         {
            LiteralTextUnit proceduralDocumentPrefixLiteral = new LiteralTextUnit(" ( ");
            LiteralTextUnit proceduralDocumentLiteral = new LiteralTextUnit(primaryReference.CustomField7);
            LiteralTextUnit proceduralDocumentSuffixLiteral = new LiteralTextUnit(")");            
            
            output.Add(proceduralDocumentPrefixLiteral);
            output.Add(proceduralDocumentLiteral);
            
            if (HasPinpoint) //Procedural Documents get their pinpoint afterwards
            {   
               output.AddRange(PinpointBuilder(thisPlaceholderCitation));   
            }
            output.Add(proceduralDocumentSuffixLiteral);
         }
         
         // Finalizing the output
         
         output.ElementAt(0).FontStyle = FontStyle.Neutral;
         
         if (NoPeriods)
         {
            foreach (ITextUnit textUnit in output)
            {
               var pattern1 = @"(?<=\p{Lu})\. ?(?=\p{Lu}\.)";
               textUnit.Text = Regex.Replace(textUnit.Text, pattern1, "");

               var pattern2 = @"\.";
               textUnit.Text = Regex.Replace(textUnit.Text, pattern2, "");
            }
         }
         
         return output;         
      }
      public static List<LiteralTextUnit> BuildCitation(
         int j,
         PlaceholderCitation thisPlaceholderCitation,
         Reference primaryReference,
         Reference parallelReference,
         bool IsSubsequentHistory,
         bool NeedsJurisdiction,
         bool NeedsCourt,
         bool HasNeutralReporter,         
         bool IsProceduralDocument,
         bool HasPinpoint,
         string jurisdiction,
         LiteralTextUnit courtLiteral,
         LiteralTextUnit dateyearLiteral,
         out int i,
         out bool NeedsCourtOut)
      {
         LiteralTextUnit parallelReporterSeparatorLiteral = new LiteralTextUnit(",");
         LiteralTextUnit initialReporterPrefixLiteral = new LiteralTextUnit(",");
         
         LiteralTextUnit spaceLiteral = new LiteralTextUnit(" ");
         LiteralTextUnit commaLiteral = new LiteralTextUnit(",");
         
         LiteralTextUnit prefixDateYearLiteral = new LiteralTextUnit("(");
         LiteralTextUnit suffixDateYearLiteral = new LiteralTextUnit("), ");
         
         LiteralTextUnit prefixYearLiteral = new LiteralTextUnit("[");
         LiteralTextUnit suffixYearLiteral = new LiteralTextUnit("]");
         
         LiteralTextUnit prefixVolumeLiteral = new LiteralTextUnit("");
         LiteralTextUnit suffixVolumeLiteral = new LiteralTextUnit("");
         
         LiteralTextUnit prefixNumberLiteral = new LiteralTextUnit(" ");
         LiteralTextUnit suffixNumberLiteral = new LiteralTextUnit("");
         
         LiteralTextUnit courtAndJurisdictionPrefix = new LiteralTextUnit(" (");
         LiteralTextUnit courtAndJurisdictionSuffix = new LiteralTextUnit(")");
         
         // End of Definitions for Fixed-Value Text Variables
         
         // Definitions of Variable Variables
         
         List<LiteralTextUnit> output = new List<LiteralTextUnit>();         
         
         bool hasVolume = !string.IsNullOrEmpty(parallelReference.Volume);
         bool hasYear = !string.IsNullOrEmpty(parallelReference.Year);
         bool hasNumber = !string.IsNullOrEmpty(parallelReference.Number);
         bool hasDateyear = !string.IsNullOrEmpty(parallelReference.Date);
         bool needsDateyear = false;
         bool isNeutralCitation = parallelReference.Periodical.Notes.ToStringSafe().Contains("neutral");         
                     
         var periodical = parallelReference.Periodical;
         string periodicalString = string.Empty;
         
         LiteralTextUnit pageRangeLiteral = new LiteralTextUnit(parallelReference.PageRange.ToString());
      
         if (!string.IsNullOrEmpty(periodical.StandardAbbreviation))
         {
            periodicalString += periodical.StandardAbbreviation;
         }
         else if (!string.IsNullOrEmpty(periodical.FullName))
         {
            periodicalString += periodical.FullName;
         }
         
         LiteralTextUnit periodicalLiteral = new LiteralTextUnit(periodicalString);
                           
         LiteralTextUnit yearLiteral = new LiteralTextUnit(parallelReference.Year);
         LiteralTextUnit volumeLiteral = new LiteralTextUnit(parallelReference.Volume);
         LiteralTextUnit numberLiteral = new LiteralTextUnit(parallelReference.Number);
         
         // Here we construct the year, volume and number element of the citation.
         
         // Canadian decisions should include the year of the date the decision was rendered in case this differs from the reporter year info
         
         if (!hasYear && hasDateyear && dateyearLiteral.ToString() != parallelReference.Year && (JurisdictionIsCanada(jurisdiction)))
         {
            needsDateyear = true;
         }

         if (j > 0)
         {
            output.Add(parallelReporterSeparatorLiteral);
         }
         else if ((thisPlaceholderCitation == null || !thisPlaceholderCitation.FormatOption1) && !IsSubsequentHistory && j == 0 && ((JurisdictionIsCanada(jurisdiction) && !needsDateyear) || hasYear || JurisdictionIsUSA(jurisdiction)))
         {
            output.Add(initialReporterPrefixLiteral);
         }            
         
         if (JurisdictionIsUSA(jurisdiction))
         {
            output.Add(spaceLiteral);
            output.Add(prefixVolumeLiteral);
            output.Add(volumeLiteral);
            output.Add(suffixVolumeLiteral);
         }            
         else if (isNeutralCitation && JurisdictionIsCanada(jurisdiction))
         {
            output.Add(spaceLiteral);
            output.Add(yearLiteral);
         }
         else if (j == 0 && needsDateyear && !hasVolume && hasYear && !hasNumber)
         {
            output.Add(spaceLiteral);
            output.Add(prefixDateYearLiteral);
            output.Add(dateyearLiteral);
            output.Add(suffixDateYearLiteral);
            output.Add(prefixYearLiteral);
            output.Add(yearLiteral);
            output.Add(suffixYearLiteral);
         }
         else if (!hasVolume && hasYear && !hasNumber)
         {
            output.Add(spaceLiteral);
            output.Add(prefixYearLiteral);
            output.Add(yearLiteral);
            output.Add(suffixYearLiteral);
         }
         else if (j == 0 && needsDateyear && hasYear && hasNumber)
         {
            output.Add(spaceLiteral);
            output.Add(prefixDateYearLiteral);
            output.Add(dateyearLiteral);
            output.Add(suffixDateYearLiteral);
            output.Add(prefixYearLiteral);
            output.Add(yearLiteral);
            output.Add(suffixYearLiteral);
            output.Add(prefixNumberLiteral);
            output.Add(numberLiteral);
            output.Add(suffixNumberLiteral);

         }
         else if (hasYear && hasNumber)
         {
            output.Add(spaceLiteral);
            output.Add(prefixYearLiteral);
            output.Add(yearLiteral);
            output.Add(suffixYearLiteral);
            output.Add(prefixNumberLiteral);
            output.Add(numberLiteral);
            output.Add(suffixNumberLiteral);

         }
         else if (j == 0 && hasDateyear && hasVolume)
         {
            output.Add(spaceLiteral);
            output.Add(prefixDateYearLiteral);
            output.Add(dateyearLiteral);
            output.Add(suffixDateYearLiteral);
            output.Add(prefixVolumeLiteral);
            output.Add(volumeLiteral);
            output.Add(suffixVolumeLiteral);
         }
         else if (hasVolume)
         {
            output.Add(spaceLiteral);
            output.Add(prefixVolumeLiteral);
            output.Add(volumeLiteral);
            output.Add(suffixVolumeLiteral);
         }
         
         output.Add(spaceLiteral);
         output.Add(periodicalLiteral);
         
         output.Add(spaceLiteral);
         output.Add(pageRangeLiteral);
         
         // At least for EWHC cases, the court should be indicated after the first neutral citation, not after the entire list of reporters
         
         if (isNeutralCitation && JurisdictionIsUK(jurisdiction) && NeedsCourt)
         {
            output.Add(courtAndJurisdictionPrefix);
            output.Add(courtLiteral);
            output.Add(courtAndJurisdictionSuffix);
            NeedsCourt = false;
         }
         
         // If the decision has no neutral citation, and is not a procedural document, we want to print the pinpoint right next to the actually cited reporter
         
         if (IsSubsequentHistory)
         {
            // do nothing
         }
         else if (HasPinpoint && !HasNeutralReporter && !IsProceduralDocument)
         {
            if (parallelReference == primaryReference) output.AddRange(PinpointBuilder(thisPlaceholderCitation));
         }
         
         i = j + 1 ;
         
         NeedsCourtOut = NeedsCourt;
         
         return output;
      }
      // End of Citation Builder
      public static List<LiteralTextUnit> PinpointBuilder(PlaceholderCitation thisPlaceholderCitation)
      {
         LiteralTextUnit spaceLiteral = new LiteralTextUnit(" ");
         LiteralTextUnit commaLiteral = new LiteralTextUnit(",");
         
         // Pinpoint Strings
         
         // Page
         
         string pinpointPagePrefixAfterNumberString = "";
         string pinpointPagePrefixString = " at ";
         
         // Margins
         
         string pinpointMarginPrefixAfterNumberString = "";
         string pinpointMarginSingleMarginPrefixString = " at para ";
         string pinpointMarginMultipleMarginsPrefixString = " at paras ";
         
         string pinpointMarginsOuterPrefixString = "";
         string pinpointMarginsOuterSuffixString = "";
         string pinpointMarginsInnerPrefixString = "";
         string pinpointMarginsInnerSuffixString = "";
         string pinpointMarginsRangeSeparatorString = "–";
         
         // Pinpoint Text Units
         
         // Page
         
         LiteralTextUnit pinpointPagePrefixAfterNumberLiteral = new LiteralTextUnit(pinpointPagePrefixAfterNumberString);
         LiteralTextUnit pinpointPagePrefixLiteral = new LiteralTextUnit(pinpointPagePrefixString);
         
         // Margins
         
         LiteralTextUnit pinpointMarginPrefixAfterNumberLiteral = new LiteralTextUnit(pinpointMarginPrefixAfterNumberString);
         LiteralTextUnit pinpointMarginSingleMarginPrefixLiteral = new LiteralTextUnit(pinpointMarginSingleMarginPrefixString);
         LiteralTextUnit pinpointMarginMultipleMarginsPrefixLiteral = new LiteralTextUnit(pinpointMarginMultipleMarginsPrefixString);

         LiteralTextUnit pinpointMarginsOuterPrefixLiteral = new LiteralTextUnit(pinpointMarginsOuterPrefixString);
         LiteralTextUnit pinpointMarginsOuterSuffixLiteral = new LiteralTextUnit(pinpointMarginsOuterSuffixString);
         LiteralTextUnit pinpointMarginsInnerPrefixLiteral = new LiteralTextUnit(pinpointMarginsInnerPrefixString);
         LiteralTextUnit pinpointMarginsInnerSuffixLiteral = new LiteralTextUnit(pinpointMarginsInnerSuffixString);
         
         LiteralTextUnit pinpointMarginsRangeSeparatorLiteral = new LiteralTextUnit(pinpointMarginsRangeSeparatorString);
         
         List<LiteralTextUnit> pinpointsLiteralList = new List<LiteralTextUnit>();
                  
         PageRange pageRange = thisPlaceholderCitation.PageRange;
         
         List<String> pinpointsStringList = pageRange.ToString().Split(new String[]{", ", ","}, StringSplitOptions.None).ToList();
      
         bool PinpointHasMultiplePages = false;
         List<char> pinpointCharList = pageRange.ToString().ToCharArray().ToList();
         List<char> multiplePagesSeparatorsList = new List<char>{',','-','–'};
         PinpointHasMultiplePages = pinpointCharList.Intersect(multiplePagesSeparatorsList).Any();
         
         NumberingType pinpointNumberingType = pageRange.NumberingType;
         
         string quotationPageRangeStartPageString = pageRange.StartPage.ToString();
         string quotationPageRangeEndPageString = pageRange.EndPage.ToString();
         
         String last = pinpointsStringList.Last();
         
         if (pinpointNumberingType == NumberingType.Margin && PinpointHasMultiplePages)
         {
            pinpointsLiteralList.Add(pinpointMarginMultipleMarginsPrefixLiteral);
         }
         else if (pinpointNumberingType == NumberingType.Margin)
         {
            pinpointsLiteralList.Add(pinpointMarginSingleMarginPrefixLiteral);
         }
         else if (pinpointNumberingType == NumberingType.Page && PinpointHasMultiplePages)
         {
            pinpointsLiteralList.Add(pinpointPagePrefixLiteral);
         }
         else if (pinpointNumberingType == NumberingType.Page)
         {
            pinpointsLiteralList.Add(pinpointPagePrefixLiteral);
         }
         
         if (pinpointNumberingType == NumberingType.Margin)
         {
            pinpointsLiteralList.Add(pinpointMarginsOuterPrefixLiteral);
         }
         
         int i = 1;
         
         foreach (string pinpoint in pinpointsStringList)
         {
            if (i == pinpointsStringList.Count)
            {
               pinpointsLiteralList.Add(pinpointMarginsInnerPrefixLiteral);
               pinpointsLiteralList.Add(new LiteralTextUnit(pinpoint));
               pinpointsLiteralList.Add(pinpointMarginsInnerSuffixLiteral);
            }
            else
            {
               pinpointsLiteralList.Add(pinpointMarginsInnerPrefixLiteral);
               pinpointsLiteralList.Add(new LiteralTextUnit(pinpoint));
               pinpointsLiteralList.Add(pinpointMarginsInnerSuffixLiteral);
               pinpointsLiteralList.Add(commaLiteral);
               pinpointsLiteralList.Add(spaceLiteral);
            }
            i = i +1;
         }
         
         if (pinpointNumberingType == NumberingType.Margin)
         {
            pinpointsLiteralList.Add(pinpointMarginsOuterSuffixLiteral);
         }
         
         return pinpointsLiteralList;
      }
      public static List<LiteralTextUnit> BuildCourtJurisdictionYearInfo(
         bool needsCourtBool,
         bool needsJurisdictionBool,
         string jurisdiction,
         LiteralTextUnit courtLiteral,
         LiteralTextUnit dateyearLiteral)
      {
         LiteralTextUnit spaceLiteral = new LiteralTextUnit(" ");
         LiteralTextUnit commaLiteral = new LiteralTextUnit(",");
         
         LiteralTextUnit courtAndJurisdictionPrefix = new LiteralTextUnit(" (");
         LiteralTextUnit courtAndJurisdictionSuffix = new LiteralTextUnit(")");
         
         List<LiteralTextUnit> output = new List<LiteralTextUnit>();
         
         LiteralTextUnit jurisdictionLiteral = new LiteralTextUnit(jurisdiction);
         
         if (JurisdictionIsUSA(jurisdiction) && needsCourtBool && !needsJurisdictionBool)
         {
            output.Add(courtAndJurisdictionPrefix);
            output.Add(courtLiteral);
            output.Add(spaceLiteral);
            output.Add(dateyearLiteral);
            output.Add(courtAndJurisdictionSuffix);
         }
         else if (JurisdictionIsUSA(jurisdiction) && needsJurisdictionBool && !needsCourtBool)
         {
            output.Add(courtAndJurisdictionPrefix);;
            output.Add(jurisdictionLiteral);
            output.Add(spaceLiteral);
            output.Add(dateyearLiteral);
            output.Add(courtAndJurisdictionSuffix);
         }
         else if (JurisdictionIsUSA(jurisdiction) && needsJurisdictionBool && needsCourtBool)
         {
            output.Add(courtAndJurisdictionPrefix);
            output.Add(jurisdictionLiteral);
            output.Add(spaceLiteral);
            output.Add(courtLiteral);
            output.Add(spaceLiteral);
            output.Add(dateyearLiteral);
            output.Add(courtAndJurisdictionSuffix);
         }
         else if (JurisdictionIsUSA(jurisdiction))
         {
            output.Add(courtAndJurisdictionPrefix);
            output.Add(dateyearLiteral);
            output.Add(courtAndJurisdictionSuffix);
         }
         else if (needsCourtBool && !needsJurisdictionBool)
         {
            output.Add(courtAndJurisdictionPrefix);
            output.Add(courtLiteral);
            output.Add(courtAndJurisdictionSuffix);
         }
         else if (needsJurisdictionBool && !needsCourtBool)
         {
            output.Add(courtAndJurisdictionPrefix);
            output.Add(jurisdictionLiteral);
            output.Add(courtAndJurisdictionSuffix);
         }
         else if (needsJurisdictionBool && needsCourtBool)
         {
            output.Add(courtAndJurisdictionPrefix);
            output.Add(jurisdictionLiteral);
            output.Add(spaceLiteral);
            output.Add(courtLiteral);         
            output.Add(courtAndJurisdictionSuffix);
         }
         
         return output;
      }
      public static List<LiteralTextUnit> BuildShortformIntro(
         PlaceholderCitation thisPlaceholderCitation,
         Reference primaryReference,
         List<Reference> parallelReferencesList,
         bool HasNeutralReporter,
         bool HasParallelButNoNeutralReporter,
         bool UseIbid)
      {
         if (thisPlaceholderCitation == null) return null;
         
         CitationManager citationManager = thisPlaceholderCitation.CitationManager;
         if (citationManager == null) return null;         
         
         FootnoteCitation thisFootnoteCitation = thisPlaceholderCitation as FootnoteCitation;
                  
         bool needsIntroduction = true;
         
         List<LiteralTextUnit> output = new List<LiteralTextUnit>();
         
         LiteralTextUnit spaceLiteral = new LiteralTextUnit(" ");
         spaceLiteral.FontStyle = FontStyle.Neutral;
         LiteralTextUnit commaLiteral = new LiteralTextUnit(",");         
         commaLiteral.FontStyle = FontStyle.Neutral;
         
         LiteralTextUnit shortformIntroPrefixLiteral = new LiteralTextUnit("[");
         LiteralTextUnit shortformIntroSuffixLiteral = new LiteralTextUnit("]");
         shortformIntroSuffixLiteral.FontStyle = FontStyle.Neutral;
         
         LiteralTextUnit shortTitleLiteral;
         
         if (!HasParallelButNoNeutralReporter &&
            (primaryReference.CitationKeyUpdateType == 0 || string.IsNullOrEmpty(primaryReference.CitationKey)))
         {
            needsIntroduction = false;
         }
         
         bool needsPrimaryReporter = false;
         bool needsShortformIntro = false;
         
         if (needsIntroduction)
         {                     
            foreach (FootnoteCitation precedingFootnoteCitation in citationManager.FootnoteCitations)
            {                              
               if (thisFootnoteCitation == null) break;
               
               if (precedingFootnoteCitation == null || precedingFootnoteCitation.Reference == null) continue;
               
               // Neither shortform nor cited reporter are needed if the only other match is before this citation
               
               if (precedingFootnoteCitation.FootnoteIndex <= thisFootnoteCitation.FootnoteIndex) continue;
               
               // Let's check if the preceding placeholder citation is one of the current case
               
               if (!parallelReferencesList.Contains(precedingFootnoteCitation.Reference)) continue;
               
               // First we see whether we need to indicate the cited reporter
               
               if (HasParallelButNoNeutralReporter && precedingFootnoteCitation.Entry.PageRange != null) needsPrimaryReporter = true;
               
               // Now let us see whether a short form is used somewhere
               
               if (precedingFootnoteCitation.PreviousCitation == null || precedingFootnoteCitation.PreviousCitation.Reference == null) continue;
               
               if (primaryReference.CitationKeyUpdateType == 0 || string.IsNullOrEmpty(primaryReference.CitationKey)) continue;
               
               FootnoteCitation prePrecedingFootnoteCitation = precedingFootnoteCitation.PreviousFootnoteCitation;
               
               if (prePrecedingFootnoteCitation == null) continue;
               
               if (!UseIbid)
               {
                  needsShortformIntro = true;
                  break;
               }
               else if (
                  // the otherFootnoteCitation should not be ibid, so it should meet one of the following sufficient conditions
                  // (1) it needs to be different from the citation immediately preceding it
                  precedingFootnoteCitation.Reference != prePrecedingFootnoteCitation.Reference ||
                  // (2) whatever that does
                  !precedingFootnoteCitation.IsRepeatingFootnote ||
                  // (3) it is one more than one footnote away from its predecessor
                  precedingFootnoteCitation.FootnoteIndex >= prePrecedingFootnoteCitation.FootnoteIndex + 2      
                  )
               {
                  needsShortformIntro = true;
                  break;
               }
               else
               {
                  continue;
               }      
               
            }
         }         
         
         // If it needs either shortform intro or the cited reporter info, we'll print it now.
         
         if (needsShortformIntro || needsPrimaryReporter)
         {
            output.Add(spaceLiteral);
            output.Add(shortformIntroPrefixLiteral);
         }
         
         if (needsShortformIntro)
         {

            shortTitleLiteral = new LiteralTextUnit(primaryReference.CitationKey);               
            shortTitleLiteral.FontStyle = FontStyle.Italic;
            output.Add(shortTitleLiteral);

            if (needsPrimaryReporter)
            {
               output.Add(commaLiteral);
               output.Add(spaceLiteral);
            }
         }            
         if (needsPrimaryReporter)
         {
            
            var periodical = primaryReference.Periodical;
            string periodicalString = string.Empty;         
         
            if (!string.IsNullOrEmpty(periodical.StandardAbbreviation))
            {
               periodicalString += periodical.StandardAbbreviation;
            }
            else if (!string.IsNullOrEmpty(periodical.FullName))
            {
               periodicalString += periodical.FullName;
            }
            
            string primaryReporterIntroString = "cited to";
            LiteralTextUnit primaryReporterLiteral = new LiteralTextUnit(periodicalString);
            LiteralTextUnit primaryReporterIntroLiteral = new LiteralTextUnit(primaryReporterIntroString);         
            
            output.Add(primaryReporterIntroLiteral);
            output.Add(spaceLiteral);
            output.Add(primaryReporterLiteral);                  
         }
                  
         if (needsShortformIntro || needsPrimaryReporter) output.Add(shortformIntroSuffixLiteral);
         
         return output;
      }
      //////////////////////////////////////////////////////
      //         JURISDICTION TESTS                  //
      //////////////////////////////////////////////////////
      static bool JurisdictionAustralia(string Jurisdiction)
      {
         List<string> Jurisdictions = new List<string>
         {
            "Cth.", "N.S.W.", "N.T.", "W.A.",      
         };
         return Jurisdictions.Any(Jurisdiction.Equals);
      }
      static bool JurisdictionIsCanada(string Jurisdiction)
      {
         List<string> Jurisdictions = new List<string>
         {
            "Can.", "Prov. Can.", "L.C.", "U.C.", "N.L.", "N.B.", "N.S.", "Queb.", "Ont.", "Man.", "Sask.", "Alta.", "B.C.", "Nun.", "N.W.T.", "Yuk."      
         };
         return Jurisdictions.Any(Jurisdiction.Equals);
      }
      static bool JurisdictionIsEPO(string Jurisdiction)
      {
         List<string> Jurisdictions = new List<string>
         {
            "EPO"      
         };
         return Jurisdictions.Any(Jurisdiction.Equals);
      }
      static bool JurisdictionIsEU(string Jurisdiction)
      {
         List<string> Jurisdictions = new List<string>
                  {
            "EU"         
         };
         return Jurisdictions.Any(Jurisdiction.Equals);
      }
      static bool JurisdictionIsFrance(string Jurisdiction)
      {
         List<string> Jurisdictions = new List<string>
         {
            "F"      
         };
         return Jurisdictions.Any(Jurisdiction.Equals);
      }
      static bool JurisdictionIsItaly(string Jurisdiction)
      {
         List<string> Jurisdictions = new List<string>
         {
            "I"      
         };
         return Jurisdictions.Any(Jurisdiction.Equals);
      }
      static bool JurisdictionIsGermany(string Jurisdiction)
      {
         List<string> Jurisdictions = new List<string>
         {
            "D", "BB", "BE", "BW", "BY", "HB", "HE", "HH", "MV", "NI", "NW", "RP", "SH", "SA", "SL", "ST", "TH",
         };
         return Jurisdictions.Any(Jurisdiction.Equals);
      }
      static bool JurisdictionIsNetherlands(string Jurisdiction)
      {
         List<string> Jurisdictions = new List<string>
         {
            "NL",
         };
         return Jurisdictions.Any(Jurisdiction.Equals);
      }
      static bool JurisdictionIsNewZealand(string Jurisdiction)
      {
         List<string> Jurisdictions = new List<string>
         {
            "N.Z.",      
         };
         return Jurisdictions.Any(Jurisdiction.Equals);
      }
      static bool JurisdictionIsUK(string Jurisdiction)
      {
         List<string> Jurisdictions = new List<string>
         {
            "UK", "GB", "Engl. and W.", "North. I.", "Scot."      
         };   
         return Jurisdictions.Any(Jurisdiction.Equals);
      }
      static bool JurisdictionIsUSA(string Jurisdiction)
      {
         List<string> Jurisdictions = new List<string>
         {
            "USA",
            
            "1st Cir.", "2nd Cir.", "3d Cir.", "4th Cir.", "5th Cir.", "6th Cir.", "7th Cir.", "8th Cir.", "9th Cir.", "10th Cir.", "11th Cir.", "Fed. Cir.", "D.C. Cir.",
            
            "N.D. Ala.", "M.D. Ala.", "S.D. Ala.", "D. Alaska", "D. Ariz.", "E.D. Ark.", "W.D. Ark.", "C.D. Cal.", "E.D. Cal.", "N.D. Cal.", "S.D. Cal.",
            "D. Col.", "D. Conn.", "D. Del.", "D.D.C.", "N.D. Fla.", "M.D. Fla.", "S.D. Fla.", "N.D. Ga.", "M.D. Ga.", "S.D. Ga.", "D. Guam", "D. Haw.",
            "D. Idaho", "N.D. Ill.", "C.D. Ill.", "S.D. Ill.", "N.D. Ind.", "S.D. Ind.", "N.D. Iowa", "S.D. Iowa", "D. Kan.", "E.D. Ky.", "W.D. Ky.",
            "E.D. La.", "M.D. La.", "W.D. La.", "D. Me.", "D. Md.", "D. Mass.", "E.D. Mich.", "W.D. Mich.", "D. Minn.", "N.D. Miss.", "S.D. Miss.",
            "E.D. Mo.", "W.D. Mo.", "D. Mont.", "D. Neb.", "D. Nev.", "D.N.H.", "D.N.J.", "D.N.M.", "E.D.N.Y", "N.D.N.Y", "S.D.N.Y.", "W.D.N.Y",
            "E.D.N.C.", "M.D.N.C.", "W.D.N.C.", "D.N.D.", "D.N. Mar. I.", "N.D. Ohio", "S.D. Ohio", "E.D. Okla.", "N.D. Okla.", "W.D. Okla.",
            "D. Ore.", "E.D. Pa.", "M.D. Pa.", "W.D. Pa.", "D.P.R.", "D.R.I.", "D.S.C.", "D.S.D.", "E.D. Tenn.", "M.D. Tenn.", "W.D. Tenn.", "E.D. Tex.",
            "N.D. Tex.", "S.D. Tex.", "W.D. Tex.", "D. Utah", "D. Vt.", "D.V.I.", "E.D. Va.", "W.D. Va.", "E.D. Wash.", "W.D. Wash.", "N.D. W. Va.",
            "S.D. W. Va.", "E.D. Wis.", "W.D. Wis.", "D. Wyo.",
            
            "Ala.", "Alaska", "Ariz.", "Ark.", "Cal.", "Col.", "Conn.", "Del.", "Fla.", "Ga.", "Guam", "Haw.", "Idaho", "Ill.", "Ind.", "Iowa",
            "Kan.", "Ky.", "La.", "Me.", "Md.", "Mass.", "Mich.", "Minn.", "Miss.", "Mo.", "Mont.", "Neb.", "Nev.", "N.H.", "N.J.", "N.M.", "N.Y.",
            "N.C.", "N.D.", "Mar. I.", "Ohio", "Okla.", "Ore.", "Pa.", "Pa.", "Pa.", "P.R.", "R.I.", "S.C.", "S.D.", "Tenn.", "Tex.", "Utah",
            "Vt.", "V.I.", "Va.", "Wash.", "W. Va.", "Wis.", "Wyo."
         };
         return Jurisdictions.Any(Jurisdiction.Contains);
      }
      static bool JurisdictionIsSouthAfrica(string Jurisdiction)
      {
         List<string> Jurisdictions = new List<string>
         {
            "Z.A."         
         };
         return Jurisdictions.Any(Jurisdiction.Equals);
      }
      //////////////////////////////////////////////////////
      //                  END OF JURISDICTION TESTS    //
      //////////////////////////////////////////////////////
   }
   class PeriodicalComparer : IComparer<SwissAcademic.Citavi.Reference>
   {
      public int Compare(SwissAcademic.Citavi.Reference xReference, SwissAcademic.Citavi.Reference yReference)
      {   
         var xPeriodicalRanking = GetPeriodicalRanking(xReference);
         var yPeriodicalRanking = GetPeriodicalRanking(yReference);
         return xPeriodicalRanking.CompareTo(yPeriodicalRanking);
      }
      private string GetPeriodicalRanking(SwissAcademic.Citavi.Reference reference)
      {
         string periodicalString = string.Empty;
         if (!string.IsNullOrEmpty(reference.Periodical.StandardAbbreviation))
         {
            periodicalString += reference.Periodical.StandardAbbreviation;
         }
         else if (!string.IsNullOrEmpty(reference.Periodical.FullName))
         {
            periodicalString += reference.Periodical.FullName;
         }                           
         
         if (string.IsNullOrEmpty(periodicalString)) return "zz";

         else if (reference.Periodical.Notes.ToStringSafe().Contains("neutral")) return "aa";
         
         // Here we leave room for customizations in case a publisher wants you to cite one reporter over another
         
         else if (reference.Periodical.Notes.ToStringSafe().Contains("official")) return "na";
         else if (periodicalString.Contains("W.L.R.")) return "ob"; // WLR should always come after the more specialized ICLR reports
         else if (reference.Periodical.Notes.ToStringSafe().Contains("semi")) return "oa";
         else if (reference.Periodical.Notes.ToStringSafe().Contains("nominate")) return "pa";
         else if (reference.Periodical.Notes.ToStringSafe().Contains("national")) return "qa";
         else if (reference.Periodical.Notes.ToStringSafe().Contains("regional")) return "ra";
         else if (reference.Periodical.Notes.ToStringSafe().Contains("local")) return "sa";
         else if (reference.Periodical.Notes.ToStringSafe().Contains("topical")) return "ta";
         else if (reference.Periodical.Notes.ToStringSafe().Contains("electronic")) return "ua";
         
         else return "zz";      
      }
   }
}


Wie man sehen kann, erkennt die Komponente dann eine Jurisdiktion als amerikanisch, wenn im Titel einer der folgenden Strings im Freitextfeld 4 steht.

Code: Select all
"USA",
            
            "1st Cir.", "2nd Cir.", "3d Cir.", "4th Cir.", "5th Cir.", "6th Cir.", "7th Cir.", "8th Cir.", "9th Cir.", "10th Cir.", "11th Cir.", "Fed. Cir.", "D.C. Cir.",
            
            "N.D. Ala.", "M.D. Ala.", "S.D. Ala.", "D. Alaska", "D. Ariz.", "E.D. Ark.", "W.D. Ark.", "C.D. Cal.", "E.D. Cal.", "N.D. Cal.", "S.D. Cal.",
            "D. Col.", "D. Conn.", "D. Del.", "D.D.C.", "N.D. Fla.", "M.D. Fla.", "S.D. Fla.", "N.D. Ga.", "M.D. Ga.", "S.D. Ga.", "D. Guam", "D. Haw.",
            "D. Idaho", "N.D. Ill.", "C.D. Ill.", "S.D. Ill.", "N.D. Ind.", "S.D. Ind.", "N.D. Iowa", "S.D. Iowa", "D. Kan.", "E.D. Ky.", "W.D. Ky.",
            "E.D. La.", "M.D. La.", "W.D. La.", "D. Me.", "D. Md.", "D. Mass.", "E.D. Mich.", "W.D. Mich.", "D. Minn.", "N.D. Miss.", "S.D. Miss.",
            "E.D. Mo.", "W.D. Mo.", "D. Mont.", "D. Neb.", "D. Nev.", "D.N.H.", "D.N.J.", "D.N.M.", "E.D.N.Y", "N.D.N.Y", "S.D.N.Y.", "W.D.N.Y",
            "E.D.N.C.", "M.D.N.C.", "W.D.N.C.", "D.N.D.", "D.N. Mar. I.", "N.D. Ohio", "S.D. Ohio", "E.D. Okla.", "N.D. Okla.", "W.D. Okla.",
            "D. Ore.", "E.D. Pa.", "M.D. Pa.", "W.D. Pa.", "D.P.R.", "D.R.I.", "D.S.C.", "D.S.D.", "E.D. Tenn.", "M.D. Tenn.", "W.D. Tenn.", "E.D. Tex.",
            "N.D. Tex.", "S.D. Tex.", "W.D. Tex.", "D. Utah", "D. Vt.", "D.V.I.", "E.D. Va.", "W.D. Va.", "E.D. Wash.", "W.D. Wash.", "N.D. W. Va.",
            "S.D. W. Va.", "E.D. Wis.", "W.D. Wis.", "D. Wyo.",
            
            "Ala.", "Alaska", "Ariz.", "Ark.", "Cal.", "Col.", "Conn.", "Del.", "Fla.", "Ga.", "Guam", "Haw.", "Idaho", "Ill.", "Ind.", "Iowa",
            "Kan.", "Ky.", "La.", "Me.", "Md.", "Mass.", "Mich.", "Minn.", "Miss.", "Mo.", "Mont.", "Neb.", "Nev.", "N.H.", "N.J.", "N.M.", "N.Y.",
            "N.C.", "N.D.", "Mar. I.", "Ohio", "Okla.", "Ore.", "Pa.", "Pa.", "Pa.", "P.R.", "R.I.", "S.C.", "S.D.", "Tenn.", "Tex.", "Utah",
            "Vt.", "V.I.", "Va.", "Wash.", "W. Va.", "Wis.", "Wyo."
jay-squared
Citavi Expert
 


Return to Zitationsstile tauschen