[Libreoffice-commits] .: sdext/source

Kohei Yoshida kohei at kemper.freedesktop.org
Fri Feb 10 11:51:35 PST 2012


 sdext/source/pdfimport/inc/pdfparse.hxx      |    3 +
 sdext/source/pdfimport/pdfparse/pdfparse.cxx |   57 +++++++++++++++++++++++++--
 2 files changed, 57 insertions(+), 3 deletions(-)

New commits:
commit bc99c90e88ba9f5376ffde9bd4b4b2fa99d6ddf3
Author: Kohei Yoshida <kohei.yoshida at suse.com>
Date:   Fri Feb 10 14:48:36 2012 -0500

    This method is still used on WIN32.

diff --git a/sdext/source/pdfimport/inc/pdfparse.hxx b/sdext/source/pdfimport/inc/pdfparse.hxx
index 8f715e9..df3e425 100644
--- a/sdext/source/pdfimport/inc/pdfparse.hxx
+++ b/sdext/source/pdfimport/inc/pdfparse.hxx
@@ -304,6 +304,9 @@ class PDFReader
     ~PDFReader() {}
 
     PDFEntry* read( const char* pFileName );
+#ifdef WIN32
+    PDFEntry* read( const char* pBuffer, unsigned int nLen );
+#endif
 };
 
 } // namespace
diff --git a/sdext/source/pdfimport/pdfparse/pdfparse.cxx b/sdext/source/pdfimport/pdfparse/pdfparse.cxx
index e5cae10..32dc0ef 100644
--- a/sdext/source/pdfimport/pdfparse/pdfparse.cxx
+++ b/sdext/source/pdfimport/pdfparse/pdfparse.cxx
@@ -556,9 +556,60 @@ public:
     }
 };
 
+#ifdef WIN32
+PDFEntry* PDFReader::read( const char* pBuffer, unsigned int nLen )
+{
+    PDFGrammar<const char*> aGrammar( pBuffer );
+
+    try
+    {
+        #if OSL_DEBUG_LEVEL > 1
+        boost::spirit::parse_info<const char*> aInfo =
+        #endif
+            boost::spirit::parse( pBuffer,
+                                  pBuffer+nLen,
+                                  aGrammar,
+                                  boost::spirit::space_p );
+        #if OSL_DEBUG_LEVEL > 1
+        fprintf( stderr, "parseinfo: stop = %p (buff=%p, offset = %d), hit = %s, full = %s, length = %d\n",
+                 aInfo.stop, pBuffer, aInfo.stop - pBuffer,
+                 aInfo.hit ? "true" : "false",
+                 aInfo.full ? "true" : "false",
+                 (int)aInfo.length );
+        #endif
+    }
+    catch( const parser_error<const char*, const char*>& rError )
+    {
+        #if OSL_DEBUG_LEVEL > 1
+        fprintf( stderr, "parse error: %s at buffer pos %u\nobject stack:\n",
+                 rError.descriptor, rError.where - pBuffer );
+        unsigned int nElem = aGrammar.m_aObjectStack.size();
+        for( unsigned int i = 0; i < nElem; i++ )
+        {
+            fprintf( stderr, "   %s\n", typeid( *(aGrammar.m_aObjectStack[i]) ).name() );
+        }
+        #endif
+    }
+
+    PDFEntry* pRet = NULL;
+    unsigned int nEntries = aGrammar.m_aObjectStack.size();
+    if( nEntries == 1 )
+    {
+        pRet = aGrammar.m_aObjectStack.back();
+        aGrammar.m_aObjectStack.pop_back();
+    }
+    #if OSL_DEBUG_LEVEL > 1
+    else if( nEntries > 1 )
+        fprintf( stderr, "error got %u stack objects in parse\n", nEntries );
+    #endif
+
+    return pRet;
+}
+#endif
+
 PDFEntry* PDFReader::read( const char* pFileName )
 {
-    #ifdef WIN32
+#ifdef WIN32
     /* #i106583#
        since converting to boost 1.39 file_iterator does not work anymore on all Windows systems
        C++ stdlib istream_iterator does not allow "-" apparently
@@ -584,7 +635,7 @@ PDFEntry* PDFReader::read( const char* pFileName )
         fclose( fp );
     }
     return pRet;
-    #else
+#else
     file_iterator<> file_start( pFileName );
     if( ! file_start )
         return NULL;
@@ -644,7 +695,7 @@ PDFEntry* PDFReader::read( const char* pFileName )
     }
     #endif
     return pRet;
-    #endif // WIN32
+#endif // WIN32
 }
 
 #if defined __SUNPRO_CC


More information about the Libreoffice-commits mailing list