private void ParseTextNodes(TextNodesString parseString) { var index = 0; // чтобы анализировать с первого символа, так как теперь поддерживаем ещё и такие ссылки, как "5:6 - ..." var verseEntry = stringParser.TryGetVerse(parseString.Value, index); var skipNodes = 0; while (verseEntry.VersePointerFound) { var verseWasRecognized = verseRecognitionService.TryRecognizeVerse(verseEntry, docParseContext); if (!verseWasRecognized && configurationManager.UseCommaDelimiter && verseEntry.EntryType <= VerseEntryType.ChapterVerse) { verseEntry = stringParser.TryGetVerse(parseString.Value, index, index, false); verseWasRecognized = verseRecognitionService.TryRecognizeVerse(verseEntry, docParseContext); } if (verseWasRecognized) { var verseNode = FindNodeAndMoveVerseTextInOneNodeIfNotReadonly(parseString, verseEntry, ref skipNodes); if (!this.docParseContext.DocumentId.IsReadonly && !parseString.IsReadonly) { if (!NodeIsLink(verseNode.NodeEntry.Node.GetParentNode())) { InsertVerseLink(verseNode, verseEntry); } else { UpdateLinkNode(verseNode.NodeEntry.Node.GetParentNode(), verseEntry); } } paragraphContextEditor.ParseResult.VerseEntries.Add(verseEntry); paragraphContextEditor.SetLatestVerseEntry(verseEntry); } if (verseEntry.VersePointer.SubVerses.NotFoundVerses.Count > 0) { paragraphContextEditor.ParseResult.NotFoundVerses.AddRange(verseEntry.VersePointer.SubVerses.NotFoundVerses); } var prevIndex = index; index = verseEntry.EndIndex + 1; if (index < parseString.Value.Length - 1) { var leftBoundary = !verseWasRecognized && verseEntry.EntryType > VerseEntryType.ChapterVerse ? prevIndex : index; verseEntry = stringParser.TryGetVerse(parseString.Value, index, leftBoundary, configurationManager.UseCommaDelimiter); } else { break; } } }
public void Test1() { var s = "Тест и Ин 5:6, а потом 5:7,8. 9 глава. 10 стих. и :7. ст.5-6. *:8-9*, [5:7], в 5 стихе, в главе 6. Лк 5-6,8 и 7:9"; var verseEntry = _stringParser.TryGetVerse(s, 0); AssertVerseEntry(verseEntry, 7, 12, VerseEntryType.BookChapterVerse); verseEntry = _stringParser.TryGetVerse(s, verseEntry.EndIndex + 1); AssertVerseEntry(verseEntry, 23, 25, VerseEntryType.ChapterVerse); verseEntry = _stringParser.TryGetVerse(s, verseEntry.EndIndex + 1); AssertVerseEntry(verseEntry, 27, 27, VerseEntryType.ChapterOrVerse); //verseEntry = _verseRecognitionService.TryGetVerse(s, verseEntry.EndIndex + 1); //AssertVerseEntry(verseEntry, 30, 36, VerseEntryType.Chapter); //verseEntry = _verseRecognitionService.TryGetVerse(s, verseEntry.EndIndex + 1); //AssertVerseEntry(verseEntry, 39, 45, VerseEntryType.Verse); verseEntry = _stringParser.TryGetVerse(s, verseEntry.EndIndex + 1); AssertVerseEntry(verseEntry, 50, 51, VerseEntryType.Verse); //verseEntry = _verseRecognitionService.TryGetVerse(s, verseEntry.EndIndex + 1); //AssertVerseEntry(verseEntry, 54, 59, VerseEntryType.Verse); verseEntry = _stringParser.TryGetVerse(s, verseEntry.EndIndex + 1); AssertVerseEntry(verseEntry, 63, 66, VerseEntryType.Verse, VerseEntryOptions.ImportantVerse); //verseEntry = _verseRecognitionService.TryGetVerse(s, verseEntry.EndIndex + 1); //AssertVerseEntry(verseEntry, 71, 73, VerseEntryType.ChapterVerse, VerseEntryOptions.InSquareBrackets); //verseEntry = _verseRecognitionService.TryGetVerse(s, verseEntry.EndIndex + 1); //AssertVerseEntry(verseEntry, 79, 85, VerseEntryType.Verse); //verseEntry = _verseRecognitionService.TryGetVerse(s, verseEntry.EndIndex + 1); //AssertVerseEntry(verseEntry, 90, 96, VerseEntryType.Chapter); verseEntry = _stringParser.TryGetVerse(s, verseEntry.EndIndex + 1); AssertVerseEntry(verseEntry, 99, 104, VerseEntryType.BookChapter); verseEntry = _stringParser.TryGetVerse(s, verseEntry.EndIndex + 1); AssertVerseEntry(verseEntry, 106, 106, VerseEntryType.ChapterOrVerse); verseEntry = _stringParser.TryGetVerse(s, verseEntry.EndIndex + 1); AssertVerseEntry(verseEntry, 110, 112, VerseEntryType.ChapterVerse); }
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); }
public VersePointer CreateVersePointer(string text) { var verseEntry = _stringParser.TryGetVerse(text, 0); if (verseEntry.VersePointerFound && (verseEntry.EntryType == VerseEntryType.BookChapter || verseEntry.EntryType == VerseEntryType.BookChapterVerse) && verseEntry.StartIndex == 0 //&& verseEntry.EndIndex == text.Length - 1 ) { return(verseEntry.VersePointer); } return(null); }