Example #1
0
        private void ProcessForParallelBookVerses(
            BibleTranslationDifferencesEx baseTranslationDifferencesEx,
            BibleTranslationDifferencesEx parallelTranslationDifferencesEx,
            ParallelBibleInfo result)
        {
            foreach (int bookIndex in parallelTranslationDifferencesEx.BibleVersesDifferences.Keys)
            {
                if (!result.TryGetValue(bookIndex, out ModuleVersePointersComparisonTable bookVersePointersComparisonTables))
                {
                    bookVersePointersComparisonTables = new ModuleVersePointersComparisonTable();
                    result.Add(bookIndex, bookVersePointersComparisonTables);
                }

                var baseBookVerses     = baseTranslationDifferencesEx.GetBibleVersesDifferences(bookIndex);
                var parallelBookVerses = parallelTranslationDifferencesEx.BibleVersesDifferences[bookIndex];

                foreach (var parallelVerseKVP in parallelBookVerses)
                {
                    if (baseBookVerses == null || !baseBookVerses.ContainsKey(parallelVerseKVP.Key))   // вариант, когда и там, и там есть, мы уже разобрали
                    {
                        bookVersePointersComparisonTables.Add(parallelVerseKVP.Key, parallelVerseKVP.Value);
                    }
                }
            }
        }
Example #2
0
        public ParallelBibleInfo GetParallelBibleInfo(
            string baseModuleShortName,
            string parallelModuleShortName,
            BibleTranslationDifferences baseBookTranslationDifferences,
            BibleTranslationDifferences parallelBookTranslationDifferences,
            bool refreshCache = false)
        {
            var key = GetKey(baseModuleShortName, parallelModuleShortName);

            if (refreshCache || !_cache.TryGetValue(key, out ParallelBibleInfo result))
            {
                result = new ParallelBibleInfo();

                if (baseModuleShortName.ToLower() != parallelModuleShortName.ToLower())
                {
                    var verseFactory = new BibleTranslationDifferencesBaseVersesFormula.VerseFactory((s, bookIndex) =>
                    {
                        var verseEntry = _stringParser.TryGetVerse(s, 0);
                        if (verseEntry.VersePointerFound)
                        {
                            return(verseEntry.VersePointer.ToModuleVersePointer(false, bookIndex));
                        }
                        else
                        {
                            throw new NotSupportedException($"Verse formula is invalid: {s}");
                        }
                    });

                    var baseTranslationDifferencesEx     = new BibleTranslationDifferencesEx(baseBookTranslationDifferences, verseFactory);
                    var parallelTranslationDifferencesEx = new BibleTranslationDifferencesEx(parallelBookTranslationDifferences, verseFactory);

                    ProcessForBaseBookVerses(baseTranslationDifferencesEx, parallelTranslationDifferencesEx, result);
                    ProcessForParallelBookVerses(baseTranslationDifferencesEx, parallelTranslationDifferencesEx, result);
                }

                lock (_locker)
                {
                    if (!_cache.ContainsKey(key))
                    {
                        _cache.Add(key, result);
                    }
                    else
                    {
                        _cache[key] = result;
                    }
                }
            }

            return(result);
        }
Example #3
0
        private void ProcessForBaseBookVerses(
            BibleTranslationDifferencesEx baseTranslationDifferencesEx,
            BibleTranslationDifferencesEx parallelTranslationDifferencesEx,
            ParallelBibleInfo result)
        {
            foreach (int bookIndex in baseTranslationDifferencesEx.BibleVersesDifferences.Keys)
            {
                var bookVersePointersComparisonTables = new ModuleVersePointersComparisonTable();
                result.Add(bookIndex, bookVersePointersComparisonTables);

                var baseBookVerses     = baseTranslationDifferencesEx.BibleVersesDifferences[bookIndex];
                var parallelBookVerses = parallelTranslationDifferencesEx.GetBibleVersesDifferences(bookIndex);

                foreach (var baseVerseKey in baseBookVerses.Keys)
                {
                    if (parallelBookVerses != null && parallelBookVerses.TryGetValue(baseVerseKey, out ComparisonVersesInfo parallelVerses))
                    {
                        var baseVerses = baseBookVerses[baseVerseKey];

                        JoinBaseAndParallelVerses(baseVerseKey, baseVerses, parallelVerses, bookVersePointersComparisonTables);
                    }
                    else
                    {
                        var baseVerses     = baseBookVerses[baseVerseKey];
                        int?versePartIndex = baseVerses.Count(v => !v.IsApocrypha && !v.IsEmpty) > 1 ? (int?)0 : null;
                        foreach (var baseVersePointer in baseVerses)
                        {
                            parallelVerses = ComparisonVersesInfo.FromVersePointer(
                                new ModuleVersePointer(baseVerseKey)
                            {
                                PartIndex         = versePartIndex.HasValue ? versePartIndex++ : null,
                                IsEmpty           = baseVersePointer.IsApocrypha || baseVerseKey.IsEmpty,
                                SkipCheck         = baseVerseKey.SkipCheck,
                                EmptyVerseContent = baseVerseKey.EmptyVerseContent
                            });

                            var key = (ModuleVersePointer)baseVersePointer.Clone();
                            key.PartIndex = null;  // нам просто здесь не важно - часть это стиха или нет.
                            bookVersePointersComparisonTables.Add(key, parallelVerses);
                        }
                    }
                }
            }
        }