File: Model\TranslatableXmlDocument.cs
Web Access
Project: 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;
        }
    }
}