using System; using System.Linq; using System.Collections.Generic; using SwissAcademic.Citavi; using SwissAcademic.Citavi.Metadata; using SwissAcademic.Collections; using SwissAcademic.Drawing; namespace SwissAcademic.Citavi.Citations { public class ComponentPartFilter : IComponentPartFilter { public IEnumerable GetTextUnits(ComponentPart componentPart, Template template, Citation citation, out bool handled) { handled = false; if (componentPart == null) return null; if (citation == null || citation.Reference == null) return null; var dateString = citation.Reference.Date; if (string.IsNullOrWhiteSpace(dateString)) return null; var dateFieldElement = componentPart.GetFieldElements().FirstOrDefault(item => item.PropertyId == ReferencePropertyId.Date); if (dateFieldElement == null) return null; var output = new TextUnitCollection(); DateTime dateValue; if (!DateTime.TryParse(dateString, out dateValue)) return null; var day = dateValue.Day; //int var month = dateValue.Month; //ditto var year = dateValue.Year; //ditto var monthStringShort = dateValue.ToString("MMM"); var monthStringLong = dateValue.ToString("MMMM"); var monthString = monthStringShort == monthStringLong ? monthStringShort : monthStringShort + "."; var dayString = day.ToString("D2"); //2-digit day, padded with leading 0 if necessary, so 08 instead of 8 var yearString = dateValue.ToString("yyyy"); //4-digit year var newDatePattern = "{0}. {1} {2}"; dateString = string.Format(newDatePattern, dayString, monthString, yearString); var dateStringTextUnit = new LiteralTextUnit(dateString); output.Add(dateStringTextUnit); handled = true; return output; } } }