public IEnumerable <ITextUnit> GetTextUnits(ComponentPart componentPart, Template template, Citation citation, out bool handled) { //return handled = true if this macro generates the output (as a IEnumerable<ITextUnit>); the standard output will be suppressed //return handled = false if you want Citavi to produce the standard output; //you can still manipulate the component part and its elements before letting Citavi generate the output with handled = false handled = false; /* * AUSGABE-ZIELE * ------------------------------------------------------------------------------------------------------------------------ * [1] Aufsatz-Seiten: 123-130 Zitatseiten: - > AUSGABE: 123-130 [= nur Aufsatzseiten] * [2] Aufsatz-Seiten: 123-130 Zitatseiten: 123 > AUSGABE: 123 [= nur Zitatseiten] * [3] Aufsatz-Seiten: 123-130 Zitatseiten: 123-124 > AUSGABE: 123 f. [= nur Zitatseiten] * [4] Aufsatz-Seiten: 123-130 Zitatseiten: 123-125 > AUSGABE: 123 ff. [= nur Zitatseiten] * [5] Aufsatz-Seiten: 123-130 Zitatseiten: 125 > AUSGABE: 123 (125) [= Erste Aufsatzseite (Zitatseiten)] * [6] Aufsatz-Seiten: 123-130 Zitatseiten: 125-126 > AUSGABE: 123 (125 f.) [= Erste Aufsatzseite (Zitatseiten)] * [7] Aufsatz-Seiten: 123-130 Zitatseiten: 125-127 > AUSGABE: 123 (125 ff.) [= Erste Aufsatzseite (Zitatseiten)] */ if (componentPart == null) { return(null); } if (componentPart.Elements == null || componentPart.Elements.Count == 0) { return(null); } if (citation == null) { return(null); } if (citation.Reference == null) { return(null); } var placeholderCitation = citation as PlaceholderCitation; if (placeholderCitation == null) { return(null); } if (placeholderCitation.Entry == null) { return(null); } //[1] if (placeholderCitation.Entry.PageRange == null) { return(null); } if (string.IsNullOrEmpty(placeholderCitation.Entry.PageRange.PrettyString)) { return(null); //ElementApplyConditions sorgen dafür, dass keine leeren Klammern angezeigt werden } //enthält nur 1 PageRangeFieldElement und 1 QuotationPageRangeFieldElement und sonst lediglich LiteralElemente PageRangeFieldElement pageRangeFieldElement = null; QuotationPageRangeFieldElement quotationPageRangeFieldElement = null; if (!TryValidateComponentPartStructure(componentPart, out pageRangeFieldElement, out quotationPageRangeFieldElement)) { return(null); } if ( !citation.Reference.HasCoreField(ReferenceTypeCoreFieldId.PageRange) || citation.Reference.PageRange == null || string.IsNullOrEmpty(citation.Reference.PageRange.PrettyString) ) { //Alles unterdrücken ausser QuotationPageRangeFieldElement TransferSettings(pageRangeFieldElement, quotationPageRangeFieldElement); RemoveAllButElement(componentPart, quotationPageRangeFieldElement); RemoveParenthesesFromPrefixSuffix(quotationPageRangeFieldElement); return(null); } var startPageArticle = citation.Reference.PageRange.StartPage; var startPageQuotation = placeholderCitation.Entry.PageRange.StartPage; //[2], [3], [4] [= nur Zitatseiten] if (startPageQuotation == startPageArticle) { //Alles unterdrücken ausser QuotationPageRangeFieldElement - wichtig: Eine der beiden TransferSettings-Zeilen muss immer durch vorangestellte //-Schrägstriche auskommentiert sein! //TransferSettings(quotationPageRangeFieldElement, pageRangeFieldElement); //diese Reihenfolge verwenden, wenn die Präfixe der Zitatseiten-Komponente angezeigt werden sollen TransferSettings(pageRangeFieldElement, quotationPageRangeFieldElement); //diese Reihenfolge verwenden, wenn die Präfixe der Seitenbereichs-Komponente angezeigt werden sollen RemoveAllButElement(componentPart, quotationPageRangeFieldElement); RemoveParenthesesFromPrefixSuffix(quotationPageRangeFieldElement); return(null); } //[5], [6], [7] [= Erste Aufsatzseite (Zitatseiten)] else { pageRangeFieldElement.PageOneHasSpecialFormat = false; pageRangeFieldElement.PageTwoHasSpecialFormat = false; pageRangeFieldElement.PageMultiNumberingStyle = NumberingStyle.StartPageOnly; pageRangeFieldElement.PageMultiSuffix.Text = string.Empty; pageRangeFieldElement.ColumnOneHasSpecialFormat = false; pageRangeFieldElement.ColumnTwoHasSpecialFormat = false; pageRangeFieldElement.ColumnMultiNumberingStyle = NumberingStyle.StartPageOnly; pageRangeFieldElement.ColumnMultiSuffix.Text = string.Empty; pageRangeFieldElement.MarginOneHasSpecialFormat = false; pageRangeFieldElement.MarginTwoHasSpecialFormat = false; pageRangeFieldElement.MarginMultiNumberingStyle = NumberingStyle.StartPageOnly; pageRangeFieldElement.MarginMultiSuffix.Text = string.Empty; pageRangeFieldElement.ParagraphOneHasSpecialFormat = false; pageRangeFieldElement.ParagraphTwoHasSpecialFormat = false; pageRangeFieldElement.ParagraphMultiNumberingStyle = NumberingStyle.StartPageOnly; pageRangeFieldElement.ParagraphMultiSuffix.Text = string.Empty; pageRangeFieldElement.OtherOneHasSpecialFormat = false; pageRangeFieldElement.OtherTwoHasSpecialFormat = false; pageRangeFieldElement.OtherMultiNumberingStyle = NumberingStyle.StartPageOnly; pageRangeFieldElement.OtherMultiSuffix.Text = string.Empty; return(null); } }
bool TryValidateComponentPartStructure(ComponentPart componentPart, out PageRangeFieldElement pageRangeFieldElement, out QuotationPageRangeFieldElement quotationPageRangeFieldElement) { /* * Allowed structures: * /1/ [article pages] [quotation pages] * /2/ [article pages] [literal] [quotation pages] * /3/ [article pages] [literal] [quotation pages] [literal] */ pageRangeFieldElement = null; quotationPageRangeFieldElement = null; if (componentPart == null) { return(false); } if (componentPart.Elements == null || componentPart.Elements.Count == 0 || componentPart.Elements.Count < 2 || componentPart.Elements.Count > 4) { return(false); } IElement element01 = componentPart.Elements.ElementAtOrDefault(0); IElement element02 = componentPart.Elements.ElementAtOrDefault(1); IElement element03 = componentPart.Elements.ElementAtOrDefault(2); IElement element04 = componentPart.Elements.ElementAtOrDefault(3); #region /1/ [article pages] [quotation pages] if (element04 == null && element03 == null && element02 != null && element02 is QuotationPageRangeFieldElement && element01 != null && element01 is PageRangeFieldElement && ((PageRangeFieldElement)element01).PropertyId == ReferencePropertyId.PageRange) { pageRangeFieldElement = (PageRangeFieldElement)element01; quotationPageRangeFieldElement = (QuotationPageRangeFieldElement)element02; return(true); } #endregion #region /2/ [article pages] [literal] [quotation pages] if (element04 == null && element03 != null && element03 is QuotationPageRangeFieldElement && element02 != null && element02 is LiteralElement && element01 != null && element01 is PageRangeFieldElement && ((PageRangeFieldElement)element01).PropertyId == ReferencePropertyId.PageRange) { pageRangeFieldElement = (PageRangeFieldElement)element01; quotationPageRangeFieldElement = (QuotationPageRangeFieldElement)element03; return(true); } #endregion #region /3/ [article pages] [literal] [quotation pages] [literal] if (element04 != null && element04 is LiteralElement && element03 != null && element03 is QuotationPageRangeFieldElement && element02 != null && element02 is LiteralElement && element01 != null && element01 is PageRangeFieldElement && ((PageRangeFieldElement)element01).PropertyId == ReferencePropertyId.PageRange) { pageRangeFieldElement = (PageRangeFieldElement)element01; quotationPageRangeFieldElement = (QuotationPageRangeFieldElement)element03; return(true); } #endregion return(false); }