Example #1
0
        public static List <BBeBTag> ParseAllTags(BBeBObject obj, byte[] tagBytes)
        {
            List <BBeBTag> parsedTags = obj.Tags;

            MemoryStream    tagStream = new MemoryStream(tagBytes);
            BBeBinaryReader tagReader = new BBeBinaryReader(tagStream);

            while (tagReader.BaseStream.Position < tagBytes.Length)
            {
                TagId eTagId = tagReader.ReadTag();

                // This method adds the tag it created to the parsed tags array
                // Changed because some tags read other tags (as they need the data from the other tags
                // e.g. StreamSize tag includes StreamStart and StreamEnd tags), and we lose these tags otherwise
                BBeBTag tag = ReadTag(eTagId, tagReader, ref parsedTags, obj.Type);
            }

            return(parsedTags);
        }
Example #2
0
        public BBeBObject CreateObject(BinaryReader reader, uint nObjId, uint nObjLen)
        {
            long nStartPos = reader.BaseStream.Position;

            ushort nObjStartMarker = reader.ReadUInt16();

            if (nObjStartMarker != 0xf500)
            {
                throw new InvalidTagException("Object didn't start with 0xf500: " + nObjStartMarker.ToString(), nObjStartMarker);
            }

            ushort id = reader.ReadUInt16();

            if (id != nObjId)
            {
                throw new InvalidDataException("Object ID mismatch.");
            }

            ushort zero = reader.ReadUInt16();

            if (zero != 0x0)
            {
                throw new InvalidDataException("Object didn't have zero as second word.");
            }
            ushort     nObjType = reader.ReadUInt16();
            ObjectType objType  = (ObjectType)nObjType;

            Debug.WriteLineIf(s_bDebugMode, "Obj: " + objType.ToString() + " id=" + id);

            BBeBObject obj = null;

            long nBytesSoFar = reader.BaseStream.Position - nStartPos;

            byte[] tagBytes = reader.ReadBytes((int)(nObjLen - nBytesSoFar));

            switch (objType)
            {
            case ObjectType.Page:
                obj = ReadPageObject(reader, id, tagBytes);
                break;

            case ObjectType.TOC:
                obj = ReadTocObject(reader, id, tagBytes);
                break;

            case ObjectType.PageTree:
                obj = ReadPageTreeObject(reader, id, tagBytes);
                break;

            case ObjectType.PageAtr:
                obj = ReadPageAttrObject(reader, id, tagBytes);
                break;

            case ObjectType.BookAtr:
                obj = ReadBookAttrObject(reader, id, tagBytes);
                break;

            case ObjectType.Block:
                obj = ReadBlockObject(reader, id, tagBytes);
                break;

            case ObjectType.BlockAtr:
                obj = ReadBlockAttrObject(reader, id, tagBytes);
                break;

            case ObjectType.Text:
                obj = ReadTextObject(reader, id, tagBytes);
                break;

            case ObjectType.TextAtr:
                obj = ReadTextAttrObject(reader, id, tagBytes);
                break;

            case ObjectType.SimpleText:
                obj = ReadSimpleTextObject(reader, id, tagBytes);
                break;

            case ObjectType.Image:
                obj = ReadImageObject(reader, id, tagBytes);
                break;

            case ObjectType.ImageStream:
                obj = ReadImageStreamObject(reader, id, tagBytes);
                break;

            case ObjectType.ObjectInfo:
                obj = ReadObjectInfoObject(reader, id, tagBytes);
                break;

            case ObjectType.Header:
                obj = ReadHeaderObject(reader, id, tagBytes);
                break;

            case ObjectType.Button:
                obj = ReadButtonObject(reader, id, tagBytes);
                break;

            case ObjectType.PopUpWin:
                obj = ReadPopUpWinObject(reader, id, tagBytes);
                break;

            default:
                throw new InvalidDataException("Unsupported object type: " + objType.ToString());
            }

            return(obj);
        }
Example #3
0
 private void ParseTagData(BBeBObject obj, byte[] tagBytes)
 {
     BBeBTagFactory.ParseAllTags(obj, tagBytes);
 }