Пример #1
0
        public static AttributeList FromXliffMetadata(MetadataContainer metadata)
        {
            if (metadata != null && metadata.HasGroups)
            {
                MetaGroup defaultGroup = null;
                foreach (var group in metadata.Groups)
                {
                    if (group.Id == "XliffLib")
                    {
                        defaultGroup = group;
                        break;
                    }
                }
                if (defaultGroup != null)
                {
                    var attributes = new AttributeList();
                    foreach (Meta item in defaultGroup.Containers.OfType <Meta>())
                    {
                        attributes.Add(item.Type, item.NonTranslatableText);
                    }
                    return(attributes);
                }
            }

            return(null);
        }
        public void MetadataDefaultValue_MetaGroup()
        {
            MetaGroup group;

            group = new MetaGroup();
            Assert.IsNull(group.AppliesTo, "AppliesTo is incorrect.");
            Assert.IsNull(group.Category, "Category is incorrect.");
            Assert.AreEqual(0, group.Containers.Count, "Containers count is incorrect.");
            Assert.IsNull(group.Id, "Id is incorrect.");
        }
Пример #3
0
        public XliffDocument ExecuteMerge(XliffDocument document)
        {
            var groups = document.CollapseChildren <Group>().Where(g => g.Id.StartsWith("u") && g.Id.Split('-').Length == 2);

            foreach (var group in groups)
            {
                var unitId  = group.Id.Replace("-g", "");
                var newUnit = new Unit(unitId);
                newUnit.Name = group.Name;

                if (group.Metadata != null)
                {
                    var newMetadataContainer = new MetadataContainer();
                    foreach (var metaGroup in group.Metadata.Groups)
                    {
                        var newMetaGroup = new MetaGroup();
                        newMetaGroup.Id = metaGroup.Id;

                        foreach (Meta item in metaGroup.Containers)
                        {
                            var newElement = new Meta(item.Type, item.NonTranslatableText);
                            newMetaGroup.Containers.Add(newElement);
                        }

                        newMetadataContainer.Groups.Add(newMetaGroup);
                    }
                    newUnit.Metadata = newMetadataContainer;
                }

                var newSegment = new Segment();

                newSegment.Source = SetSourceValue(group);
                newSegment.Target = SetTargetValue(group);
                newUnit.Resources.Add(newSegment);

                var parentFile = group.Parent as File;
                if (parentFile != null)
                {
                    parentFile.Containers.Add(newUnit);
                    parentFile.Containers.Remove(group);
                }
                else
                {
                    var parentGroup = group.Parent as Group;
                    if (parentGroup != null)
                    {
                        parentGroup.Containers.Add(newUnit);
                        parentGroup.Containers.Remove(group);
                    }
                }
            }
            return(document);
        }
Пример #4
0
        public MetadataContainer ToXliffMetadata()
        {
            var metadata = new MetadataContainer();

            var defaultGroup = new MetaGroup()
            {
                Id = "XliffLib"
            };

            foreach (var attribute in this)
            {
                var metadataItem = new Meta(attribute.Key, attribute.Value);
                defaultGroup.Containers.Add((metadataItem));
            }

            metadata.Groups.Add(defaultGroup);
            return(metadata);
        }
Пример #5
0
 public void MetaGroup(XlfEventArgs args)
 {
     if (args.IsEndElement)
     {
         stack.Pop();
     }
     else
     {
         object parent = stack.Peek();
         switch (parent)
         {
         case Metadata m:
             MetaGroup mg = mapper.Map <MetaGroup>(args);
             m.Groups.Add(mg);
             stack.Push(mg);
             break;
         }
     }
 }
Пример #6
0
        /// <summary>
        /// Demonstrates how to store metadata in a <see cref="File"/> element.
        /// </summary>
        public static void StoreMetadata()
        {
            File      file;
            Meta      meta;
            MetaGroup metaGroup;

            file = new File("id");

            file.Metadata = new MetadataContainer();

            metaGroup           = new MetaGroup();
            metaGroup.AppliesTo = MetaGroupSubject.Source;
            metaGroup.Category  = "document_state";
            metaGroup.Id        = "g1";
            file.Metadata.Groups.Add(metaGroup);

            meta      = new Meta("draft");
            meta.Type = "phase";
            metaGroup.Containers.Add(meta);
        }
Пример #7
0
        public void XliffWriter_Metadata()
        {
            MetaGroup group;
            Unit      unit;
            string    actualValue;

            group           = new MetaGroup();
            group.AppliesTo = MetaGroupSubject.Source;
            group.Category  = "category";
            group.Containers.Add(new Meta("type", "text"));

            unit          = new Unit("u1");
            unit.Metadata = new MetadataContainer();
            unit.Metadata.Groups.Add(group);
            this._document.Files.Add(new File("f1"));
            this._document.Files[0].Containers.Add(unit);

            actualValue = this.Serialize();
            Assert.AreEqual(TestUtilities.GetFileContents(TestData.UnitWithMetadata), actualValue);
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue,
                                        JsonSerializer serializer)
        {
            var jobject = JObject.Load(reader);

            object resolvedType = null;

            var h = jobject["meta"];


            if (h != null)
            {
                resolvedType = new MetaGroup();
            }
            else
            {
                resolvedType = new Metaitem();
            }


            serializer.Populate(jobject.CreateReader(), resolvedType);

            return(resolvedType);
        }
Пример #9
0
 public void TestInitialize()
 {
     this._element  = new MetaGroup();
     this._provider = this._element;
 }
Пример #10
0
        private TranslationContainer SplitUnit(Unit unit, string text, bool isCData = true)
        {
            string[] paragraphs;
            if (isCData)
            {
                paragraphs = text.SplitByDefaultTags();
            }
            else
            {
                paragraphs = text.SplitPlainText();
            }
            if (paragraphs.Count() == 0)
            {
                return(unit);
            }
            else if (!isCData && paragraphs.Count() == 1)
            {
                return(unit);
            }
            else
            {
                var newGroup = new Group(unit.Id + "-g");
                newGroup.Name = unit.Name;
                if (unit.Metadata != null)
                {
                    var newMetadataContainer = new MetadataContainer();
                    foreach (var metaGroup in unit.Metadata.Groups)
                    {
                        var newMetaGroup = new MetaGroup();
                        newMetaGroup.Id = metaGroup.Id;

                        foreach (Meta item in metaGroup.Containers)
                        {
                            var newElement = new Meta(item.Type, item.NonTranslatableText);
                            newMetaGroup.Containers.Add(newElement);
                        }
                        newMetadataContainer.Groups.Add(newMetaGroup);
                    }
                    newGroup.Metadata = newMetadataContainer;
                }

                var i = 0;
                foreach (var para in paragraphs)
                {
                    i++;
                    var paraUnit = new Unit(unit.Id + "-" + i);

                    var newSegment = new Segment();

                    var source = new Source();
                    ResourceStringContent content;
                    if (isCData)
                    {
                        string containingTag = para.GetContainingTag();
                        string newContent    = para.RemoveContainingTag();
                        paraUnit.Name = containingTag;
                        if (newContent.IsHtml())
                        {
                            content = new CDataTag(newContent);
                        }
                        else
                        {
                            content = new PlainText(newContent);
                        }
                    }
                    else
                    {
                        content = new PlainText(para);
                    }
                    source.Text.Add(content);
                    newSegment.Source = source;

                    paraUnit.Resources.Add(newSegment);

                    newGroup.Containers.Add(paraUnit);
                }

                var parentFile = unit.Parent as File;
                if (parentFile != null)
                {
                    var index = parentFile.Containers.IndexOf(unit);
                    parentFile.Containers[index] = newGroup;
                }
                else
                {
                    var parentGroup = unit.Parent as Group;
                    if (parentGroup != null)
                    {
                        var index = parentGroup.Containers.IndexOf(unit);
                        parentGroup.Containers[index] = newGroup;
                    }
                }
                return(newGroup);
            }
        }
Пример #11
0
        public XliffDocument ExecuteExtraction(XliffDocument document)
        {
            var units = document.CollapseChildren <Unit>();

            foreach (var unit in units)
            {
                var originalData = new OriginalData();
                var subflows     = new Dictionary <string, string>();
                foreach (var resource in unit.Resources)
                {
                    var segment = resource as Segment;
                    if (segment != null)
                    {
                        var cdata = segment.Source.Text[0] as CDataTag;
                        if (cdata == null)
                        {
                            continue;
                        }
                        var html = cdata.Text;
                        var inlineCodeExtraction = html.ConvertHtmlTagsInInLineCodes(unit.Id + "-");
                        foreach (var data in inlineCodeExtraction.OriginalData)
                        {
                            originalData.AddData(data.Value, data.Key);
                        }
                        segment.Source.Text.Clear();
                        segment.Source.Text.AddAll(inlineCodeExtraction.Text);
                        if (inlineCodeExtraction.SubFlow.Count > 0)
                        {
                            subflows = inlineCodeExtraction.SubFlow;
                        }
                    }
                }
                if (originalData.HasData)
                {
                    unit.OriginalData = originalData;
                }
                if (subflows.Count > 0)
                {
                    var newGroup = new Group(unit.Id + "-g");
                    newGroup.Type = unit.Type;
                    newGroup.Name = unit.Name;
                    unit.Type     = null;

                    if (unit.Metadata != null)
                    {
                        var newMetadataContainer = new MetadataContainer();
                        foreach (var metaGroup in unit.Metadata.Groups)
                        {
                            var newMetaGroup = new MetaGroup();
                            newMetaGroup.Id = metaGroup.Id;

                            foreach (Meta item in metaGroup.Containers)
                            {
                                var newElement = new Meta(item.Type, item.NonTranslatableText);
                                newMetaGroup.Containers.Add(newElement);
                            }
                            newMetadataContainer.Groups.Add(newMetaGroup);
                        }
                        newGroup.Metadata = newMetadataContainer;
                        unit.Metadata     = null;
                    }


                    foreach (var subflowItem in subflows)
                    {
                        var subFlowUnit = new Unit(subflowItem.Key);
                        var newSegment  = new Segment();
                        var source      = new Source();
                        var content     = new PlainText(subflowItem.Value);
                        source.Text.Add(content);
                        newSegment.Source = source;
                        subFlowUnit.Resources.Add(newSegment);
                        newGroup.Containers.Add(subFlowUnit);
                    }

                    var parentFile = unit.Parent as File;
                    if (parentFile != null)
                    {
                        var index = parentFile.Containers.IndexOf(unit);
                        parentFile.Containers[index] = newGroup;
                    }
                    else
                    {
                        var parentGroup = unit.Parent as Group;
                        if (parentGroup != null)
                        {
                            var index = parentGroup.Containers.IndexOf(unit);
                            parentGroup.Containers[index] = newGroup;
                        }
                    }
                    newGroup.Containers.Add(unit);
                }
            }
            return(document);
        }
 public void TestInitialize()
 {
     this._element = new MetaGroup();
     this._provider = this._element;
 }
Пример #13
0
 bool IEveRepository.TryGetMetaGroupById(MetaGroupId id, out MetaGroup value)
 {
     throw new NotImplementedException();
 }
Пример #14
0
        private TranslationContainer SplitUnit(Unit unit, string text, bool isCData = true)
        {
            SimplifiedHtmlContentItem[] paragraphs;
            if (isCData)
            {
                paragraphs = _htmlParser.SplitHtml(text);
            }
            else
            {
                paragraphs = _htmlParser.SplitPlainText(text);
            }

            if (paragraphs.Count() == 0)
            {
                return(unit);
            }
            else if (!isCData && paragraphs.Count() == 1)
            {
                return(unit);
            }
            else
            {
                var newGroup = new Group(unit.Id + "-g");
                newGroup.Type = unit.Type;
                newGroup.Name = unit.Name;
                if (unit.Metadata != null)
                {
                    var newMetadataContainer = new MetadataContainer();
                    foreach (var metaGroup in unit.Metadata.Groups)
                    {
                        var newMetaGroup = new MetaGroup();
                        newMetaGroup.Id = metaGroup.Id;

                        foreach (Meta item in metaGroup.Containers)
                        {
                            var newElement = new Meta(item.Type, item.NonTranslatableText);
                            newMetaGroup.Containers.Add(newElement);
                        }
                        newMetadataContainer.Groups.Add(newMetaGroup);
                    }
                    newGroup.Metadata = newMetadataContainer;
                }

                var i = 0;
                foreach (var para in paragraphs)
                {
                    i++;
                    var paraUnit = new Unit(unit.Id + "-" + i);

                    var newSegment = new Segment();

                    if (para.Attributes.Count() > 0)
                    {
                        var newMetadataContainer = new MetadataContainer();
                        var attributeMetaGroup   = new MetaGroup();
                        attributeMetaGroup.Id = ORIGINALATTRIBUTES;

                        foreach (var attribute in para.Attributes)
                        {
                            var newElement = new Meta(attribute.Key, attribute.Value);
                            attributeMetaGroup.Containers.Add(newElement);
                        }
                        newMetadataContainer.Groups.Add(attributeMetaGroup);
                        paraUnit.Metadata = newMetadataContainer;
                    }

                    var source = new Source();
                    ResourceStringContent content;
                    if (isCData)
                    {
                        string containingTag = para.Name;
                        string newContent    = para.InnerContent();
                        if (!string.IsNullOrWhiteSpace(containingTag))
                        {
                            paraUnit.Type = _htmlParser.ToXliffHtmlType(containingTag);
                        }
                        if (newContent.IsHtml())
                        {
                            content = new CDataTag(newContent);
                        }
                        else
                        {
                            content = new PlainText(newContent);
                        }
                    }
                    else
                    {
                        content = new PlainText(para.Content);
                    }
                    source.Text.Add(content);
                    newSegment.Source = source;

                    paraUnit.Resources.Add(newSegment);

                    newGroup.Containers.Add(paraUnit);
                }

                var parentFile = unit.Parent as File;
                if (parentFile != null)
                {
                    var index = parentFile.Containers.IndexOf(unit);
                    parentFile.Containers[index] = newGroup;
                }
                else
                {
                    var parentGroup = unit.Parent as Group;
                    if (parentGroup != null)
                    {
                        var index = parentGroup.Containers.IndexOf(unit);
                        parentGroup.Containers[index] = newGroup;
                    }
                }
                return(newGroup);
            }
        }
Пример #15
0
        public XliffDocument ExecuteExtraction(XliffDocument document)
        {
            var units = document.CollapseChildren <Unit>();

            foreach (var unit in units)
            {
                foreach (var resource in unit.Resources)
                {
                    var segment = resource as Segment;
                    if (segment != null)
                    {
                        var cdata = segment.Source.Text[0] as CDataTag;
                        if (cdata == null)
                        {
                            continue;
                        }
                        var html       = cdata.Text;
                        var paragraphs = html.SplitByParagraphs();
                        if (paragraphs.Count() > 1)
                        {
                            //TODO: Copy name and other attributes
                            var newGroup = new Group(unit.Id + "-g");
                            newGroup.Name = unit.Name;
                            if (unit.Metadata != null)
                            {
                                var newMetadataContainer = new MetadataContainer();
                                foreach (var metaGroup in unit.Metadata.Groups)
                                {
                                    var newMetaGroup = new MetaGroup();
                                    newMetaGroup.Id = metaGroup.Id;

                                    foreach (Meta item in metaGroup.Containers)
                                    {
                                        var newElement = new Meta(item.Type, item.NonTranslatableText);
                                        newMetaGroup.Containers.Add(newElement);
                                    }

                                    newMetadataContainer.Groups.Add(newMetaGroup);
                                }

                                newGroup.Metadata = newMetadataContainer;
                            }

                            var i = 0;
                            foreach (var para in paragraphs)
                            {
                                i++;
                                var paraUnit = new Unit(unit.Id + "-" + i);

                                var newSegment = new Segment();

                                var source = new Source();
                                source.Text.Add(new CDataTag(para));
                                newSegment.Source = source;

                                paraUnit.Resources.Add(newSegment);

                                newGroup.Containers.Add(paraUnit);
                            }

                            var parentFile = unit.Parent as File;
                            if (parentFile != null)
                            {
                                parentFile.Containers.Add(newGroup);
                                parentFile.Containers.Remove(unit);
                            }
                            else
                            {
                                var parentGroup = unit.Parent as Group;
                                if (parentGroup != null)
                                {
                                    parentGroup.Containers.Add(newGroup);
                                    parentGroup.Containers.Remove(unit);
                                }
                            }
                        }
                    }
                }
            }

            return(document);
        }
Пример #16
0
        public XliffDocument ExecuteMerge(XliffDocument document)
        {
            var units = document.CollapseChildren <Unit>();

            foreach (var unit in units)
            {
                if (unit.Resources.Count > 1)
                {
                    throw new InvalidOperationException("At this stage I expect only one segment. This unit is invalid: " + unit.SelectorPath);
                }

                Segment segment = unit.Resources[0] as Segment;

                if (segment != null)
                {
                    var hasSubFlow = segment.Source.Text.HasSubFlow() || segment.Target.Text.HasSubFlow();

                    ConvertToHtmlAndStore(segment.Source, subflows => SearchSubflowsInDocument(subflows, units, s => s.Source));
                    ConvertToHtmlAndStore(segment.Target, subflows => SearchSubflowsInDocument(subflows, units, s => s.Target));


                    if (hasSubFlow)
                    {
                        var group   = unit.Parent as Group;
                        var newUnit = new Unit(unit.Id);
                        newUnit.Name = group.Name;
                        newUnit.Type = group.Type;

                        if (group.Metadata != null)
                        {
                            var newMetadataContainer = new MetadataContainer();
                            foreach (var metaGroup in group.Metadata.Groups)
                            {
                                var newMetaGroup = new MetaGroup();
                                newMetaGroup.Id = metaGroup.Id;

                                foreach (Meta item in metaGroup.Containers)
                                {
                                    var newElement = new Meta(item.Type, item.NonTranslatableText);
                                    newMetaGroup.Containers.Add(newElement);
                                }

                                newMetadataContainer.Groups.Add(newMetaGroup);
                            }
                            newUnit.Metadata = newMetadataContainer;
                        }

                        var newSegment = unit.Resources[0];
                        unit.Resources.Clear();
                        newUnit.Resources.Add(newSegment);

                        var parentFile = group.Parent as File;
                        if (parentFile != null)
                        {
                            var pos = parentFile.Containers.IndexOf(group);
                            parentFile.Containers.Insert(pos, newUnit);
                            parentFile.Containers.Remove(group);
                        }
                        else
                        {
                            var parentGroup = group.Parent as Group;
                            if (parentGroup != null)
                            {
                                var pos = parentGroup.Containers.IndexOf(group);
                                parentGroup.Containers.Insert(pos, newUnit);
                                parentGroup.Containers.Remove(group);
                            }
                        }
                    }
                }
            }
            return(document);
        }
Пример #17
0
        public void RoundtripExample3()
        {
            var unit1 = new Unit("1");
            var unit2 = new Unit("2");

            var segment1 = new Segment(
                new TextElement("Quetzal"),
                new TextElement("Quetzal"));

            var segment2 = new Segment(
                new TextElement("An application to manipulate and process XLIFF documents"),
                new TextElement("XLIFF 文書を編集、または処理 するアプリケーションです。"));

            var grp = new MetaGroup();

            unit1.Subunits.Add(segment1);
            unit2.Subunits.Add(segment2);

            var md = new Metadata();

            md.Id = "md14";

            unit1.Metadata = md;

            var breakfast = new Metaitem("breakfast", "eggs");
            var phase     = new Metaitem("phase", "draft");
            var version   = new Metaitem("version", "3");

            var grp2 = new MetaGroup();

            grp2.Meta.Add(breakfast);

            var grp1 = new MetaGroup();

            grp1.Meta.Add(version);
            grp1.Meta.Add(phase);
            grp1.Meta.Add(grp2);

            md.Groups.Add(grp1);


            var model = new JliffDocument("en-US", "ja-JP");

            model.Files.Add(new Localization.Jliff.Graph.File("f1"));
            var test  = new Metaitem("key", "value");
            var test1 = new MetaGroup();

            test1.Meta.Add(test);
            var list = new List <MetaGroup>();

            list.Add(test1);
            model.Files[0].Metadata = list;
            model.Files[0].Skeleton = new Skeleton("Graphic Example.psd.skl");
            model.Files[0].Subfiles = new List <ISubfile>
            {
                unit1,
                unit2
            };

            var dllPath    = Assembly.GetAssembly(typeof(ModelTests)).Location;
            var dllName    = Assembly.GetAssembly(typeof(ModelTests)).GetName().Name;
            var outputPath = dllPath.Replace(dllName + ".dll", "");


            Converter.Serialize(Path.Combine(outputPath, "example3.json"), model);

            Converter.Deserialize(new FileInfo(Path.Combine(outputPath, "example3.json")));

            JsonSchema schema  = JsonSchema.Parse(schemaDef);
            var        obGraph = JObject.FromObject(model);

            Assert.IsTrue(obGraph.IsValid(schema));
        }