示例#1
0
        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);
            }
        }
示例#2
0
        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);
        }
示例#3
0
        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'));
        }
示例#4
0
        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);
        }
示例#5
0
 public void TearDown()
 {
     _reader.Dispose();
     _reader = null;
 }
示例#6
0
 public void Setup()
 {
     _reader = new MarkingTextReader(new StringReader("line1\nx\ny\nline2\nline3\nx\nline4\nline5\ny\nline6\n"));
 }