File: Model\TranslatableXmlDocument.cs
Web Access
Project: src\src\Microsoft.DotNet.XliffTasks\Microsoft.DotNet.XliffTasks.csproj (Microsoft.DotNet.XliffTasks)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.IO;
using System.Xml;
using System.Xml.Linq;
 
namespace XliffTasks.Model
{
    /// <summary>
    /// A <see cref="TranslatableDocument"/> backed by an XML-based format
    /// </summary>
    internal abstract class TranslatableXmlDocument : TranslatableDocument
    {
        protected XDocument Document { get; private set; }
 
        protected override void LoadCore(TextReader reader)
        {
            Document = XDocument.Load(reader);
        }
 
        protected override void SaveCore(TextWriter writer)
        {
            Document.SaveCustom(writer);
        }
 
        protected sealed class TranslatableXmlElement : TranslatableNode
        {
            private readonly XElement _element;
 
            public TranslatableXmlElement(string id, string source, string note, XElement element)
               : base(id, source, note)
            {
                _element = element;
            }
 
            public override void Translate(string translation)
            {
                _element.Value = translation;
            }
        }
 
        protected sealed class TranslatableXmlAttribute : TranslatableNode
        {
            private readonly XAttribute _attribute;
 
            public TranslatableXmlAttribute(string id, string source, string note, XAttribute attribute)
               : base(id, source, note)
            {
                _attribute = attribute;
            }
 
            public override void Translate(string translation)
            {
                _attribute.Value = translation;
            }
        }
    }
}