Exemplo n.º 1
0
        public IEnumerable <ITextUnit> 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);
            }

            Periodical periodical = citation.Reference.Periodical;

            if (periodical == null)
            {
                return(null);
            }

            PeriodicalFieldElement periodicalFieldElement = componentPart.Elements.OfType <PeriodicalFieldElement>().FirstOrDefault() as PeriodicalFieldElement;

            if (periodicalFieldElement == null)
            {
                return(null);
            }

            bool found = false;
            TextUnitCollection textUnits = periodicalFieldElement.GetTextUnits(citation, template);

            if (textUnits == null)
            {
                return(null);
            }

            foreach (ITextUnit textUnit in textUnits)
            {
                if (textUnit.Text.Contains(" "))
                {
                    found         = true;
                    textUnit.Text = textUnit.Text.Replace(" ", "\u00A0");
                }
            }

            if (found)
            {
                componentPart.Elements.ReplaceItem(periodicalFieldElement, textUnits.TextUnitsToLiteralElements(componentPart));
            }

            return(null);
        }
Exemplo n.º 2
0
        public IEnumerable <ITextUnit> GetTextUnits(ComponentPart componentPart, Template template, Citation citation, out bool handled)
        {
            handled = false;

            if (citation == null)
            {
                return(null);
            }
            if (citation.Reference == null)
            {
                return(null);
            }
            if (componentPart == null)
            {
                return(null);
            }

            #region Find journal field elements

            //we treat only journal field elemements
            PeriodicalFieldElement periodicalFieldElement = componentPart.Elements.OfType <PeriodicalFieldElement>().FirstOrDefault() as PeriodicalFieldElement;
            if (periodicalFieldElement == null)
            {
                return(null);
            }

            #endregion Find journal field elements

            #region Determine reference to look at

            Reference reference;
            if (componentPart.Scope == ComponentPartScope.ParentReference)
            {
                if (citation.Reference.ParentReference == null)
                {
                    return(null);
                }
                reference = citation.Reference.ParentReference as Reference;
            }
            else
            {
                reference = citation.Reference as Reference;
            }
            if (reference == null)
            {
                return(null);
            }

            #endregion Determine reference to look at

            var periodical = citation.Reference.Periodical;
            if (periodical == null)
            {
                return(null);
            }

            #region Determine reference language

            Language language;
            if (String.Equals(reference.LanguageCode, CultureInfo.GetCultureInfo("en").TwoLetterISOLanguageName, StringComparison.OrdinalIgnoreCase))
            {
                language = Language.English;
            }
            else if (String.Equals(reference.LanguageCode, CultureInfo.GetCultureInfo("de").TwoLetterISOLanguageName, StringComparison.OrdinalIgnoreCase))
            {
                language = Language.German;
            }
            else if (String.Equals(reference.LanguageCode, CultureInfo.GetCultureInfo("es").TwoLetterISOLanguageName, StringComparison.OrdinalIgnoreCase))
            {
                language = Language.Spanish;
            }
            else if (String.Equals(reference.LanguageCode, CultureInfo.GetCultureInfo("fr").TwoLetterISOLanguageName, StringComparison.OrdinalIgnoreCase))
            {
                language = Language.French;
            }
            else if (String.Equals(reference.LanguageCode, CultureInfo.GetCultureInfo("it").TwoLetterISOLanguageName, StringComparison.OrdinalIgnoreCase))
            {
                language = Language.Italian;
            }
            else
            {
                language = Language.Other;
            }

            #endregion Determine reference language

            //	var property = element.PropertyId;
            //	var value = (string)reference.GetValue(property);

            //	if (string.IsNullOrEmpty(value)) continue;

            switch (language)
            {
            case (Language.English):
            case Language.Spanish:
            case Language.Italian:
            {
                //add prefix
                LiteralElement newElement = new LiteralElement(componentPart, "in: ");
                componentPart.Elements.InsertIElementBefore(periodicalFieldElement, newElement);

                //add suffix
                newElement = new LiteralElement(componentPart, "");
                componentPart.Elements.InsertIElementAfter(periodicalFieldElement, newElement);
            }
            break;

            case Language.French:
            {
                //add prefix
                LiteralElement newElement = new LiteralElement(componentPart, "dans :\u00A0");
                componentPart.Elements.InsertIElementBefore(periodicalFieldElement, newElement);

                //add suffix
                newElement = new LiteralElement(componentPart, "");
                componentPart.Elements.InsertIElementAfter(periodicalFieldElement, newElement);
            }
            break;

            default:
            case (Language.German):
            {
                //add prefix
                LiteralElement newElement = new LiteralElement(componentPart, "in: ");
                componentPart.Elements.InsertIElementBefore(periodicalFieldElement, newElement);

                //add suffix
                newElement = new LiteralElement(componentPart, "");
                componentPart.Elements.InsertIElementAfter(periodicalFieldElement, newElement);
            }
            break;

            case Language.Other:
            {
                //add prefix
                LiteralElement newElement = new LiteralElement(componentPart, "in: ");
                componentPart.Elements.InsertIElementBefore(periodicalFieldElement, newElement);

                //add suffix
                newElement = new LiteralElement(componentPart, "");
                componentPart.Elements.InsertIElementAfter(periodicalFieldElement, newElement);
            }
            break;
            }

            return(null);
        }