[Libreoffice-commits] mso-dumper.git: msodumper/docrecord.py test/doc
Miklos Vajna
vmiklos at collabora.co.uk
Tue Feb 4 04:55:32 PST 2014
msodumper/docrecord.py | 4 +++-
test/doc/bookmark-nested.doc |binary
test/doc/test.py | 13 +++++++++++++
3 files changed, 16 insertions(+), 1 deletion(-)
New commits:
commit 8218b715ca1dc17bbb0dc48a513d55cdcfd5fbf5
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Tue Feb 4 13:54:28 2014 +0100
PlcfBkl: don't assume PlcfBkf and PlcfBkl are entirely parallel
This is true for a single entry, but for multiple entires they may not
be parallel: the ibkl in PlcfBkf contains the index in the PlcfBkl.
diff --git a/msodumper/docrecord.py b/msodumper/docrecord.py
index a6e63c4..529a7bc 100644
--- a/msodumper/docrecord.py
+++ b/msodumper/docrecord.py
@@ -109,6 +109,7 @@ class PlcfBkf(DOCDirStream, PLC):
self.pos = offset
self.size = size
self.aCP = []
+ self.aFBKF = []
def dump(self):
print '<plcfBkf type="PlcfBkf" offset="%d" size="%d bytes">' % (self.pos, self.size)
@@ -123,6 +124,7 @@ class PlcfBkf(DOCDirStream, PLC):
# aFBKF
aFBKF = FBKF(self, self.getOffset(self.pos, i))
aFBKF.dump()
+ self.aFBKF.append(aFBKF)
print '</aCP>'
print '</plcfBkf>'
@@ -202,7 +204,7 @@ class PlcfBkl(DOCDirStream, PLC):
# aCp
end = self.getuInt32(pos = pos)
print '<aCP index="%d" bookmarkEnd="%d">' % (i, end)
- start = self.start.aCP[i]
+ start = self.start.aCP[self.start.aFBKF[i].ibkl]
print '<transformed value="%s"/>' % self.quoteAttr(self.mainStream.retrieveCPs(start, end))
pos += 4
print '</aCP>'
diff --git a/test/doc/bookmark-nested.doc b/test/doc/bookmark-nested.doc
new file mode 100644
index 0000000..8cee8fa
Binary files /dev/null and b/test/doc/bookmark-nested.doc differ
diff --git a/test/doc/test.py b/test/doc/test.py
index 1812d53..ec3f815 100755
--- a/test/doc/test.py
+++ b/test/doc/test.py
@@ -137,6 +137,19 @@ class Test(unittest.TestCase):
# The bookmark covers Hello
self.assertEqual('Hello', bookmarkEnds[0].findall('transformed')[0].attrib['value'])
+ def test_bookmark_nested(self):
+ self.dump('bookmark-nested')
+
+ bookmarkStarts = self.root.findall('stream[@name="WordDocument"]/fib/fibRgFcLcbBlob/lcbPlcfBkf/plcfBkf/aCP')
+ bookmarkEnds = self.root.findall('stream[@name="WordDocument"]/fib/fibRgFcLcbBlob/lcbPlcfBkl/plcfBkl/aCP')
+ self.assertEqual(2, len(bookmarkStarts))
+ self.assertEqual(2, len(bookmarkEnds))
+
+ # The outer bookmark should cover the inner one.
+ # This was 'aaa bbb', not 'bbb': the bookmark start was incorrect.
+ self.assertEqual('bbb', bookmarkEnds[0].findall('transformed')[0].attrib['value'])
+ self.assertEqual('aaa bbb ccc', bookmarkEnds[1].findall('transformed')[0].attrib['value'])
+
def test_zoom(self):
self.dump('zoom')
dopBase = self.root.findall('stream[@name="WordDocument"]/fib/fibRgFcLcbBlob/lcbDop/dop/dop2007/dop2003/dop2002/dop2000/dop97/dop95/dopBase')[0]
More information about the Libreoffice-commits
mailing list