Esempio n. 1
0
        public void editTagsAndCommentInXLF(String fileIn, String fileOut, String tagsInfo, String Comment)
        {
            var content      = File.ReadAllText(fileIn);
            var defxml       = Regex.Match(content, @"<\?xml\b[^<>]*\?>").Value;
            var nsdef        = Regex.Match(content, @"(?<=<xliff\b[^<>]*xmlns[ \t]*=[ \t]*"")[^""]+(?="")").Value;
            var spaceTU      = Regex.Match(content, @"(?<=[\r\n]+)[ \t]*(?=<trans-unit\b)").Value;
            var spaceTUChild = Regex.Match(content, @"(?<=[\r\n]+)[ \t]*(?=<source\b)").Value;

            content = Regex.Replace(content, @"&(?!amp;|lt;|gt;)(#\d+?;|[a-zA-Z]+?;)", "&amp;#38;$1");

            XmlReaderSettings xrs = new XmlReaderSettings();

            xrs.CheckCharacters  = false;
            xrs.IgnoreWhitespace = false;
            xrs.NameTable        = new NameTable();
            XmlNamespaceManager xnm = new XmlNamespaceManager(xrs.NameTable);

            xnm.AddNamespace("xlfns", nsdef);

            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.PreserveWhitespace = true;
            var sr = new StringReader(content);

            using (var xr = XmlReader.Create(sr, xrs))
            {
                xmlDoc.Load(xr);
            }

            var TuNds = xmlDoc.SelectNodes("//xlfns:trans-unit", xnm);

            foreach (XmlNode TuNd in TuNds)
            {
                var tagsNoteNd = TuNd.SelectSingleNode("./xlfns:note[@from='tags']", xnm);
                if (tagsNoteNd != null)
                {
                    tagsNoteNd.InnerXml = tagsInfo;
                }
                else
                {
                    XmlNode    addNd = xmlDoc.CreateNode(XmlNodeType.Element, "note", nsdef);
                    XmlElement addXe = (XmlElement)addNd;
                    addXe.SetAttribute("from", "tags");
                    addXe.InnerXml = tagsInfo;
                    TuNd.AppendChild(addXe);
                }

                var commentNoteNd = TuNd.SelectSingleNode("./xlfns:note[@from='L10N comment']", xnm);
                if (commentNoteNd != null)
                {
                    commentNoteNd.InnerXml = Comment;
                }
                else
                {
                    XmlNode    addNd = xmlDoc.CreateNode(XmlNodeType.Element, "note", nsdef);
                    XmlElement addXe = (XmlElement)addNd;
                    addXe.SetAttribute("from", "L10N comment");
                    addXe.InnerXml = Comment;
                    TuNd.AppendChild(addXe);
                }
            }

            XmlWriterSettings xws = new XmlWriterSettings();

            xws.CheckCharacters     = false;
            xws.Encoding            = Encoding.UTF8;
            xws.Indent              = true;
            xws.NamespaceHandling   = NamespaceHandling.OmitDuplicates;
            xws.NewLineChars        = "\r\n";
            xws.NewLineHandling     = NewLineHandling.None;
            xws.NewLineOnAttributes = false;
            xws.OmitXmlDeclaration  = false;
            using (var xw = XmlWriter.Create(fileOut, xws))
            {
                xmlDoc.Save(xw);
            }

            var textWrite = File.ReadAllText(fileOut);
            var repand    = Regex.Replace(textWrite, @"&amp;#38;(?!amp;|lt;|gt;)(#\d+?;|[a-zA-Z]+?;)", "&$1");
            var repXmldef = Regex.Replace(repand, @"<\?xml\b[^<>]*\?>", defxml);
            var addSpace1 = Regex.Replace(repXmldef, @">\s*<(target|source|note)\b", ">\r\n" + spaceTUChild + "<$1");
            var addSpace2 = Regex.Replace(addSpace1, @">\s*<trans-unit\b", ">\r\n" + spaceTU + "<trans-unit");
            var addSpace3 = Regex.Replace(addSpace2, @">\s*</trans-unit>", ">\r\n" + spaceTU + "</trans-unit>");

            File.WriteAllText(fileOut, addSpace3, Encoding.UTF8);
        }
Esempio n. 2
0
        public void fileProcessedForCheckFiles(String fileIn, String fileOut)
        {
            var content      = File.ReadAllText(fileIn);
            var defxml       = Regex.Match(content, @"<\?xml\b[^<>]*\?>").Value;
            var nsdef        = Regex.Match(content, @"(?<=xliff\b[^<>]*xmlns[ \t]*=[ \t]*"")[^""]+(?="")").Value;
            var spaceTU      = Regex.Match(content, @"(?<=[\r\n]+)[ \t]*(?=<trans-unit\b)").Value;
            var spaceTUChild = Regex.Match(content, @"(?<=[\r\n]+)[ \t]*(?=<source\b)").Value;

            content = Regex.Replace(content, @"&(?!amp;|lt;|gt;)(#\d+?;|[a-zA-Z]+?;)", "&amp;#38;$1");

            XmlReaderSettings xrs = new XmlReaderSettings();

            xrs.CheckCharacters  = false;
            xrs.IgnoreWhitespace = false;
            xrs.NameTable        = new NameTable();
            XmlNamespaceManager xnm = new XmlNamespaceManager(xrs.NameTable);

            xnm.AddNamespace("xlfns", nsdef);

            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.PreserveWhitespace = true;
            var sr = new StringReader(content);

            using (var xr = XmlReader.Create(sr, xrs))
            {
                xmlDoc.Load(xr);
            }

            var TuNds = xmlDoc.SelectNodes("//xlfns:trans-unit", xnm);

            foreach (XmlNode TuNd in TuNds)
            {
                var        targetNd  = TuNd.SelectSingleNode("./xlfns:target", xnm);
                XmlElement targetXe  = (XmlElement)targetNd;
                var        stateAttr = targetXe.GetAttribute("state");
                if (stateAttr == "final")
                {
                    var parent = TuNd.ParentNode;
                    parent.RemoveChild(TuNd);
                }
                else
                {
                    var sourceNd = TuNd.SelectSingleNode("./xlfns:source", xnm);
                    var inxml    = sourceNd.InnerXml;
                    targetXe.InnerXml = inxml;
                    targetXe.SetAttribute("state", "translated");
                }
            }

            XmlWriterSettings xws = new XmlWriterSettings();

            xws.CheckCharacters     = false;
            xws.Encoding            = Encoding.UTF8;
            xws.Indent              = true;
            xws.NamespaceHandling   = NamespaceHandling.OmitDuplicates;
            xws.NewLineChars        = "\r\n";
            xws.NewLineHandling     = NewLineHandling.None;
            xws.NewLineOnAttributes = false;
            xws.OmitXmlDeclaration  = false;
            using (var xw = XmlWriter.Create(fileOut, xws))
            {
                xmlDoc.Save(xw);
            }

            var textWrite = File.ReadAllText(fileOut);
            var repand    = Regex.Replace(textWrite, @"&amp;#38;(?!amp;|lt;|gt;)(#\d+?;|[a-zA-Z]+?;)", "&$1");
            var repXmldef = Regex.Replace(repand, @"<\?xml\b[^<>]*\?>", defxml);
            var addSpace1 = Regex.Replace(repXmldef, @">\s*<(target|source|note)\b", ">\r\n" + spaceTUChild + "<$1");
            var addSpace2 = Regex.Replace(addSpace1, @">\s*<trans-unit\b", ">\r\n" + spaceTU + "<trans-unit");
            var addSpace3 = Regex.Replace(addSpace2, @">\s*</trans-unit>", ">\r\n" + spaceTU + "</trans-unit>");

            File.WriteAllText(fileOut, addSpace3, Encoding.UTF8);
        }
Esempio n. 3
0
        public void exportTermlistFromXLF(String fileIn, Workbook wb_term)
        {
            var content  = File.ReadAllText(fileIn);
            var filename = Regex.Match(content, @"(?<=<file\b.*original[ \t]*=[ \t]*"")[^""]+?(?="")").Value;
            var nsdef    = Regex.Match(content, @"(?<=xliff\b[^<>]*xmlns[ \t]*=[ \t]*"")[^""]+(?="")").Value;
            var lang     = Regex.Match(content, @"(?<=target-language[ \t]*=[ \t]*"")[^""]+(?="")").Value;

            content = Regex.Replace(content, @"&(?!amp;|lt;|gt;)(#\d+?;|[a-zA-Z]+?;)", "&amp;#38;$1");
            Worksheet ws_term = new Worksheet();

            try
            {
                ws_term = wb_term.Worksheets["SP_" + lang];
            }
            catch
            {
                ws_term      = wb_term.Worksheets.Add(wb_term.Worksheets.get_Item(1), Missing.Value, Missing.Value, Missing.Value);
                ws_term.Name = "SP_" + lang;
                ws_term.Cells[1, 1].Value = "filename";
                ws_term.Cells[1, 2].Value = "context";
                ws_term.Cells[1, 3].Value = "text";
                ws_term.Cells[1, 4].Value = "translation";
                ws_term.Cells[1, 5].Value = "comment";
                ws_term.Cells[1, 6].Value = "tags";
                ws_term.Cells[1, 7].Value = "DB ID";

                Range wsRang = ws_term.get_Range((Range)ws_term.Cells[1, 1], (Range)ws_term.Cells[1, 7]);
                wsRang.Font.Bold         = true;
                wsRang.Borders.LineStyle = XlLineStyle.xlContinuous;
            }

            int rows = ws_term.UsedRange.Rows.Count;
            XmlReaderSettings xrs = new XmlReaderSettings();

            xrs.CheckCharacters  = false;
            xrs.IgnoreWhitespace = false;
            xrs.NameTable        = new NameTable();
            XmlNamespaceManager xnm = new XmlNamespaceManager(xrs.NameTable);

            xnm.AddNamespace("xlfns", nsdef);
            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.PreserveWhitespace = true;
            var sr = new StringReader(content);

            using (var xr = XmlReader.Create(sr, xrs))
            {
                xmlDoc.Load(xr);
            }

            XmlNodeList TuNds = xmlDoc.SelectNodes("//xlfns:trans-unit", xnm);

            foreach (XmlNode TuNd in TuNds)
            {
                rows++;
                XmlElement TuXe = (XmlElement)TuNd;
                var        TuId = TuXe.GetAttribute("id");

                var sourceNd = TuNd.SelectSingleNode("./xlfns:source", xnm);
                var source   = sourceNd.InnerXml;
                source = source.Replace(" xmlns=\"" + nsdef + "\"", "");
                source = Regex.Replace(source, @"&amp;#38;(?!amp;|lt;|gt;)(#\d+?;|[a-zA-Z]+?;)", "&$1");

                var targetNd  = TuNd.SelectSingleNode("./xlfns:target", xnm);
                var localized = targetNd.InnerXml;
                localized = localized.Replace(" xmlns=\"" + nsdef + "\"", "");
                localized = Regex.Replace(localized, @"&amp;#38;(?!amp;|lt;|gt;)(#\d+?;|[a-zA-Z]+?;)", "&$1");

                var noteNd  = TuNd.SelectSingleNode("./xlfns:note[@from='Context']", xnm);
                var context = noteNd.InnerXml;
                context = context.Replace(" xmlns=\"" + nsdef + "\"", "");

                var tagsNd = TuNd.SelectSingleNode("./xlfns:note[@from='tags']", xnm);
                var tags   = tagsNd.InnerXml;
                tags = tags.Replace(" xmlns=\"" + nsdef + "\"", "");

                var    commentNd = TuNd.SelectSingleNode("./xlfns:note[@from='L10N comment']", xnm);
                String comment   = "";
                if (commentNd != null)
                {
                    comment = commentNd.InnerXml;
                    comment = comment.Replace(" xmlns=\"" + nsdef + "\"", "");
                }

                ws_term.Cells[rows, 1].NumberFormatLocal = "@";
                ws_term.Cells[rows, 1].Value             = filename;

                ws_term.Cells[rows, 2].NumberFormatLocal = "@";
                ws_term.Cells[rows, 2].Value             = context;

                ws_term.Cells[rows, 3].NumberFormatLocal = "@";
                ws_term.Cells[rows, 3].Value             = source;

                ws_term.Cells[rows, 4].NumberFormatLocal = "@";
                ws_term.Cells[rows, 4].Value             = localized;

                ws_term.Cells[rows, 5].NumberFormatLocal = "@";
                ws_term.Cells[rows, 5].Value             = comment;

                ws_term.Cells[rows, 6].NumberFormatLocal = "@";
                ws_term.Cells[rows, 6].Value             = tags;

                ws_term.Cells[rows, 7].NumberFormatLocal = "@";
                ws_term.Cells[rows, 7].Value             = TuId;
            }
        }
        public void regularFile(String str_fileIn, String str_fileOrigSrc, String str_fileOut, bool b_removeNd)
        {
            var contentIn    = File.ReadAllText(str_fileIn);
            var contentOrig  = File.ReadAllText(str_fileOrigSrc);
            var defxml       = Regex.Match(contentOrig, @"<\?xml\b[^<>]*\?>").Value;
            var spaceTU      = Regex.Match(contentOrig, @"(?<=[\r\n]+)[ \t]*(?=<trans-unit\b)").Value;
            var spaceTUChild = Regex.Match(contentOrig, @"(?<=[\r\n]+)[ \t]*(?=<source\b)").Value;
            var nsdef        = Regex.Match(contentOrig, @"(?<=xliff\b[^<>]*xmlns[ \t]*=[ \t]*"")[^""]+(?="")").Value;

            contentIn   = Regex.Replace(contentIn, @"&(?!amp;|lt;|gt;)(#\d+?;|[a-zA-Z]+?;)", "&amp;#38;$1");
            contentOrig = Regex.Replace(contentOrig, @"&(?!amp;|lt;|gt;)(#\d+?;|[a-zA-Z]+?;)", "&amp;#38;$1");

            XmlReaderSettings xrs = new XmlReaderSettings();

            xrs.CheckCharacters  = false;
            xrs.IgnoreWhitespace = false;
            xrs.NameTable        = new NameTable();
            XmlNamespaceManager xnm = new XmlNamespaceManager(xrs.NameTable);

            xnm.AddNamespace("xlfns", nsdef);

            XmlDocument xmlDocIn = new XmlDocument();

            xmlDocIn.PreserveWhitespace = true;
            var sr = new StringReader(contentIn);

            using (var xr = XmlReader.Create(sr, xrs))
            {
                xmlDocIn.Load(xr);
            }

            XmlDocument xmlDocOrig = new XmlDocument();

            xmlDocOrig.PreserveWhitespace = true;
            var srOrig = new StringReader(contentOrig);

            using (var xrOrig = XmlReader.Create(srOrig, xrs))
            {
                xmlDocOrig.Load(xrOrig);
            }

            var TuNds = xmlDocIn.SelectNodes("//xlfns:trans-unit", xnm);

            foreach (XmlNode TuNd in TuNds)
            {
                var        targetNd  = TuNd.SelectSingleNode("./xlfns:target", xnm);
                XmlElement targetXe  = (XmlElement)targetNd;
                var        stateAttr = targetXe.GetAttribute("state");
                if (stateAttr == "final" && b_removeNd == true)
                {
                    var parent = TuNd.ParentNode;
                    parent.RemoveChild(TuNd);
                }
                else
                {
                    var        noteNds     = TuNd.SelectNodes("./xlfns:note", xnm);
                    XmlElement TuXe        = (XmlElement)TuNd;
                    var        idAttr      = TuXe.GetAttribute("id");
                    var        TuNdOrig    = xmlDocOrig.SelectSingleNode("//xlfns:trans-unit[@id='" + idAttr + "']", xnm);
                    var        noteNdsOrig = TuNdOrig.SelectNodes("./xlfns:note", xnm);

                    foreach (XmlNode noteNd in noteNds)
                    {
                        TuNd.RemoveChild(noteNd);
                    }

                    foreach (XmlNode noteNdOrig in noteNdsOrig)
                    {
                        var addNd = xmlDocIn.ImportNode(noteNdOrig, true);
                        TuNd.AppendChild(addNd);
                    }
                }
            }

            XmlWriterSettings xws = new XmlWriterSettings();

            xws.CheckCharacters     = false;
            xws.Encoding            = Encoding.UTF8;
            xws.Indent              = true;
            xws.NamespaceHandling   = NamespaceHandling.OmitDuplicates;
            xws.NewLineChars        = "\r\n";
            xws.NewLineHandling     = NewLineHandling.None;
            xws.NewLineOnAttributes = false;
            xws.OmitXmlDeclaration  = false;
            using (var xw = XmlWriter.Create(str_fileOut, xws))
            {
                xmlDocIn.Save(xw);
            }

            var textWrite = File.ReadAllText(str_fileOut);
            var repand    = Regex.Replace(textWrite, @"&amp;#38;(?!amp;|lt;|gt;)(#\d+?;|[a-zA-Z]+?;)", "&$1");
            var repXmldef = Regex.Replace(repand, @"<\?xml\b[^<>]*\?>", defxml);
            var addSpace1 = Regex.Replace(repXmldef, @">\s*<(target|source|note)\b", ">\r\n" + spaceTUChild + "<$1");
            var addSpace2 = Regex.Replace(addSpace1, @">\s*<trans-unit\b", ">\r\n" + spaceTU + "<trans-unit");
            var addSpace3 = Regex.Replace(addSpace2, @">\s*</trans-unit>", ">\r\n" + spaceTU + "</trans-unit>");

            File.WriteAllText(str_fileOut, addSpace3, Encoding.UTF8);
        }