mirror of
https://github.com/moparisthebest/SickRage
synced 2024-11-16 14:25:02 -05:00
300 lines
11 KiB
Python
300 lines
11 KiB
Python
|
"""
|
||
|
Documents:
|
||
|
|
||
|
* libwx source code: see fib.c source code
|
||
|
* "Microsoft Word 97 Binary File Format"
|
||
|
http://bio.gsi.de/DOCS/AIX/wword8.html
|
||
|
|
||
|
Microsoft Word 97 (aka Version 8) for Windows and Macintosh. From the Office
|
||
|
book, found in the Microsoft Office Development section in the MSDN Online
|
||
|
Library. HTMLified June 1998. Revised Aug 1 1998, added missing Definitions
|
||
|
section. Revised Dec 21 1998, added missing Document Properties (section).
|
||
|
"""
|
||
|
|
||
|
from lib.hachoir_parser import Parser
|
||
|
from lib.hachoir_core.field import (FieldSet,
|
||
|
Bit, Bits,
|
||
|
UInt8, Int16, UInt16, UInt32, Int32,
|
||
|
NullBytes, RawBytes, PascalString16,
|
||
|
DateTimeMSDOS32)
|
||
|
from lib.hachoir_core.endian import LITTLE_ENDIAN
|
||
|
|
||
|
TIMESTAMP = DateTimeMSDOS32
|
||
|
|
||
|
class BaseWordDocument:
|
||
|
def createFields(self):
|
||
|
yield UInt16(self, "wIdent", 2)
|
||
|
yield UInt16(self, "nFib")
|
||
|
yield UInt16(self, "nProduct")
|
||
|
yield UInt16(self, "lid")
|
||
|
yield Int16(self, "pnNext")
|
||
|
|
||
|
yield Bit(self, "fDot")
|
||
|
yield Bit(self, "fGlsy")
|
||
|
yield Bit(self, "fComplex")
|
||
|
yield Bit(self, "fHasPic")
|
||
|
yield Bits(self, "cQuickSaves", 4)
|
||
|
yield Bit(self, "fEncrypted")
|
||
|
yield Bit(self, "fWhichTblStm")
|
||
|
yield Bit(self, "fReadOnlyRecommanded")
|
||
|
yield Bit(self, "fWriteReservation")
|
||
|
yield Bit(self, "fExtChar")
|
||
|
yield Bit(self, "fLoadOverride")
|
||
|
yield Bit(self, "fFarEeast")
|
||
|
yield Bit(self, "fCrypto")
|
||
|
|
||
|
yield UInt16(self, "nFibBack")
|
||
|
yield UInt32(self, "lKey")
|
||
|
yield UInt8(self, "envr")
|
||
|
|
||
|
yield Bit(self, "fMac")
|
||
|
yield Bit(self, "fEmptySpecial")
|
||
|
yield Bit(self, "fLoadOverridePage")
|
||
|
yield Bit(self, "fFutureSavedUndo")
|
||
|
yield Bit(self, "fWord97Save")
|
||
|
yield Bits(self, "fSpare0", 3)
|
||
|
|
||
|
yield UInt16(self, "chse")
|
||
|
yield UInt16(self, "chsTables")
|
||
|
yield UInt32(self, "fcMin")
|
||
|
yield UInt32(self, "fcMac")
|
||
|
|
||
|
yield PascalString16(self, "file_creator", strip="\0")
|
||
|
|
||
|
yield NullBytes(self, "reserved[]", 12)
|
||
|
|
||
|
yield Int16(self, "lidFE")
|
||
|
yield UInt16(self, "clw")
|
||
|
yield Int32(self, "cbMac")
|
||
|
yield UInt32(self, "lProductCreated")
|
||
|
yield TIMESTAMP(self, "lProductRevised")
|
||
|
|
||
|
yield UInt32(self, "ccpText")
|
||
|
yield Int32(self, "ccpFtn")
|
||
|
yield Int32(self, "ccpHdr")
|
||
|
yield Int32(self, "ccpMcr")
|
||
|
yield Int32(self, "ccpAtn")
|
||
|
yield Int32(self, "ccpEdn")
|
||
|
yield Int32(self, "ccpTxbx")
|
||
|
yield Int32(self, "ccpHdrTxbx")
|
||
|
yield Int32(self, "pnFbpChpFirst")
|
||
|
yield Int32(self, "pnChpFirst")
|
||
|
yield Int32(self, "cpnBteChp")
|
||
|
yield Int32(self, "pnFbpPapFirst")
|
||
|
yield Int32(self, "pnPapFirst")
|
||
|
yield Int32(self, "cpnBtePap")
|
||
|
yield Int32(self, "pnFbpLvcFirst")
|
||
|
yield Int32(self, "pnLvcFirst")
|
||
|
yield Int32(self, "cpnBteLvc")
|
||
|
yield Int32(self, "fcIslandFirst")
|
||
|
yield Int32(self, "fcIslandLim")
|
||
|
yield UInt16(self, "cfclcb")
|
||
|
yield Int32(self, "fcStshfOrig")
|
||
|
yield UInt32(self, "lcbStshfOrig")
|
||
|
yield Int32(self, "fcStshf")
|
||
|
yield UInt32(self, "lcbStshf")
|
||
|
|
||
|
yield Int32(self, "fcPlcffndRef")
|
||
|
yield UInt32(self, "lcbPlcffndRef")
|
||
|
yield Int32(self, "fcPlcffndTxt")
|
||
|
yield UInt32(self, "lcbPlcffndTxt")
|
||
|
yield Int32(self, "fcPlcfandRef")
|
||
|
yield UInt32(self, "lcbPlcfandRef")
|
||
|
yield Int32(self, "fcPlcfandTxt")
|
||
|
yield UInt32(self, "lcbPlcfandTxt")
|
||
|
yield Int32(self, "fcPlcfsed")
|
||
|
yield UInt32(self, "lcbPlcfsed")
|
||
|
yield Int32(self, "fcPlcpad")
|
||
|
yield UInt32(self, "lcbPlcpad")
|
||
|
yield Int32(self, "fcPlcfphe")
|
||
|
yield UInt32(self, "lcbPlcfphe")
|
||
|
yield Int32(self, "fcSttbfglsy")
|
||
|
yield UInt32(self, "lcbSttbfglsy")
|
||
|
yield Int32(self, "fcPlcfglsy")
|
||
|
yield UInt32(self, "lcbPlcfglsy")
|
||
|
yield Int32(self, "fcPlcfhdd")
|
||
|
yield UInt32(self, "lcbPlcfhdd")
|
||
|
yield Int32(self, "fcPlcfbteChpx")
|
||
|
yield UInt32(self, "lcbPlcfbteChpx")
|
||
|
yield Int32(self, "fcPlcfbtePapx")
|
||
|
yield UInt32(self, "lcbPlcfbtePapx")
|
||
|
yield Int32(self, "fcPlcfsea")
|
||
|
yield UInt32(self, "lcbPlcfsea")
|
||
|
yield Int32(self, "fcSttbfffn")
|
||
|
yield UInt32(self, "lcbSttbfffn")
|
||
|
yield Int32(self, "fcPlcffldMom")
|
||
|
yield UInt32(self, "lcbPlcffldMom")
|
||
|
yield Int32(self, "fcPlcffldHdr")
|
||
|
yield UInt32(self, "lcbPlcffldHdr")
|
||
|
yield Int32(self, "fcPlcffldFtn")
|
||
|
yield UInt32(self, "lcbPlcffldFtn")
|
||
|
yield Int32(self, "fcPlcffldAtn")
|
||
|
yield UInt32(self, "lcbPlcffldAtn")
|
||
|
yield Int32(self, "fcPlcffldMcr")
|
||
|
yield UInt32(self, "lcbPlcffldMcr")
|
||
|
yield Int32(self, "fcSttbfbkmk")
|
||
|
yield UInt32(self, "lcbSttbfbkmk")
|
||
|
yield Int32(self, "fcPlcfbkf")
|
||
|
yield UInt32(self, "lcbPlcfbkf")
|
||
|
yield Int32(self, "fcPlcfbkl")
|
||
|
yield UInt32(self, "lcbPlcfbkl")
|
||
|
yield Int32(self, "fcCmds")
|
||
|
yield UInt32(self, "lcbCmds")
|
||
|
yield Int32(self, "fcPlcmcr")
|
||
|
yield UInt32(self, "lcbPlcmcr")
|
||
|
yield Int32(self, "fcSttbfmcr")
|
||
|
yield UInt32(self, "lcbSttbfmcr")
|
||
|
yield Int32(self, "fcPrDrvr")
|
||
|
yield UInt32(self, "lcbPrDrvr")
|
||
|
yield Int32(self, "fcPrEnvPort")
|
||
|
yield UInt32(self, "lcbPrEnvPort")
|
||
|
yield Int32(self, "fcPrEnvLand")
|
||
|
yield UInt32(self, "lcbPrEnvLand")
|
||
|
yield Int32(self, "fcWss")
|
||
|
yield UInt32(self, "lcbWss")
|
||
|
yield Int32(self, "fcDop")
|
||
|
yield UInt32(self, "lcbDop")
|
||
|
yield Int32(self, "fcSttbfAssoc")
|
||
|
yield UInt32(self, "lcbSttbfAssoc")
|
||
|
yield Int32(self, "fcClx")
|
||
|
yield UInt32(self, "lcbClx")
|
||
|
yield Int32(self, "fcPlcfpgdFtn")
|
||
|
yield UInt32(self, "lcbPlcfpgdFtn")
|
||
|
yield Int32(self, "fcAutosaveSource")
|
||
|
yield UInt32(self, "lcbAutosaveSource")
|
||
|
yield Int32(self, "fcGrpXstAtnOwners")
|
||
|
yield UInt32(self, "lcbGrpXstAtnOwners")
|
||
|
yield Int32(self, "fcSttbfAtnbkmk")
|
||
|
yield UInt32(self, "lcbSttbfAtnbkmk")
|
||
|
yield Int32(self, "fcPlcdoaMom")
|
||
|
yield UInt32(self, "lcbPlcdoaMom")
|
||
|
yield Int32(self, "fcPlcdoaHdr")
|
||
|
yield UInt32(self, "lcbPlcdoaHdr")
|
||
|
yield Int32(self, "fcPlcspaMom")
|
||
|
yield UInt32(self, "lcbPlcspaMom")
|
||
|
yield Int32(self, "fcPlcspaHdr")
|
||
|
yield UInt32(self, "lcbPlcspaHdr")
|
||
|
yield Int32(self, "fcPlcfAtnbkf")
|
||
|
yield UInt32(self, "lcbPlcfAtnbkf")
|
||
|
yield Int32(self, "fcPlcfAtnbkl")
|
||
|
yield UInt32(self, "lcbPlcfAtnbkl")
|
||
|
yield Int32(self, "fcPms")
|
||
|
yield UInt32(self, "lcbPms")
|
||
|
yield Int32(self, "fcFormFldSttbs")
|
||
|
yield UInt32(self, "lcbFormFldSttbs")
|
||
|
yield Int32(self, "fcPlcfendRef")
|
||
|
yield UInt32(self, "lcbPlcfendRef")
|
||
|
yield Int32(self, "fcPlcfendTxt")
|
||
|
yield UInt32(self, "lcbPlcfendTxt")
|
||
|
yield Int32(self, "fcPlcffldEdn")
|
||
|
yield UInt32(self, "lcbPlcffldEdn")
|
||
|
yield Int32(self, "fcPlcfpgdEdn")
|
||
|
yield UInt32(self, "lcbPlcfpgdEdn")
|
||
|
yield Int32(self, "fcDggInfo")
|
||
|
yield UInt32(self, "lcbDggInfo")
|
||
|
yield Int32(self, "fcSttbfRMark")
|
||
|
yield UInt32(self, "lcbSttbfRMark")
|
||
|
yield Int32(self, "fcSttbCaption")
|
||
|
yield UInt32(self, "lcbSttbCaption")
|
||
|
yield Int32(self, "fcSttbAutoCaption")
|
||
|
yield UInt32(self, "lcbSttbAutoCaption")
|
||
|
yield Int32(self, "fcPlcfwkb")
|
||
|
yield UInt32(self, "lcbPlcfwkb")
|
||
|
yield Int32(self, "fcPlcfspl")
|
||
|
yield UInt32(self, "lcbPlcfspl")
|
||
|
yield Int32(self, "fcPlcftxbxTxt")
|
||
|
yield UInt32(self, "lcbPlcftxbxTxt")
|
||
|
yield Int32(self, "fcPlcffldTxbx")
|
||
|
yield UInt32(self, "lcbPlcffldTxbx")
|
||
|
yield Int32(self, "fcPlcfhdrtxbxTxt")
|
||
|
yield UInt32(self, "lcbPlcfhdrtxbxTxt")
|
||
|
yield Int32(self, "fcPlcffldHdrTxbx")
|
||
|
yield UInt32(self, "lcbPlcffldHdrTxbx")
|
||
|
yield Int32(self, "fcStwUser")
|
||
|
yield UInt32(self, "lcbStwUser")
|
||
|
yield Int32(self, "fcSttbttmbd")
|
||
|
yield UInt32(self, "cbSttbttmbd")
|
||
|
yield Int32(self, "fcUnused")
|
||
|
yield UInt32(self, "lcbUnused")
|
||
|
yield Int32(self, "fcPgdMother")
|
||
|
yield UInt32(self, "lcbPgdMother")
|
||
|
yield Int32(self, "fcBkdMother")
|
||
|
yield UInt32(self, "lcbBkdMother")
|
||
|
yield Int32(self, "fcPgdFtn")
|
||
|
yield UInt32(self, "lcbPgdFtn")
|
||
|
yield Int32(self, "fcBkdFtn")
|
||
|
yield UInt32(self, "lcbBkdFtn")
|
||
|
yield Int32(self, "fcPgdEdn")
|
||
|
yield UInt32(self, "lcbPgdEdn")
|
||
|
yield Int32(self, "fcBkdEdn")
|
||
|
yield UInt32(self, "lcbBkdEdn")
|
||
|
yield Int32(self, "fcSttbfIntlFld")
|
||
|
yield UInt32(self, "lcbSttbfIntlFld")
|
||
|
yield Int32(self, "fcRouteSlip")
|
||
|
yield UInt32(self, "lcbRouteSlip")
|
||
|
yield Int32(self, "fcSttbSavedBy")
|
||
|
yield UInt32(self, "lcbSttbSavedBy")
|
||
|
yield Int32(self, "fcSttbFnm")
|
||
|
yield UInt32(self, "lcbSttbFnm")
|
||
|
yield Int32(self, "fcPlcfLst")
|
||
|
yield UInt32(self, "lcbPlcfLst")
|
||
|
yield Int32(self, "fcPlfLfo")
|
||
|
yield UInt32(self, "lcbPlfLfo")
|
||
|
yield Int32(self, "fcPlcftxbxBkd")
|
||
|
yield UInt32(self, "lcbPlcftxbxBkd")
|
||
|
yield Int32(self, "fcPlcftxbxHdrBkd")
|
||
|
yield UInt32(self, "lcbPlcftxbxHdrBkd")
|
||
|
yield Int32(self, "fcDocUndo")
|
||
|
yield UInt32(self, "lcbDocUndo")
|
||
|
yield Int32(self, "fcRgbuse")
|
||
|
yield UInt32(self, "lcbRgbuse")
|
||
|
yield Int32(self, "fcUsp")
|
||
|
yield UInt32(self, "lcbUsp")
|
||
|
yield Int32(self, "fcUskf")
|
||
|
yield UInt32(self, "lcbUskf")
|
||
|
yield Int32(self, "fcPlcupcRgbuse")
|
||
|
yield UInt32(self, "lcbPlcupcRgbuse")
|
||
|
yield Int32(self, "fcPlcupcUsp")
|
||
|
yield UInt32(self, "lcbPlcupcUsp")
|
||
|
yield Int32(self, "fcSttbGlsyStyle")
|
||
|
yield UInt32(self, "lcbSttbGlsyStyle")
|
||
|
yield Int32(self, "fcPlgosl")
|
||
|
yield UInt32(self, "lcbPlgosl")
|
||
|
yield Int32(self, "fcPlcocx")
|
||
|
yield UInt32(self, "lcbPlcocx")
|
||
|
yield Int32(self, "fcPlcfbteLvc")
|
||
|
yield UInt32(self, "lcbPlcfbteLvc")
|
||
|
yield TIMESTAMP(self, "ftModified")
|
||
|
yield Int32(self, "fcPlcflvc")
|
||
|
yield UInt32(self, "lcbPlcflvc")
|
||
|
yield Int32(self, "fcPlcasumy")
|
||
|
yield UInt32(self, "lcbPlcasumy")
|
||
|
yield Int32(self, "fcPlcfgram")
|
||
|
yield UInt32(self, "lcbPlcfgram")
|
||
|
yield Int32(self, "fcSttbListNames")
|
||
|
yield UInt32(self, "lcbSttbListNames")
|
||
|
yield Int32(self, "fcSttbfUssr")
|
||
|
yield UInt32(self, "lcbSttbfUssr")
|
||
|
|
||
|
tail = (self.size - self.current_size) // 8
|
||
|
if tail:
|
||
|
yield RawBytes(self, "tail", tail)
|
||
|
|
||
|
class WordDocumentFieldSet(BaseWordDocument, FieldSet):
|
||
|
pass
|
||
|
|
||
|
class WordDocumentParser(BaseWordDocument, Parser):
|
||
|
PARSER_TAGS = {
|
||
|
"id": "word_document",
|
||
|
"min_size": 8,
|
||
|
"description": "Microsoft Office Word document",
|
||
|
}
|
||
|
endian = LITTLE_ENDIAN
|
||
|
|
||
|
def __init__(self, stream, **kw):
|
||
|
Parser.__init__(self, stream, **kw)
|
||
|
|
||
|
def validate(self):
|
||
|
return True
|
||
|
|