コード例 #1
0
 public void ReadFileNodeHeader(ref FileNodeHeader fileNodeHeader)
 {
     if (!Unsafe.ReadStruct(binaryReader, ref fileNodeHeader))
     {
         throw new FileFormatException("Cannot read header of FileNode");
     }
 }
コード例 #2
0
        public ObjectGroupListReferenceFND ReadObjectGroupListReferenceFND(FileNodeHeader header)
        {
            var fileChunkReference = oneNoteFileReader.ReadFileChunkReference(header.StpFormat, header.CbFormat, "ObjectSpaceManifestListReferenceFND.ref");

            var objectGroupID = new ExtendedGuid();

            oneNoteFileReader.ReadExtendedGuid(ref objectGroupID, "ObjectSpaceManifestListReferenceFND.objectGroupID");

            return(new ObjectGroupListReferenceFND(header, fileChunkReference, objectGroupID));
        }
コード例 #3
0
        public ObjectDeclaration2RefCountFND ReadObjectDeclaration2RefCountFND(FileNodeHeader header)
        {
            var fileChunkReference = oneNoteFileReader.ReadFileChunkReference(header.StpFormat, header.CbFormat, "ObjectDeclaration2RefCountFND.BlobRef");

            var body = new ObjectDeclaration2Body();

            oneNoteFileReader.ReadObjectDeclaration2Body(ref body);

            var cRef = oneNoteFileReader.ReadByte();

            return(new ObjectDeclaration2RefCountFND(header, fileChunkReference, body, cRef));
        }
コード例 #4
0
        public FNDBase ReadFileNodeData(FileNodeHeader header)
        {
            switch (header.FileNodeID)
            {
            case FileNodeIDs.ObjectSpaceManifestListReferenceFND:
                return(ReadObjectSpaceManifestListReferenceFND(header));

            case FileNodeIDs.RevisionManifestListReferenceFND:
                return(ReadRevisionManifestListReferenceFND(header));

            case FileNodeIDs.ObjectGroupListReferenceFND:
                return(ReadObjectGroupListReferenceFND(header));

            case FileNodeIDs.ObjectDeclaration2RefCountFND:
                return(ReadObjectDeclaration2RefCountFND(header));

            default:
                return(null);
            }
        }
コード例 #5
0
        public RevisionManifestListReferenceFND ReadRevisionManifestListReferenceFND(FileNodeHeader header)
        {
            var fileChunkReference = oneNoteFileReader.ReadFileChunkReference(header.StpFormat, header.CbFormat, "RevisionManifestListReferenceFND.ref");

            return(new RevisionManifestListReferenceFND(header, fileChunkReference));
        }
コード例 #6
0
        public ObjectSpaceManifestListReferenceFND ReadObjectSpaceManifestListReferenceFND(FileNodeHeader header)
        {
            var fileChunkReference = oneNoteFileReader.ReadFileChunkReference(header.StpFormat, header.CbFormat, "ObjectSpaceManifestListReferenceFND.ref");

            var gosid = new ExtendedGuid();

            oneNoteFileReader.ReadExtendedGuid(ref gosid, "ObjectSpaceManifestListReferenceFND.gosid");

            return(new ObjectSpaceManifestListReferenceFND(header, fileChunkReference, gosid));
        }
コード例 #7
0
        public void ReadFileNodeListFragment(IFileChunkReference fileChunkReference, ICollection <FNDBase> result, ref FileChunkReference64x32 nextFragment, Dictionary <uint, uint> transactionsData, params uint[] fileNodeIds)
        {
            oneNoteFileReader.Move(fileChunkReference.Offset, "FileNodeListFragment");

            var jumpSizeToNextFragmentReference = GetJumpSizeToNextFragmentReference(fileChunkReference.DataSize);

            var fileNodeListHeader = new FileNodeListHeader();

            oneNoteFileReader.ReadFileNodeListHeader(ref fileNodeListHeader);
            jumpSizeToNextFragmentReference -= FileNodeListHeader.SizeInBytes;

            var fileNodeListId = fileNodeListHeader.FileNodeListID;
            var nodesCount     = transactionsData[fileNodeListId];
            var fileNodeHeader = new FileNodeHeader();

            while (true)
            {
                if (nodesCount == 0)
                {
                    break;
                }

                oneNoteFileReader.ReadFileNodeHeader(ref fileNodeHeader);
                jumpSizeToNextFragmentReference -= FileNodeHeader.SizeInBytes;

                var fileNodeId = fileNodeHeader.FileNodeID;
                if (fileNodeId == FileNodeIDs.ChunkTerminatorFND)
                {
                    break;
                }

                var sizeOfData = fileNodeHeader.Size - FileNodeHeader.SizeInBytes;
                var skip       = true;

                if (fileNodeIds.Length == 0 || Array.IndexOf(fileNodeIds, fileNodeId) >= 0)
                {
                    var readFileNodeData = ReadFileNodeData(fileNodeHeader);
                    if (readFileNodeData == null)
                    {
                        readFileNodeData = new NotImplementedFND(fileNodeHeader);
                    }
                    else
                    {
                        skip = false;
                    }

                    result.Add(readFileNodeData);
                    jumpSizeToNextFragmentReference -= sizeOfData;
                }

                if (skip && sizeOfData != 0)
                {
                    oneNoteFileReader.Skip(sizeOfData);
                    jumpSizeToNextFragmentReference -= sizeOfData;
                }

                nodesCount--;

                const uint minJumpSize = 4;
                if (jumpSizeToNextFragmentReference < minJumpSize)
                {
                    break;
                }
            }

            if (jumpSizeToNextFragmentReference != 0)
            {
                oneNoteFileReader.Skip(jumpSizeToNextFragmentReference);
            }

            oneNoteFileReader.ReadFileChunkReference64x32(ref nextFragment, "FileNodeListFragment.nextFragment");
            oneNoteFileReader.ExpectFileNodeListFooter();

            transactionsData[fileNodeListId] = nodesCount;
        }