[Libreoffice-commits] .: 2 commits - misc/test-doc-files.sh src/docstream.py

Miklos Vajna vmiklos at kemper.freedesktop.org
Mon May 13 06:04:45 PDT 2013


 misc/test-doc-files.sh |   15 +++++
 src/docstream.py       |  147 +++++++++++++++++++++++++++++++++++++++++++++----
 2 files changed, 151 insertions(+), 11 deletions(-)

New commits:
commit 0968e7558c98aad1ea67769b8e2a245a55aca2e4
Author: Maxime de Roucy <mderoucy at linagora.com>
Date:   Mon May 13 13:47:26 2013 +0200

    add fibRgFcLcb2000 2003 and 2007

diff --git a/src/docstream.py b/src/docstream.py
index 701c50b..f63a263 100644
--- a/src/docstream.py
+++ b/src/docstream.py
@@ -65,7 +65,14 @@ class WordDocumentStream(DOCDirStream):
         self.printAndSet("cbRgFcLcb", self.readuInt16())
 
         self.blobOffset = self.pos
-        self.nFibNew = self.__getFibNew()
+        cswNew = self.getuInt16(pos = self.__getCswNewOffset())
+
+        if cswNew != 0:
+            self.nFibNew = self.getuInt16(pos = self.__getCswNewOffset() + 2)
+            self.nFib = self.nFibNew
+        else:
+            self.nFibNew = 0
+
         self.dumpFibRgFcLcb("fibRgFcLcbBlob")
         self.pos = self.__getCswNewOffset()
 
@@ -74,13 +81,6 @@ class WordDocumentStream(DOCDirStream):
             self.dumpFibRgCswNew("fibRgCswNew")
         print '</fib>'
 
-    def __getFibNew(self):
-        cswNew = self.getuInt16(pos = self.__getCswNewOffset())
-        if cswNew == 0:
-            return 0
-        else:
-            return self.getuInt16(pos = self.__getCswNewOffset() + 2)
-    
     def __getCswNewOffset(self):
         return self.blobOffset + (8 * self.cbRgFcLcb)
 
@@ -202,8 +202,14 @@ class WordDocumentStream(DOCDirStream):
     def dumpFibRgFcLcb(self, name):
         if self.nFib == 0x00c1:
             self.dumpFibRgFcLcb97(name)
+        elif self.nFib == 0x00d9:
+            self.dumpFibRgFcLcb2000(name)
         elif self.nFib == 0x0101:
             self.dumpFibRgFcLcb2002(name)
+        elif self.nFib == 0x010c:
+            self.dumpFibRgFcLcb2003(name)
+        elif self.nFib == 0x0112:
+            self.dumpFibRgFcLcb2007(name)
         else:
             print """<todo what="dumpFibRgFcLcb() doesn't know how to handle nFib = %s">""" % hex(self.nFib)
 
@@ -562,6 +568,26 @@ class WordDocumentStream(DOCDirStream):
         self.__dumpFibRgFcLcb97()
         print '</%s>' % name
 
+    def dumpFibRgFcLcb2000(self, name):
+        print '<%s type="FibRgFcLcb2000" size="864 bytes">' % name
+        self.__dumpFibRgFcLcb2000()
+        print '</%s>' % name
+
+    def dumpFibRgFcLcb2002(self, name):
+        print '<%s type="FibRgFcLcb2002" size="1088 bytes">' % name
+        self.__dumpFibRgFcLcb2002()
+        print '</%s>' % name
+
+    def dumpFibRgFcLcb2003(self, name):
+        print '<%s type="FibRgFcLcb2003" size="1312 bytes">' % name
+        self.__dumpFibRgFcLcb2003()
+        print '</%s>' % name
+
+    def dumpFibRgFcLcb2007(self, name):
+        print '<%s type="FibRgFcLcb2007" size="1464 bytes">' % name
+        self.__dumpFibRgFcLcb2007()
+        print '</%s>' % name
+
     def __dumpFibRgFcLcb2000(self):
         self.__dumpFibRgFcLcb97()
         fields = [
@@ -662,10 +688,109 @@ class WordDocumentStream(DOCDirStream):
         for i in fields:
             self.printAndSet(i, self.readuInt32())
 
-    def dumpFibRgFcLcb2002(self, name):
-        print '<%s type="FibRgFcLcb2002" size="744 bytes">' % name
+    def __dumpFibRgFcLcb2003(self):
         self.__dumpFibRgFcLcb2002()
-        print '</%s>' % name
+        fields = [
+            "fcHplxsdr",
+            "lcbHplxsdr",
+            "fcSttbfBkmkSdt",
+            "lcbSttbfBkmkSdt",
+            "fcPlcfBkfSdt",
+            "lcbPlcfBkfSdt",
+            "fcPlcfBklSdt",
+            "fcCustomXForm",
+            "lcbCustomXForm",
+            "fcSttbfBkmkProt",
+            "lcbSttbfBkmkProt",
+            "fcPlcfBkfProt",
+            "lcbPlcfBkfProt",
+            "fcPlcfBklProt",
+            "lcbPlcfBklProt",
+            "fcSttbProtUser",
+            "lcbSttbProtUser",
+            "fcUnused",
+            "lcbUnused",
+            "fcPlcfpmiOld",
+            "lcbPlcfpmiOld",
+            "fcPlcfpmiOldInline",
+            "lcbPlcfpmiOldInline",
+            "fcPlcfpmiNew",
+            "lcbPlcfpmiNew",
+            "fcPlcfpmiNewInline",
+            "lcbPlcfpmiNewInline",
+            "fcPlcflvcOld",
+            "lcbPlcflvcOld",
+            "lcbPlcflvcOldInline",
+            "fcPlcflvcNew",
+            "lcbPlcflvcNew",
+            "fcPlcflvcNewInline",
+            "lcbPlcflvcNewInline",
+            "fcPgdMother",
+            "lcbPgdMother",
+            "fcBkdMother",
+            "lcbBkdMother",
+            "fcAfdMother",
+            "lcbAfdMother",
+            "fcPgdFtn",
+            "lcbPgdFtn",
+            "fcBkdFtn",
+            "lcbBkdFtn",
+            "fcAfdFtn",
+            "lcbAfdFtn",
+            "fcPgdEdn",
+            "lcbPgdEdn",
+            "fcBkdEdn",
+            "lcbBkdEdn",
+            "fcAfdEdn",
+            "fcAfd",
+            "lcbAfd",
+                ]
+        for i in fields:
+            self.printAndSet(i, self.readuInt32())
+
+    def __dumpFibRgFcLcb2007(self):
+        self.__dumpFibRgFcLcb2003()
+        fields = [
+            "fcPlcfmthd",
+            "lcbPlcfmthd",
+            "fcSttbfBkmkMoveFrom",
+            "lcbSttbfBkmkMoveFrom",
+            "fcPlcfBkfMoveFrom",
+            "lcbPlcfBkfMoveFrom",
+            "fcPlcfBklMoveFrom",
+            "lcbPlcfBklMoveFrom",
+            "fcSttbfBkmkMoveTo",
+            "lcbSttbfBkmkMoveTo",
+            "fcPlcfBkfMoveTo",
+            "lcbPlcfBkfMoveTo",
+            "fcPlcfBklMoveTo",
+            "lcbPlcfBklMoveTo",
+            "fcUnused1",
+            "lcbUnused1",
+            "fcUnused2",
+            "lcbUnused2",
+            "fcUnused3",
+            "lcbUnused3",
+            "lcbSttbfBkmkArto",
+            "fcPlcfBkfArto",
+            "lcbPlcfBkfArto",
+            "fcPlcfBklArto",
+            "lcbPlcfBklArto",
+            "fcArtoData",
+            "lcbArtoData",
+            "fcUnused4",
+            "lcbUnused4",
+            "fcUnused5",
+            "lcbUnused5",
+            "fcUnused6",
+            "lcbUnused6",
+            "fcOssTheme",
+            "lcbOssTheme",
+            "fcColorSchemeMapping",
+            "lcbColorSchemeMapping",
+                ]
+        for i in fields:
+            self.printAndSet(i, self.readuInt32())
 
     def __findText(self, plcPcd, cp):
         """Find the largest i such that plcPcd.aCp[i] <= cp."""
commit 8e82f3e5ecacec3454d8d81ed94beefd33b515df
Author: Miklos Vajna <vmiklos at suse.cz>
Date:   Sun May 12 22:00:29 2013 +0200

    import test-doc-files.sh

diff --git a/misc/test-doc-files.sh b/misc/test-doc-files.sh
new file mode 100755
index 0000000..df4eef0
--- /dev/null
+++ b/misc/test-doc-files.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+# Simple script to stress-test the doc dumper. If you want to get lots of .doc
+# files, use
+# http://cgit.freedesktop.org/libreoffice/core/tree/bin/get-bugzilla-attachments-by-mimetype
+
+for i in test/doc/bugzilla/*.doc
+do
+	if ! ./doc-dump.py $i &> out.xml; then
+		echo $i
+		break
+	else
+		echo "$i ok"
+	fi
+done


More information about the Libreoffice-commits mailing list