123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- // Copyright 2014 Richard Lehane. All rights reserved.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- package msoleps
- import (
- "encoding/binary"
- "github.com/richardlehane/msoleps/types"
- )
- type Property struct {
- Name string
- T types.Type
- }
- func (p *Property) String() string {
- return p.T.String()
- }
- func (p *Property) Type() string {
- return p.T.Type()
- }
- type propertySetStream struct {
- byteOrder uint16
- version uint16
- SystemID uint32
- CLSID types.Guid
- numPropertySets uint32
- fmtidA types.Guid
- offsetA uint32
- fmtidB types.Guid // This can be absent (i.e. not null)
- offsetB uint32
- }
- func makePropertySetStream(b []byte) (*propertySetStream, error) {
- if len(b) < 48 {
- return nil, ErrFormat
- }
- ps := &propertySetStream{}
- ps.byteOrder = binary.LittleEndian.Uint16(b[:2])
- ps.version = binary.LittleEndian.Uint16(b[2:4])
- ps.SystemID = binary.LittleEndian.Uint32(b[4:8])
- g, _ := types.MakeGuid(b[8:])
- ps.CLSID = g.(types.Guid)
- ps.numPropertySets = binary.LittleEndian.Uint32(b[24:28])
- g, _ = types.MakeGuid(b[28:])
- ps.fmtidA, _ = g.(types.Guid)
- ps.offsetA = binary.LittleEndian.Uint32(b[44:48])
- if ps.numPropertySets != 2 {
- return ps, nil
- }
- if len(b) < 68 {
- return nil, ErrFormat
- }
- g, _ = types.MakeGuid(b[48:])
- ps.fmtidB = g.(types.Guid)
- ps.offsetB = binary.LittleEndian.Uint32(b[64:68])
- return ps, nil
- }
- type propertySet struct {
- size uint32
- numProperties uint32
- idsOffs []propertyIDandOffset
- dict map[uint32]string
- code types.CodePageID
- }
- type propertyIDandOffset struct {
- id uint32
- offset uint32
- }
|