示例#1
0
        public void Palette_Theory(string file, DjvuJsonDocument doc)
        {
            byte[] buffer = null;
            using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                buffer = new byte[fs.Length];
                int result = fs.Read(buffer, 0, buffer.Length);
                Assert.Equal <long>(fs.Length, result);
            }
            Mock <IDjvuDocument> docMock    = new Mock <IDjvuDocument>();
            Mock <IDjvuElement>  parentMock = new Mock <IDjvuElement>();
            IDjvuElement         parent     = parentMock.Object;
            IDjvuDocument        document   = docMock.Object;

            using (MemoryStream ms = new MemoryStream(buffer, false))
                using (IDjvuReader reader = new DjvuReader(ms))
                {
                    FGbzChunk chunk = new FGbzChunk(reader, parent, document, "FGBZ", buffer.Length);
                    Assert.False(chunk.IsInitialized);
                    var testChunk = doc.Data.Pages[0].Children
                                    .Where(x => x.ID == "FGbz")
                                    .FirstOrDefault <DjvuJsonDocument.Chunk>();
                    Assert.Equal <int>((int)testChunk?.Version.Value, chunk.Version);
                    Assert.Equal <int>((int)testChunk.Colors.Value, (int)chunk.Palette?.PaletteColors?.Length);
                }
        }
示例#2
0
        public void FGbzChunkTest002()
        {
            FGbzChunk chunk = new FGbzChunk();

            Assert.Equal <ChunkType>(ChunkType.FGbz, chunk.ChunkType);
            Assert.Equal("FGbz", chunk.Name);
        }
示例#3
0
        public void ColorPalette001()
        {
            string filePath = Path.Combine(Util.ArtifactsDataPath, "test003C_P01.fgbz");

            using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
                using (DjvuReader reader = new DjvuReader(stream))
                {
                    FGbzChunk th = new FGbzChunk(reader, null, null, "FGBZ", stream.Length);
                    Assert.Equal <ChunkType>(ChunkType.FGbz, th.ChunkType);
                    Assert.Equal(stream.Length, th.Length);

                    var palette = th.Palette;
                    Assert.NotNull(palette);
                    Assert.IsType <ColorPalette>(palette);
                    Assert.False(th.HasShapeTableData);

                    reader.Position = 0;
                    var colPal = new ColorPalette(reader, th);
                    th.Palette = colPal;
                    var palette2 = th.Palette;
                    Assert.NotNull(palette2);
                    Assert.IsType <ColorPalette>(palette2);
                    Assert.NotSame(palette, palette2);
                    Assert.Same(palette2, colPal);
                }
        }
示例#4
0
        public void ReadDataTest()
        {
            Mock <IDjvuReader> readerMock = new Mock <IDjvuReader>();

            readerMock.SetupAllProperties();
            readerMock.Object.Position = 1024;

            Mock <IDjvuDocument> docMock    = new Mock <IDjvuDocument>();
            Mock <IDjvuElement>  parentMock = new Mock <IDjvuElement>();

            IDjvuReader   reader   = readerMock.Object;
            IDjvuElement  parent   = parentMock.Object;
            IDjvuDocument document = docMock.Object;

            FGbzChunk chunk = new FGbzChunk(reader, parent, document, "FGBZ", 2048);

            Assert.False(chunk.IsInitialized);

            chunk.ReadData(reader);
            long positionSum = chunk.DataOffset + chunk.Length;

            Assert.Equal <long>(reader.Position, positionSum);
        }
示例#5
0
        public void FGbzChunkTest001()
        {
            Mock <IDjvuReader> readerMock = new Mock <IDjvuReader>();

            readerMock.Setup <long>(x => x.Position).Returns(1024);
            // readerMock.SetupAllProperties();

            Mock <IDjvuDocument> docMock    = new Mock <IDjvuDocument>();
            Mock <IDjvuElement>  parentMock = new Mock <IDjvuElement>();

            IDjvuReader   reader   = readerMock.Object;
            IDjvuElement  parent   = parentMock.Object;
            IDjvuDocument document = docMock.Object;

            FGbzChunk chunk = new FGbzChunk(reader, parent, document, "FGBZ", 2048);

            Assert.False(chunk.IsInitialized);
            Assert.Equal <long>(1024, chunk.DataOffset);
            Assert.Equal <long>(2048, chunk.Length);
            Assert.Same(reader, chunk.Reader);
            Assert.Same(parent, chunk.Parent);
            Assert.Same(document, chunk.Document);
        }
示例#6
0
        public static IDjvuNode CreateEncodedDjvuNode(IDjvuWriter writer, IDjvuElement parent, ChunkType chunkType, long length)
        {
            IDjvuNode result = null;

            switch (chunkType)
            {
            case ChunkType.Djvm:
                result = new DjvmChunk(writer, parent, length);
                break;

            case ChunkType.Djvu:
                result = new DjvuChunk(writer, parent, length);
                break;

            case ChunkType.Djvi:
                result = new DjviChunk(writer, parent, length);
                break;

            case ChunkType.Thum:
                result = new ThumChunk(writer, parent, length);
                break;

            case ChunkType.Dirm:
                result = new DirmChunk(writer, parent, length);
                break;

            case ChunkType.Navm:
                result = new NavmChunk(writer, parent, length);
                break;

            case ChunkType.Anta:
                result = new AntaChunk(writer, parent, length);
                break;

            case ChunkType.Antz:
                result = new AntzChunk(writer, parent, length);
                break;

            case ChunkType.Txta:
                result = new TxtaChunk(writer, parent, length);
                break;

            case ChunkType.Txtz:
                result = new TxtzChunk(writer, parent, length);
                break;

            case ChunkType.Djbz:
                result = new DjbzChunk(writer, parent, length);
                break;

            case ChunkType.Sjbz:
                result = new SjbzChunk(writer, parent, length);
                break;

            case ChunkType.FG44:
                result = new FG44Chunk(writer, parent, length);
                break;

            case ChunkType.BG44:
                result = new BG44Chunk(writer, parent, length);
                break;

            case ChunkType.TH44:
                result = new TH44Chunk(writer, parent, length);
                break;

            case ChunkType.BM44:
                result = new BM44Chunk(writer, parent, length);
                break;

            case ChunkType.BM44Form:
                result = new BM44Form(writer, parent, length);
                break;

            case ChunkType.PM44:
                result = new PM44Chunk(writer, parent, length);
                break;

            case ChunkType.PM44Form:
                result = new PM44Form(writer, parent, length);
                break;

            case ChunkType.Wmrm:
                result = new WmrmChunk(writer, parent, length);
                break;

            case ChunkType.FGbz:
                result = new FGbzChunk(writer, parent, length);
                break;

            case ChunkType.Info:
                result = new InfoChunk(writer, parent, length);
                break;

            case ChunkType.Incl:
                result = new InclChunk(writer, parent, length);
                break;

            case ChunkType.BGjp:
                result = new BGjpChunk(writer, parent, length);
                break;

            case ChunkType.FGjp:
                result = new FGjpChunk(writer, parent, length);
                break;

            case ChunkType.Smmr:
                result = new SmmrChunk(writer, parent, length);
                break;

            default:
                throw new DjvuInvalidOperationException($"Chunk type is not supported in encoding. ChunkType: {chunkType}");
            }

            return(result);
        }
示例#7
0
        /// <summary>
        /// Builds the appropriate chunk for the ID
        /// </summary>
        /// <returns></returns>
        public static IDjvuNode CreateDecodedDjvuNode(IDjvuReader reader, IDjvuDocument rootDocument,
                                                      IDjvuElement parent, ChunkType chunkType,
                                                      string chunkID = "", long length = 0)
        {
            IDjvuNode result = null;

            switch (chunkType)
            {
            case ChunkType.Djvm:
                result = new DjvmChunk(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.Djvu:
                result = new DjvuChunk(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.Djvi:
                result = new DjviChunk(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.Thum:
                result = new ThumChunk(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.Dirm:
                result = new DirmChunk(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.Navm:
                result = new NavmChunk(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.Anta:
                result = new AntaChunk(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.Antz:
                result = new AntzChunk(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.Txta:
                result = new TxtaChunk(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.Txtz:
                result = new TxtzChunk(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.Djbz:
                result = new DjbzChunk(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.Sjbz:
                result = new SjbzChunk(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.FG44:
                result = new FG44Chunk(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.BG44:
                result = new BG44Chunk(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.TH44:
                result = new TH44Chunk(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.BM44:
                result = new BM44Chunk(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.BM44Form:
                result = new BM44Form(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.PM44:
                result = new PM44Chunk(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.PM44Form:
                result = new PM44Form(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.Wmrm:
                result = new WmrmChunk(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.FGbz:
                result = new FGbzChunk(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.Info:
                result = new InfoChunk(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.Incl:
                result = new InclChunk(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.BGjp:
                result = new BGjpChunk(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.FGjp:
                result = new FGjpChunk(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.Smmr:
                result = new SmmrChunk(reader, parent, rootDocument, chunkID, length);
                break;

            case ChunkType.Cida:
                result = new CidaChunk(reader, parent, rootDocument, chunkID, length);
                break;

            default:
                result = new UnknownChunk(reader, parent, rootDocument, chunkID, length);
                break;
            }

            return(result);
        }