Ejemplo n.º 1
0
            public TmxPair GetTransPair(string source_lang, string target_lang, PropertiesManager propman)
            {
                // if (SourceLang != null && !LangCode.Covers(source_lang, SourceLang)) return null;
                if (SourceLang != null && !LangCode.Equals(source_lang, SourceLang))
                {
                    return(null);
                }

                var source_tuv = GetTuv(source_lang, true);

                if (source_tuv == null)
                {
                    return(null);
                }
                var target_tuv = GetTuv(target_lang, false);

                if (target_tuv == null)
                {
                    return(null);
                }
                if (source_tuv == target_tuv)
                {
                    return(null);
                }

                var pair = new TmxPair
                {
                    Serial     = Index + 1,
                    Id         = Id,
                    Source     = source_tuv.Inline,
                    Target     = target_tuv.Inline,
                    SourceLang = source_lang, // or source_tuv.Lang?  FIXME.
                    TargetLang = target_lang, // or target_tuv.Lang?  FIXME.
                };

                pair.SetProps(propman, TuProps, source_tuv.Props, target_tuv.Props);
                pair.SetNotes(TuNotes, source_tuv.Notes, target_tuv.Notes);
                return(pair);
            }
Ejemplo n.º 2
0
        public IAssetBundle Read(XmlReader reader, string package, string filename)
        {
            XElement header;
            IEnumerable <XElement> tus;

            if (!ParseEnumerateTmx(reader, out header, out tus))
            {
                return(null);
            }

            var X    = header.Name.Namespace;
            var pool = new ConcurrentStringPool();

            var slang = DetectSourceLanguage(header);

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

            var propman         = new PropertiesManager(true);
            var pair_store_pool = new ConcurrentStack <PairStore>();

            Parallel.ForEach(tus,
                             new ParallelOptions()
            {
                MaxDegreeOfParallelism = Environment.ProcessorCount - 1
            },
                             // Local Init
                             () =>
            {
                PairStore pairs;
                return(pair_store_pool.TryPop(out pairs) ? pairs : new PairStore());
            },
                             // Body
                             (tu, state, index_long, pairs) =>
            {
                var index = (int)index_long;

                // collect tu info.
                var id       = (string)tu.Attribute("tuid") ?? "";
                var tu_props = CollectProps(tu);
                var tu_notes = CollectNotes(tu);

                var source_tuv = tu.Elements(X + "tuv").FirstOrDefault(tuv => Covers(slang, Lang(tuv)));
                if (source_tuv != null)
                {
                    // collec source tuv info.
                    var source_lang   = Lang(source_tuv);
                    var source_inline = GetInline(source_tuv.Element(X + "seg"), X);
                    var source_props  = CollectProps(source_tuv);
                    var source_notes  = CollectNotes(source_tuv);

                    var tag_pool = NumberTags(source_inline);

                    foreach (var target_tuv in tu.Elements(X + "tuv"))
                    {
                        if (Covers(slang, Lang(target_tuv)))
                        {
                            continue;
                        }

                        // collet target tuv info.
                        var target_lang   = Lang(target_tuv);
                        var target_inline = MatchTags(tag_pool, GetInline(target_tuv.Element(X + "seg"), X));
                        var target_props  = CollectProps(target_tuv);
                        var target_notes  = CollectNotes(target_tuv);

                        var pair = new TmxPair()
                        {
                            Serial     = index + 1,
                            Id         = id,
                            Source     = source_inline,
                            Target     = target_inline,
                            SourceLang = source_lang,
                            TargetLang = target_lang,
                        };
                        pair.SetProps(propman, pool, tu_props, source_props, target_props);
                        pair.SetNotes(tu_notes, source_notes, target_notes);

                        pairs.Add(index, target_lang, pair);
                    }
                }
                return(pairs);
            },
                             // Local Finally
                             pairs =>
            {
                pair_store_pool.Push(pairs);
            }
                             );

            // Merge pairs in pair_store_pool into a single PairStore.
            PairStore all_pairs;

            pair_store_pool.TryPop(out all_pairs);
            while (!pair_store_pool.IsEmpty)
            {
                PairStore pairs;
                pair_store_pool.TryPop(out pairs);
                all_pairs.AddAll(pairs);
            }

            // Wrap pairs in assets, then in an asset bundle.
            IEnumerable <IAsset> assets = Enumerable.Empty <IAsset>();

            if (all_pairs != null)
            {
                assets = all_pairs.GetTargetLanguages().Select(tlang => new TmxAsset()
                {
                    Package    = package,
                    Original   = string.Format("{0} - {1}", slang, tlang),
                    SourceLang = slang,
                    TargetLang = tlang,
                    TransPairs = all_pairs.GetPairs(tlang),
                    Properties = propman.Properties,
                }).ToList();
            }
            return(new SimpleAssetBundle(assets, filename));
        }