public void Setup() { _options = Substitute.For <IOptionProviderChapterMarkers>(); _options.ChapterMarkers.Returns(new string[] { "第1章", "第2章", "第3章" }); _breaker = new ContentsBreaker(new ChapterMarkersProvider(_options, null)); using (var reader = new MarkingTextReader(new StringReader(_text))) { _contents = _breaker.Analyze(reader); } }
ContentsInfo CreateAnnotatedXhtmlContents() { ContentsInfo contents; using (var inputReader = new MarkingTextReader(new StreamReader(_inputFile, Encoding.UTF8))) { contents = _breaker.Analyze(inputReader); } foreach (var chapter in contents.ChapterFiles) { _log.Debug($"Html for chapter {chapter.Name}"); AnnotateMappingAndConvertToXhtml(chapter); } return(contents); }
public void AnalyzeShouldDetectSingleChapter0WhenChapterMarkersAreEmpty() { var noMarkers = Substitute.For <IChapterMarkersProvider>(); noMarkers.ProvideChapterMarkers(null).Returns(new string[] { }); ContentsInfo zeroContents; var zeroBreaker = new ContentsBreaker(noMarkers); using (var reader = new MarkingTextReader(new StringReader(_text))) { zeroContents = zeroBreaker.Analyze(reader); } Assert.AreEqual(1, zeroContents.ChapterFiles.Count, "ChapterFiles Count"); Assert.AreEqual("ch0", zeroContents.ChapterFiles[0].Name, "FilePath"); Assert.AreEqual(0, zeroContents.ChapterFiles[0].StartLine, "StartLine"); Assert.AreEqual(13, zeroContents.ChapterFiles[0].LengthInLines, "LengthInLines"); zeroContents.ChapterFiles[0].PlainTextContent.Should().BeEquivalentTo(_text.Split('\n')); }
public ContentsInfo Analyze(MarkingTextReader reader) { var chapterMarkers = _markersProvider.ProvideChapterMarkers(reader.Lines).ToArray(); var contents = new ContentsInfo { ChapterFiles = new List <ContentsMapping>(chapterMarkers.Length + 1) }; int startLine = 0; int chapterIndex = 0; for (chapterIndex = 0; chapterIndex < chapterMarkers.Length; chapterIndex++) { var count = reader.CountLinesUntilMarker(chapterMarkers[chapterIndex], chapterIndex == 0); contents.ChapterFiles.Add(new ContentsMapping() { Name = $"ch{chapterIndex}", StartLine = startLine, LengthInLines = count, PlainTextContent = new List <string>(count), }); Copy(reader.Lines, contents.ChapterFiles[chapterIndex]); startLine += count; } contents.ChapterFiles.Add(new ContentsMapping() { Name = $"ch{chapterIndex}", StartLine = startLine, LengthInLines = reader.CountLinesUntilEnd() + (startLine > 0 ? 1 : 0), PlainTextContent = new List <string>(), }); Copy(reader.Lines, contents.ChapterFiles[chapterIndex]); return(contents); }
public void TearDown() { _reader.Dispose(); _reader = null; }
public void Setup() { _reader = new MarkingTextReader(new StringReader("line1\nx\ny\nline2\nline3\nx\nline4\nline5\ny\nline6\n")); }