public void InclChunk_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)) { InclChunk chunk = new InclChunk(reader, parent, document, "INCL", buffer.Length); Assert.False(chunk.IsInitialized); // Support multiple INCL chunks in single DjvuChunk var testChunk = doc.Data.Pages[0].Children .Where(x => x.ID == "INCL" && x.Name == chunk.IncludeID) .FirstOrDefault <DjvuJsonDocument.Chunk>(); Assert.NotNull(testChunk); Assert.Equal(testChunk.Name, chunk.IncludeID); } }
public void CreateEncodedDjvuNode_Theory(IDjvuWriter writer, IDjvuElement parent, ChunkType chunkType, long length = 0) { if (writer == null) { Mock <IDjvuWriter> writerMock = new Mock <IDjvuWriter>(); writerMock.Setup <long>(x => x.Position).Returns(1024); writer = writerMock.Object; } switch (chunkType) { case ChunkType.Cida: case ChunkType.Unknown: Assert.Throws <DjvuInvalidOperationException>( () => DjvuParser.CreateEncodedDjvuNode(writer, parent, chunkType, length)); break; default: if (ChunkType.Info == chunkType) { length = 10; } IDjvuNode node = DjvuParser.CreateEncodedDjvuNode(writer, parent, chunkType, length); Assert.NotNull(node); Assert.Equal <ChunkType>(chunkType, node.ChunkType); Assert.Equal <long>(length, node.Length); break; } }
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); } }
protected void OnParsedDjvuElement(IDjvuElement element) { if (ParsedDjvuElementEvent != null) { ParsedDjvuElementEvent(this, new ParsedDjvuElementEventArgs(element)); } }
/// <summary> /// IFFChunk constructor /// </summary> /// <param name="reader"></param> /// <param name="parent"></param> /// <param name="document"></param> /// <param name="chunkID"></param> /// <param name="length"></param> public DjvuNode(IDjvuReader reader, IDjvuElement parent, IDjvuDocument document, string chunkID = "", long length = 0) { Reader = reader; Parent = parent; Document = document; Length = length; ChunkID = chunkID; DataOffset = reader.Position; }
public static DjvuFormElement GetRootForm(IDjvuReader reader, IDjvuElement parent, IDjvuDocument document) { string formStr = reader.ReadUTF8String(4); // use of uint in Djvu Format limits file read size to 4 GB - should be long (int64) int length = (int)reader.ReadUInt32BigEndian(); string formType = reader.ReadUTF8String(4); reader.Position -= 4; ChunkType type = DjvuParser.GetFormType(formType); DjvuFormElement formObj = (DjvuFormElement)DjvuParser.CreateDecodedDjvuNode(reader, document, parent, type, formType, length); return(formObj); }
public void LastChildTest() { int pageCount = 0; using (DjvuDocument document = Util.GetTestDocument(2, out pageCount)) { Util.VerifyDjvuDocument(pageCount, document); var page = document.Pages[11]; IDjvuElement element = page.PageForm; IDjvuNode lastChild = element.LastChild; Assert.NotNull(lastChild); Assert.IsType <TxtzChunk>(lastChild); } }
public void LastSiblingTest001() { int pageCount = 0; using (DjvuDocument document = Util.GetTestDocument(2, out pageCount)) { Util.VerifyDjvuDocument(pageCount, document); var page = document.Pages[11]; var lastPage = document.Pages[document.Pages.Count - 1]; IDjvuElement element = page.PageForm; IDjvuNode lastSibling = element.LastSibling; Assert.NotNull(lastSibling); Assert.Same(lastSibling, lastPage.PageForm); } }
public void FirstSiblingTest001() { int pageCount = 0; using (DjvuDocument document = Util.GetTestDocument(2, out pageCount)) { Util.VerifyDjvuDocument(pageCount, document); var page = document.Pages[11]; var firstPage = document.Pages[0]; IDjvuElement element = page.PageForm; IDjvuNode firstSibling = element.FirstSibling; Assert.NotNull(firstSibling); Assert.IsType <DirmChunk>(firstSibling); } }
public void ToStringTest() { IDjvuReader reader = null; Mock <IDjvuReader> readerMock = new Mock <IDjvuReader>(); readerMock.Setup <long>(x => x.Position).Returns(1024); reader = readerMock.Object; IDjvuElement element = (IDjvuElement)DjvuParser.CreateDecodedDjvuNode(reader, null, null, ChunkType.Djvi, "DJVI", 127); string result = element.ToString(); Assert.False(String.IsNullOrWhiteSpace(result)); Assert.Contains("ID: DJVI", result); Assert.Contains("Name: Djvi", result); Assert.Contains("Length: 127", result); Assert.Contains("Offset: 1024", result); Assert.Contains("Children: 0", result); }
public void ThumChunk_Theory(DjvuJsonDocument doc, int index) { int pageCount = 0; using (DjvuDocument document = DjvuNet.Tests.Util.GetTestDocument(index, out pageCount)) { DjvuNet.Tests.Util.VerifyDjvuDocument(pageCount, document); DjvuNet.Tests.Util.VerifyDjvuDocumentCtor(pageCount, document); if (doc.Data.Thumbnails?.Length > 0) { DjvuJsonDocument.RootChild[] thumbsJson = doc.Data.Thumbnails; var thumbs = document.RootForm.Children.Where((x) => x.ChunkType == ChunkType.Thum).ToArray(); Assert.Equal <int>(thumbsJson.Length, thumbs.Length); for (int i = 0; i < thumbs.Length; i++) { IDjvuNode th = thumbs[i]; IDjvuElement thum = th as IDjvuElement; DjvuJsonDocument.RootChild r = thumbsJson[i]; Assert.Equal <int>(thum.Children.Count, r.Children.Length); //DumpTH44ChunkList(index, thum.Children, i); for (int k = 0; k < thum.Children.Count; k++) { IDjvuNode th44 = thum.Children[k]; Assert.Equal <ChunkType>(ChunkType.TH44, th44.ChunkType); DjvuJsonDocument.Chunk c = r.Children[k]; Assert.Equal <long>(th44.Length, c.Size); } } } else { var thumbs = document.RootForm.Children.Where((x) => x.ChunkType == ChunkType.Thum).ToArray(); Assert.Equal <int>(0, thumbs.Length); } } }
public void ImageTest() { 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; SjbzChunk chunk = new SjbzChunk(reader, parent, document, "SJBZ", 2048); Assert.False(chunk.IsInitialized); chunk.ReadData(reader); Assert.Equal <long>(reader.Position, chunk.DataOffset + chunk.Length); }
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); }
public void CreateDecodedDjvuNode_Theory(IDjvuReader reader, IDjvuDocument rootDocument, IDjvuElement parent, ChunkType chunkType, string chunkID = "", long length = 0) { if (reader == null) { Mock <IDjvuReader> readerMock = new Mock <IDjvuReader>(); readerMock.Setup <long>(x => x.Position).Returns(1024); reader = readerMock.Object; } if (ChunkType.Info == chunkType) { length = 10; } IDjvuNode node = DjvuParser.CreateDecodedDjvuNode(reader, rootDocument, parent, chunkType, chunkID, length); Assert.NotNull(node); Assert.Equal <ChunkType>(chunkType, node.ChunkType); Assert.Equal(chunkID, node.ChunkID); Assert.Equal <long>(length, node.Length); Assert.Equal <long>(reader.Position, node.DataOffset); }
public DjvuNode(IDjvuWriter writer, IDjvuElement parent, long length = 0) { Writer = writer; Parent = parent; Length = length; }
public ParsedDjvuElementEventArgs(IDjvuElement element) : base() { Element = element; }
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); }
public DjvuFormElement(IDjvuReader reader, IDjvuElement parent, IDjvuDocument document, string chunkID = "", long length = 0) : base(reader, parent, document, chunkID, length) { InitializeInternal(); }
/// <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); }
public DjvuFormElement(IDjvuWriter writer, IDjvuElement parent, long length = 0) : base(writer, parent, length) { InitializeInternal(); }
public PM44Form(IDjvuWriter writer, IDjvuElement parent, long length = 0) : base(writer, parent, length) { }
public AntaChunk(IDjvuReader reader, IDjvuElement parent, IDjvuDocument document, string chunkID = "", long length = 0) : base(reader, parent, document, chunkID, length) { }
public AntaChunk(IDjvuWriter writer, IDjvuElement parent, long length = 0) : base(writer, parent, length) { }
public UnknownChunk(IDjvuReader reader, IDjvuElement parent, IDjvuDocument document, string chunkID = "", long length = 0) : base(reader, parent, document, chunkID, length) { // Nothing }