summaryrefslogtreecommitdiff
path: root/sdext
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@suse.com>2012-02-10 14:48:36 -0500
committerKohei Yoshida <kohei.yoshida@suse.com>2012-02-10 14:51:30 -0500
commitbc99c90e88ba9f5376ffde9bd4b4b2fa99d6ddf3 (patch)
treedcf28da196b7d2e6037d832663838ebc73ad2e70 /sdext
parentb4346371080e037d04e8aa1fadd01da435339b6e (diff)
This method is still used on WIN32.
Diffstat (limited to 'sdext')
-rw-r--r--sdext/source/pdfimport/inc/pdfparse.hxx3
-rw-r--r--sdext/source/pdfimport/pdfparse/pdfparse.cxx57
2 files changed, 57 insertions, 3 deletions
diff --git a/sdext/source/pdfimport/inc/pdfparse.hxx b/sdext/source/pdfimport/inc/pdfparse.hxx
index 8f715e97e290..df3e4259ab1a 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 e5cae107695c..32dc0efa9293 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