[Libreoffice-commits] .: 4 commits - src/docrecord.py src/docstream.py
Miklos Vajna
vmiklos at kemper.freedesktop.org
Sat Dec 1 08:43:38 PST 2012
src/docrecord.py | 168 +++++++++++++++++++++++++++++++++++++++----------------
src/docstream.py | 13 +++-
2 files changed, 132 insertions(+), 49 deletions(-)
New commits:
commit 7ad6658a750bdbb7183df2b301d56bf4c9b42696
Author: Miklos Vajna <vmiklos at suse.cz>
Date: Sat Dec 1 17:42:40 2012 +0100
doc: no more asserts with hardcoded numbers
diff --git a/src/docrecord.py b/src/docrecord.py
index c7dc5bd..0da17f8 100644
--- a/src/docrecord.py
+++ b/src/docrecord.py
@@ -786,6 +786,7 @@ class GRFSTD(DOCDirStream):
class DopBase(DOCDirStream):
"""The DopBase structure contains document and compatibility settings."""
+ size = 84
def __init__(self, dop):
DOCDirStream.__init__(self, dop.bytes)
self.pos = dop.pos
@@ -896,6 +897,8 @@ class DopBase(DOCDirStream):
self.printAndSet("unused16", self.getBit(buf, 14))
self.printAndSet("iGutterPos", self.getBit(buf, 15))
print '</dopBase>'
+ assert self.pos == self.dop.pos + DopBase.size
+ self.dop.pos = self.pos
class Copts80(DOCDirStream):
"""The Copts80 structure specifies compatibility options."""
@@ -931,12 +934,14 @@ class Copts80(DOCDirStream):
class Copts(DOCDirStream):
"""A structure that specifies compatibility options."""
+ size = 32
def __init__(self, dop):
DOCDirStream.__init__(self, dop.bytes)
self.pos = dop.pos
+ self.dop = dop
def dump(self):
- print '<copts type="Copts" offset="%d" size="32 bytes">' % self.pos
+ print '<copts type="Copts" offset="%d" size="%d bytes">' % (self.pos, Copts.size)
Copts80(self).dump()
self.pos += 4
@@ -989,9 +994,12 @@ class Copts(DOCDirStream):
self.printAndSet("empty5", self.readuInt32())
self.printAndSet("empty6", self.readuInt32())
print '</copts>'
+ assert self.pos == self.dop.pos + Copts.size
+ self.dop.pos = self.pos
class Dop95(DOCDirStream):
"""The Dop95 structure contains document and compatibility settings."""
+ size = 88
def __init__(self, dop):
DOCDirStream.__init__(self, dop.bytes)
self.pos = dop.pos
@@ -1001,17 +1009,19 @@ class Dop95(DOCDirStream):
print '<dop95 type="Dop95" offset="%d" size="88 bytes">' % self.pos
dopBase = DopBase(self)
dopBase.dump()
- assert dopBase.pos == self.pos + 84
- self.pos += 84
Copts80(self).dump()
self.pos += 4
print '</dop95>'
+ assert self.pos == self.dop.pos + Dop95.size
+ self.dop.pos = self.pos
class DopTypography(DOCDirStream):
"""The DopTypography structure contains East Asian language typography settings."""
+ size = 310
def __init__(self, dop):
DOCDirStream.__init__(self, dop.bytes)
self.pos = dop.pos
+ self.dop = dop
def dump(self):
print '<dopTypography type="DopTypography" offset="%d" size="310 bytes">' % self.pos
@@ -1036,15 +1046,19 @@ class DopTypography(DOCDirStream):
else:
self.pos += 102
print '</dopTypography>'
+ assert self.pos == self.dop.pos + DopTypography.size
+ self.dop.pos = self.pos
class Dogrid(DOCDirStream):
"""The Dogrid structure specifies parameters for the drawn object properties of the document."""
+ size = 10
def __init__(self, dop):
DOCDirStream.__init__(self, dop.bytes)
self.pos = dop.pos
+ self.dop = dop
def dump(self):
- print '<dogrid type="Dogrid" offset="%d" size="10 bytes">' % self.pos
+ print '<dogrid type="Dogrid" offset="%d" size="%d bytes">' % (self.pos, Dogrid.size)
self.printAndSet("xaGrid", self.readuInt16())
self.printAndSet("yaGrid", self.readuInt16())
self.printAndSet("dxaGrid", self.readuInt16())
@@ -1058,6 +1072,8 @@ class Dogrid(DOCDirStream):
self.printAndSet("dxGridDisplay", (buf & 0x7f)) # 1..7th bits
self.printAndSet("fFollowMargins", self.getBit(buf, 7))
print '</dogrid>'
+ assert self.pos == self.dop.pos + Dogrid.size
+ self.dop.pos = self.pos
class Asumyi(DOCDirStream):
"""The Asumyi structure specifies AutoSummary state information"""
@@ -1081,27 +1097,22 @@ class Asumyi(DOCDirStream):
class Dop97(DOCDirStream):
"""The Dop97 structure contains document and compatibility settings."""
+ size = 500
def __init__(self, dop):
DOCDirStream.__init__(self, dop.bytes)
self.pos = dop.pos
self.dop = dop
def dump(self):
- print '<dop97 type="Dop97" offset="%d" size="500 bytes">' % self.pos
+ print '<dop97 type="Dop97" offset="%d" size="%d bytes">' % (self.pos, Dop97.size)
dop95 = Dop95(self)
dop95.dump()
- assert dop95.pos == self.pos + 88
- self.pos += 88
self.printAndSet("adt", self.readuInt16())
dopTypography = DopTypography(self)
dopTypography.dump()
- assert dopTypography.pos == self.pos + 310
- self.pos += 310
dogrid = Dogrid(self)
dogrid.dump()
- assert dogrid.pos == self.pos + 10
- self.pos += 10
buf = self.readuInt8()
self.printAndSet("unused1", self.getBit(buf, 0))
@@ -1152,9 +1163,12 @@ class Dop97(DOCDirStream):
self.printAndSet("hpsZoomFontPag", self.readuInt16())
self.printAndSet("dywDispPag", self.readuInt16())
print '</dop97>'
+ assert self.pos == self.dop.pos + Dop97.size
+ self.dop.pos = self.pos
class Dop2000(DOCDirStream):
"""The Dop2000 structure contains document and compatibility settings."""
+ size = 544
def __init__(self, dop):
DOCDirStream.__init__(self, dop.bytes)
self.pos = dop.pos
@@ -1164,8 +1178,6 @@ class Dop2000(DOCDirStream):
print '<dop2000 type="Dop2000" offset="%d" size="544 bytes">' % self.pos
dop97 = Dop97(self)
dop97.dump()
- assert dop97.pos == self.pos + 500
- self.pos += 500
self.printAndSet("ilvlLastBulletMain", self.readuInt8())
self.printAndSet("ilvlLastNumberMain", self.readuInt8())
@@ -1196,8 +1208,6 @@ class Dop2000(DOCDirStream):
copts = Copts(self)
copts.dump()
- assert copts.pos == self.pos + 32
- self.pos += 32
self.printAndSet("verCompatPre10", self.readuInt16())
buf = self.readuInt8()
@@ -1220,20 +1230,21 @@ class Dop2000(DOCDirStream):
self.printAndSet("fShowXMLErrors", self.getBit(buf, 6))
self.printAndSet("fAlwaysMergeEmptyNamespace", self.getBit(buf, 7))
print '</dop2000>'
+ assert self.pos == self.dop.pos + Dop2000.size
+ self.dop.pos = self.pos
class Dop2002(DOCDirStream):
"""The Dop2002 structure contains document and compatibility settings."""
+ size = 594
def __init__(self, dop):
DOCDirStream.__init__(self, dop.bytes)
self.pos = dop.pos
self.dop = dop
def dump(self):
- print '<dop2002 type="Dop2002" offset="%d" size="594 bytes">' % self.pos
+ print '<dop2002 type="Dop2002" offset="%d" size="%d bytes">' % (self.pos, Dop2002.size)
dop2000 = Dop2000(self)
dop2000.dump()
- assert dop2000.pos == self.pos + 544
- self.pos += 544
self.printAndSet("unused", self.readuInt32())
@@ -1269,9 +1280,12 @@ class Dop2002(DOCDirStream):
self.printAndSet("cpMinRmHdrTxbx", self.readuInt32())
self.printAndSet("rsidRoot", self.readuInt32())
print '</dop2002>'
+ assert self.pos == self.dop.pos + Dop2002.size
+ self.dop.pos = self.pos
class Dop2003(DOCDirStream):
"""The Dop2003 structure contains document and compatibility settings."""
+ size = 616
def __init__(self, dop):
DOCDirStream.__init__(self, dop.bytes)
self.pos = dop.pos
@@ -1281,8 +1295,6 @@ class Dop2003(DOCDirStream):
print '<dop2003 type="Dop2003" offset="%d" size="616 bytes">' % self.pos
dop2002 = Dop2002(self)
dop2002.dump()
- assert dop2002.pos == self.pos + 594
- self.pos += 594
buf = self.readuInt8()
self.printAndSet("fTreatLockAtnAsReadOnly", self.getBit(buf, 0))
@@ -1319,6 +1331,8 @@ class Dop2003(DOCDirStream):
self.printAndSet("empty3", self.readuInt8())
self.printAndSet("ilfoMacAtCleanup", self.readuInt16())
print '</dop2003>'
+ assert self.pos == self.dop.pos + Dop2003.size
+ self.dop.pos = self.pos
class DopMth(DOCDirStream):
"""The DopMth structure specifies document-wide math settings."""
@@ -1361,8 +1375,6 @@ class Dop2007(DOCDirStream):
print '<dop2007 type="Dop2007" offset="%d">' % self.pos
dop2003 = Dop2003(self)
dop2003.dump()
- assert dop2003.pos == self.pos + 616
- self.pos += 616
self.printAndSet("reserved1", self.readuInt32())
commit d0c77146d7de32ec5407e2d179ee761d491554c3
Author: Miklos Vajna <vmiklos at suse.cz>
Date: Sat Dec 1 17:24:02 2012 +0100
dump Sty
diff --git a/src/docrecord.py b/src/docrecord.py
index fb88f2c..c7dc5bd 100644
--- a/src/docrecord.py
+++ b/src/docrecord.py
@@ -247,6 +247,31 @@ class Tcg(DOCDirStream):
print '<todo what="Tcg: chTerminator != 0x40"/>'
print '</tcg>'
+class Sty(DOCDirStream):
+ """The Sty structure specifies the type of the selection that was made."""
+ def __init__(self, parent):
+ DOCDirStream.__init__(self, parent.bytes)
+ self.pos = parent.pos
+ self.parent = parent
+
+ def dump(self):
+ value = self.readuInt16()
+ styMap = {
+ 0x0000: "styNil",
+ 0x0001: "styChar",
+ 0x0002: "styWord",
+ 0x0003: "stySent",
+ 0x0004: "styPara",
+ 0x0005: "styLine",
+ 0x000C: "styCol",
+ 0x000D: "styRow",
+ 0x000E: "styColAll",
+ 0x000F: "styWholeTable",
+ 0x001B: "styPrefix",
+ }
+ print '<sty name="%s" value="%s"/>' % (styMap[value], hex(value))
+ self.parent.pos = self.pos
+
class Selsf(DOCDirStream):
"""The Selsf structure specifies the last selection that was made to the document."""
def __init__(self, mainStream):
@@ -286,8 +311,7 @@ class Selsf(DOCDirStream):
self.printAndSet("unused4", self.readuInt32())
self.printAndSet("blktblSel", self.readuInt32())
self.printAndSet("cpAnchor", self.readuInt32())
- # TODO Sty
- self.pos += 2
+ Sty(self).dump()
self.printAndSet("unused5", self.readuInt16())
self.printAndSet("cpAnchorShrink", self.readuInt32())
self.printAndSet("xaTableLeft", self.readInt16())
commit 2764302f398da11e5e8cb58913c830bb59391f31
Author: Miklos Vajna <vmiklos at suse.cz>
Date: Sat Dec 1 17:16:54 2012 +0100
dump Selsf
diff --git a/src/docrecord.py b/src/docrecord.py
index 9cac57d..fb88f2c 100644
--- a/src/docrecord.py
+++ b/src/docrecord.py
@@ -247,6 +247,54 @@ class Tcg(DOCDirStream):
print '<todo what="Tcg: chTerminator != 0x40"/>'
print '</tcg>'
+class Selsf(DOCDirStream):
+ """The Selsf structure specifies the last selection that was made to the document."""
+ def __init__(self, mainStream):
+ DOCDirStream.__init__(self, mainStream.doc.getDirectoryStreamByName("1Table").bytes)
+ self.pos = mainStream.fcWss
+ self.size = mainStream.lcbWss
+ self.mainStream = mainStream
+
+ def dump(self):
+ print '<selsf type="Selsf" offset="%d" size="%d bytes">' % (self.pos, self.size)
+
+ buf = self.readuInt16()
+ self.printAndSet("fRightward", self.getBit(buf, 0))
+ self.printAndSet("unused1", self.getBit(buf, 1))
+ self.printAndSet("fWithinCell", self.getBit(buf, 2))
+ self.printAndSet("fTableAnchor", self.getBit(buf, 3))
+ self.printAndSet("fTableSelNonShrink", self.getBit(buf, 4))
+ self.printAndSet("unused2", self.getBit(buf, 5))
+ self.printAndSet("fDiscontiguous", self.getBit(buf, 6))
+ self.printAndSet("fPrefix", self.getBit(buf, 7))
+ self.printAndSet("fShape", self.getBit(buf, 8))
+ self.printAndSet("fFrame", self.getBit(buf, 9))
+ self.printAndSet("fColumn", self.getBit(buf, 10))
+ self.printAndSet("fTable", self.getBit(buf, 11))
+ self.printAndSet("fGraphics", self.getBit(buf, 12))
+ self.printAndSet("fBlock", self.getBit(buf, 13))
+ self.printAndSet("unused3", self.getBit(buf, 14))
+ self.printAndSet("fIns", self.getBit(buf, 15))
+
+ buf = self.readuInt8()
+ self.printAndSet("fForward", buf & 0x7f) # 1..7th bits
+ self.printAndSet("fPrefixW2007", self.getBit(buf, 7))
+
+ self.printAndSet("fInsEnd", self.readuInt8())
+ self.printAndSet("cpFirst", self.readuInt32())
+ self.printAndSet("cpLim", self.readuInt32())
+ self.printAndSet("unused4", self.readuInt32())
+ self.printAndSet("blktblSel", self.readuInt32())
+ self.printAndSet("cpAnchor", self.readuInt32())
+ # TODO Sty
+ self.pos += 2
+ self.printAndSet("unused5", self.readuInt16())
+ self.printAndSet("cpAnchorShrink", self.readuInt32())
+ self.printAndSet("xaTableLeft", self.readInt16())
+ self.printAndSet("xaTableRight", self.readInt16())
+ assert self.pos == self.mainStream.fcWss + self.size
+ print '</selsf>'
+
class Sprm(DOCDirStream):
"""The Sprm structure specifies a modification to a property of a character, paragraph, table, or section."""
def __init__(self, bytes, offset):
diff --git a/src/docstream.py b/src/docstream.py
index c4097e4..da069b2 100644
--- a/src/docstream.py
+++ b/src/docstream.py
@@ -264,7 +264,7 @@ class WordDocumentStream(DOCDirStream):
["fcPrEnvLand"],
["lcbPrEnvLand"],
["fcWss"],
- ["lcbWss"],
+ ["lcbWss", self.handleLcbWss],
["fcDop"],
["lcbDop", self.handleDop],
["fcSttbfAssoc"],
@@ -480,6 +480,9 @@ class WordDocumentStream(DOCDirStream):
tcg = docrecord.Tcg(self, offset, size)
tcg.dump()
+ def handleLcbWss(self):
+ docrecord.Selsf(self).dump()
+
def dumpFibRgFcLcb97(self, name):
print '<%s type="FibRgFcLcb97" size="744 bytes">' % name
self.__dumpFibRgFcLcb97()
commit 6926f1e710bf0baaa7c9bc1ef3e844b00f7b2079
Author: Miklos Vajna <vmiklos at suse.cz>
Date: Sat Dec 1 16:45:32 2012 +0100
dump Tcg
diff --git a/src/docrecord.py b/src/docrecord.py
index 4232517..9cac57d 100644
--- a/src/docrecord.py
+++ b/src/docrecord.py
@@ -105,31 +105,6 @@ class PlcfBkf(DOCDirStream, PLC):
PLC.__init__(self, size, 4) # 4 is defined by 2.8.10
self.pos = offset
self.size = size
-
- def dump(self):
- print '<plcfBkf type="PlcfAtnBkf" offset="%d" size="%d bytes">' % (self.pos, self.size)
- offset = self.mainStream.fcMin
- pos = self.pos
- for i in range(self.getElements()):
- # aCp
- start = offset + self.getuInt32(pos = pos)
- print '<aCP index="%d" bookmarkStart="%d">' % (i, start)
- print '<transformed value="%s"/>' % FcCompressed.getFCTransformedValue(self.mainStream.bytes, start, start + 1)
- pos += 4
-
- # aFBKF
- aFBKF = FBKF(self, self.getOffset(self.pos, i))
- aFBKF.dump()
- print '</aCP>'
- print '</plcfBkf>'
-
-class PlcfBkf(DOCDirStream, PLC):
- """A PLCFBKF is a PLC whose data elements are FBKF structures."""
- def __init__(self, mainStream, offset, size):
- DOCDirStream.__init__(self, mainStream.doc.getDirectoryStreamByName("1Table").bytes, mainStream = mainStream)
- PLC.__init__(self, size, 4) # 4 is defined by 2.8.10
- self.pos = offset
- self.size = size
self.aCP = []
def dump(self):
@@ -257,6 +232,21 @@ class PlcfSed(DOCDirStream, PLC):
print '</aCP>'
print '</plcSed>'
+class Tcg(DOCDirStream):
+ """The Tcg structure specifies command-related customizations."""
+ def __init__(self, mainStream, offset, size):
+ DOCDirStream.__init__(self, mainStream.doc.getDirectoryStreamByName("1Table").bytes)
+ self.pos = offset
+ self.size = size
+
+ def dump(self):
+ print '<tcg type="Tcg" offset="%d" size="%d bytes">' % (self.pos, self.size)
+ self.printAndSet("nTcgVer", self.readuInt8())
+ self.printAndSet("chTerminator", self.readuInt8())
+ if self.chTerminator != 0x40:
+ print '<todo what="Tcg: chTerminator != 0x40"/>'
+ print '</tcg>'
+
class Sprm(DOCDirStream):
"""The Sprm structure specifies a modification to a property of a character, paragraph, table, or section."""
def __init__(self, bytes, offset):
diff --git a/src/docstream.py b/src/docstream.py
index 23349a2..c4097e4 100644
--- a/src/docstream.py
+++ b/src/docstream.py
@@ -252,7 +252,7 @@ class WordDocumentStream(DOCDirStream):
["fcPlcfBkl"],
["lcbPlcfBkl"],
["fcCmds"],
- ["lcbCmds"],
+ ["lcbCmds", self.handleLcbCmds],
["fcUnused1"],
["lcbUnused1"],
["fcSttbfMcr"],
@@ -474,6 +474,12 @@ class WordDocumentStream(DOCDirStream):
plcfSed = docrecord.PlcfSed(self, offset, size)
plcfSed.dump()
+ def handleLcbCmds(self):
+ offset = self.fcCmds
+ size = self.lcbCmds
+ tcg = docrecord.Tcg(self, offset, size)
+ tcg.dump()
+
def dumpFibRgFcLcb97(self, name):
print '<%s type="FibRgFcLcb97" size="744 bytes">' % name
self.__dumpFibRgFcLcb97()
More information about the Libreoffice-commits
mailing list